WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
ROLLOUT of r171218
bug-135055-20140718095034.patch (text/plain), 26.27 KB, created by
WebKit Commit Bot
on 2014-07-18 09:50:50 PDT
(
hide
)
Description:
ROLLOUT of r171218
Filename:
MIME Type:
Creator:
WebKit Commit Bot
Created:
2014-07-18 09:50:50 PDT
Size:
26.27 KB
patch
obsolete
>Subversion Revision: 171221 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 719fd24dc1f972298cc2ce394f69a803b5bad0a2..134993792f5b6518b20b94920640660ce39195fe 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,17 @@ >+2014-07-18 Commit Queue <commit-queue@webkit.org> >+ >+ Unreviewed, rolling out r171218. >+ https://bugs.webkit.org/show_bug.cgi?id=135055 >+ >+ Made fast/dom/HTMLObjectElement/beforeload-set-text- >+ crash.xhtml crash (Requested by ap on #webkit). >+ >+ Reverted changeset: >+ >+ "REGRESSION (r169105): Crash in selection" >+ https://bugs.webkit.org/show_bug.cgi?id=134303 >+ http://trac.webkit.org/changeset/171218 >+ > 2014-07-18 Radu Stavila <stavila@adobe.com> > > REGRESSION (r169105): Crash in selection >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index 5f6c9fe0cdb207991b42ac1d7f2c02e58b057258..14d2e4d34dc89c64deb5b3fff3729ed3349d5dcf 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -466,7 +466,7 @@ > 0F09087F1444FDB200028917 /* ScrollbarTheme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FE71415142189FC00DB33BA /* ScrollbarTheme.cpp */; }; > 0F099D0817B968A100FF84B9 /* WebCoreTypedArrayController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F099D0617B968A100FF84B9 /* WebCoreTypedArrayController.cpp */; }; > 0F099D0917B968A100FF84B9 /* WebCoreTypedArrayController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F099D0717B968A100FF84B9 /* WebCoreTypedArrayController.h */; settings = {ATTRIBUTES = (Private, ); }; }; >- 0F11A54F0F39233100C37884 /* RenderSelectionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F11A54E0F39233100C37884 /* RenderSelectionInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ 0F11A54F0F39233100C37884 /* RenderSelectionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F11A54E0F39233100C37884 /* RenderSelectionInfo.h */; }; > 0F13163E16ED0CC80035CC04 /* PlatformCAFilters.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F13163D16ED0CC80035CC04 /* PlatformCAFilters.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 0F13164016ED0CDE0035CC04 /* PlatformCAFiltersMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F13163F16ED0CDE0035CC04 /* PlatformCAFiltersMac.mm */; }; > 0F15DA8A0F3AAEE70000CE47 /* AnimationControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */; }; >diff --git a/Source/WebCore/rendering/RenderBlock.cpp b/Source/WebCore/rendering/RenderBlock.cpp >index 000bd39024aa38e5a2c423086447183028a290df..bdaacd0b0458a2ca4aaf050ab1b56755966d8605 100644 >--- a/Source/WebCore/rendering/RenderBlock.cpp >+++ b/Source/WebCore/rendering/RenderBlock.cpp >@@ -1828,8 +1828,8 @@ bool RenderBlock::isSelectionRoot() const > || isRenderFlowThread() || style().columnSpan() == ColumnSpanAll) > return true; > >- if (view().selectionUnsplitStart()) { >- Node* startElement = view().selectionUnsplitStart()->node(); >+ if (view().selectionStart()) { >+ Node* startElement = view().selectionStart()->node(); > if (startElement && startElement->rootEditableElement() == element()) > return true; > } >diff --git a/Source/WebCore/rendering/RenderSelectionInfo.h b/Source/WebCore/rendering/RenderSelectionInfo.h >index 93ae7d9c508ad1a927ae5d4e23a238d2cbf8c88c..46e886f068d924a7cdfe660c3a2f210b5c8ecfce 100644 >--- a/Source/WebCore/rendering/RenderSelectionInfo.h >+++ b/Source/WebCore/rendering/RenderSelectionInfo.h >@@ -25,9 +25,8 @@ > #ifndef RenderSelectionInfo_h > #define RenderSelectionInfo_h > >-#include "GapRects.h" > #include "IntRect.h" >-#include "RenderBlock.h" >+#include "RenderBox.h" > #include "RenderText.h" > > namespace WebCore { >diff --git a/Source/WebCore/rendering/RenderView.cpp b/Source/WebCore/rendering/RenderView.cpp >index 181c32d79a6ecb9121d3ab28840dfa150ae6b277..04444a27fa225819094e06846464e19768008fb8 100644 >--- a/Source/WebCore/rendering/RenderView.cpp >+++ b/Source/WebCore/rendering/RenderView.cpp >@@ -96,10 +96,10 @@ struct SelectionIterator { > RenderView::RenderView(Document& document, PassRef<RenderStyle> style) > : RenderBlockFlow(document, WTF::move(style)) > , m_frameView(*document.view()) >- , m_unsplitSelectionStart(0) >- , m_unsplitSelectionEnd(0) >- , m_unsplitSelectionStartPos(-1) >- , m_unsplitSelectionEndPos(-1) >+ , m_selectionStart(0) >+ , m_selectionEnd(0) >+ , m_selectionStartPos(-1) >+ , m_selectionEndPos(-1) > , m_rendererCount(0) > , m_maximalOutlineSize(0) > , m_lazyRepaintTimer(this, &RenderView::lazyRepaintTimerFired) >@@ -842,22 +842,19 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e > bool caretChanged = m_selectionWasCaret != frame().selection().isCaret(); > m_selectionWasCaret = frame().selection().isCaret(); > // Just return if the selection hasn't changed. >- if (m_unsplitSelectionStart == start && m_unsplitSelectionStartPos == startPos >- && m_unsplitSelectionEnd == end && m_unsplitSelectionEndPos == endPos && !caretChanged) { >+ if (m_selectionStart == start && m_selectionStartPos == startPos && >+ m_selectionEnd == end && m_selectionEndPos == endPos && !caretChanged) > return; >- } > > // Set global positions for new selection. >- m_unsplitSelectionStart = start; >- m_unsplitSelectionStartPos = startPos; >- m_unsplitSelectionEnd = end; >- m_unsplitSelectionEndPos = endPos; >+ m_selectionStart = start; >+ m_selectionStartPos = startPos; >+ m_selectionEnd = end; >+ m_selectionEndPos = endPos; > > // If there is no RenderNamedFlowThreads we follow the regular selection. > if (!hasRenderNamedFlowThreads()) { >- RenderSubtreesMap singleSubtreeMap; >- singleSubtreeMap.set(this, SelectionSubtreeRoot(start, startPos, end, endPos)); >- updateSelectionForSubtrees(singleSubtreeMap, blockRepaintMode); >+ setSubtreeSelection(*this, start, startPos, end, endPos, blockRepaintMode); > return; > } > >@@ -867,6 +864,7 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e > void RenderView::splitSelectionBetweenSubtrees(RenderObject* start, int startPos, RenderObject* end, int endPos, SelectionRepaintMode blockRepaintMode) > { > // Compute the visible selection end points for each of the subtrees. >+ typedef HashMap<SelectionSubtreeRoot*, SelectionSubtreeRoot> RenderSubtreesMap; > RenderSubtreesMap renderSubtreesMap; > > SelectionSubtreeRoot initialSelection; >@@ -900,49 +898,33 @@ void RenderView::splitSelectionBetweenSubtrees(RenderObject* start, int startPos > renderSubtreesMap.set(&root, selectionData); > } > } >- >- updateSelectionForSubtrees(renderSubtreesMap, blockRepaintMode); >-} >- >-void RenderView::updateSelectionForSubtrees(RenderSubtreesMap& renderSubtreesMap, SelectionRepaintMode blockRepaintMode) >-{ >- SubtreeOldSelectionDataMap oldSelectionDataMap; >- for (auto it = renderSubtreesMap.begin(); it != renderSubtreesMap.end(); ++it) { >- std::unique_ptr<OldSelectionData> oldSelectionData = std::make_unique<OldSelectionData>(); >- clearSubtreeSelection(*it->key, blockRepaintMode, *oldSelectionData); >- oldSelectionDataMap.set(it->key, std::move(oldSelectionData)); > >- SelectionSubtreeRoot& subtreeSelectionData = it->value; >+ for (RenderSubtreesMap::iterator i = renderSubtreesMap.begin(); i != renderSubtreesMap.end(); ++i) { >+ SelectionSubtreeRoot subtreeSelectionData = i->value; > subtreeSelectionData.adjustForVisibleSelection(document()); >- >- SelectionSubtreeRoot& root = *it->key; >- root.setSelectionStart(subtreeSelectionData.selectionStart()); >- root.setSelectionStartPos(subtreeSelectionData.selectionStartPos()); >- root.setSelectionEnd(subtreeSelectionData.selectionEnd()); >- root.setSelectionEndPos(subtreeSelectionData.selectionEndPos()); >- } >- >- // Update selection status for the objects inside the selection subtrees. >- // This needs to be done after the previous loop updated the selectionStart/End >- // parameters of all subtrees because we're going to be climbing up the containing >- // block chain and we might end up in a different selection subtree. >- for (auto it = renderSubtreesMap.begin(); it != renderSubtreesMap.end(); ++it) { >- SelectionSubtreeRoot subtreeSelectionData = it->value; >- OldSelectionData& oldSelectionData = *oldSelectionDataMap.get(it->key); >- applySubtreeSelection(*it->key, subtreeSelectionData.selectionStart(), subtreeSelectionData.selectionEnd(), subtreeSelectionData.selectionEndPos(), blockRepaintMode, oldSelectionData); >+ setSubtreeSelection(*i->key, subtreeSelectionData.selectionStart(), subtreeSelectionData.selectionStartPos(), >+ subtreeSelectionData.selectionEnd(), subtreeSelectionData.selectionEndPos(), blockRepaintMode); > } > } > >-void RenderView::clearSubtreeSelection(const SelectionSubtreeRoot& root, SelectionRepaintMode blockRepaintMode, OldSelectionData& oldSelectionData) >+void RenderView::setSubtreeSelection(SelectionSubtreeRoot& root, RenderObject* start, int startPos, RenderObject* end, int endPos, SelectionRepaintMode blockRepaintMode) > { > // Record the old selected objects. These will be used later > // when we compare against the new selected objects. >- oldSelectionData.selectionStartPos = root.selectionStartPos(); >- oldSelectionData.selectionEndPos = root.selectionEndPos(); >- >+ int oldStartPos = root.selectionStartPos(); >+ int oldEndPos = root.selectionEndPos(); >+ >+ // Objects each have a single selection rect to examine. >+ typedef HashMap<RenderObject*, std::unique_ptr<RenderSelectionInfo>> SelectedObjectMap; >+ SelectedObjectMap oldSelectedObjects; >+ SelectedObjectMap newSelectedObjects; >+ > // Blocks contain selected objects and fill gaps between them, either on the left, right, or in between lines and blocks. > // In order to get the repaint rect right, we have to examine left, middle, and right rects individually, since otherwise > // the union of those rects might remain the same even when changes have occurred. >+ typedef HashMap<RenderBlock*, std::unique_ptr<RenderBlockSelectionInfo>> SelectedBlockMap; >+ SelectedBlockMap oldSelectedBlocks; >+ SelectedBlockMap newSelectedBlocks; > > RenderObject* os = root.selectionStart(); > RenderObject* stop = rendererAfterPosition(root.selectionEnd(), root.selectionEndPos()); >@@ -951,11 +933,11 @@ void RenderView::clearSubtreeSelection(const SelectionSubtreeRoot& root, Selecti > if ((os->canBeSelectionLeaf() || os == root.selectionStart() || os == root.selectionEnd()) > && os->selectionState() != SelectionNone) { > // Blocks are responsible for painting line gaps and margin gaps. They must be examined as well. >- oldSelectionData.selectedObjects.set(os, std::make_unique<RenderSelectionInfo>(os, true)); >+ oldSelectedObjects.set(os, std::make_unique<RenderSelectionInfo>(os, true)); > if (blockRepaintMode == RepaintNewXOROld) { > RenderBlock* cb = os->containingBlock(); > while (cb && !cb->isRenderView()) { >- std::unique_ptr<RenderBlockSelectionInfo>& blockInfo = oldSelectionData.selectedBlocks.add(cb, nullptr).iterator->value; >+ std::unique_ptr<RenderBlockSelectionInfo>& blockInfo = oldSelectedBlocks.add(cb, nullptr).iterator->value; > if (blockInfo) > break; > blockInfo = std::make_unique<RenderBlockSelectionInfo>(cb); >@@ -967,13 +949,17 @@ void RenderView::clearSubtreeSelection(const SelectionSubtreeRoot& root, Selecti > os = selectionIterator.next(); > } > >- auto oldObjectsEnd = oldSelectionData.selectedObjects.end(); >- for (auto i = oldSelectionData.selectedObjects.begin(); i != oldObjectsEnd; ++i) >+ // Now clear the selection. >+ SelectedObjectMap::iterator oldObjectsEnd = oldSelectedObjects.end(); >+ for (SelectedObjectMap::iterator i = oldSelectedObjects.begin(); i != oldObjectsEnd; ++i) > i->key->setSelectionStateIfNeeded(SelectionNone); >-} > >-void RenderView::applySubtreeSelection(SelectionSubtreeRoot& root, RenderObject* start, RenderObject* end, int endPos, SelectionRepaintMode blockRepaintMode, const OldSelectionData& oldSelectionData) >-{ >+ // set selection start and end >+ root.setSelectionStart(start); >+ root.setSelectionStartPos(startPos); >+ root.setSelectionEnd(end); >+ root.setSelectionEndPos(endPos); >+ > // Update the selection status of all objects between selectionStart and selectionEnd > if (start && start == end) > start->setSelectionStateIfNeeded(SelectionBoth); >@@ -985,8 +971,8 @@ void RenderView::applySubtreeSelection(SelectionSubtreeRoot& root, RenderObject* > } > > RenderObject* o = start; >- RenderObject* stop = rendererAfterPosition(end, endPos); >- SelectionIterator selectionIterator(o); >+ stop = rendererAfterPosition(end, endPos); >+ selectionIterator = SelectionIterator(o); > > while (o && o != stop) { > if (o != start && o != end && o->canBeSelectionLeaf()) >@@ -999,8 +985,6 @@ void RenderView::applySubtreeSelection(SelectionSubtreeRoot& root, RenderObject* > > // Now that the selection state has been updated for the new objects, walk them again and > // put them in the new objects list. >- SelectedObjectMap newSelectedObjects; >- SelectedBlockMap newSelectedBlocks; > o = start; > selectionIterator = SelectionIterator(o); > while (o && o != stop) { >@@ -1035,14 +1019,13 @@ void RenderView::applySubtreeSelection(SelectionSubtreeRoot& root, RenderObject* > return; > > // Have any of the old selected objects changed compared to the new selection? >- auto oldObjectsEnd = oldSelectionData.selectedObjects.end(); >- for (auto it = oldSelectionData.selectedObjects.begin(); it != oldObjectsEnd; ++it) { >- RenderObject* obj = it->key; >+ for (SelectedObjectMap::iterator i = oldSelectedObjects.begin(); i != oldObjectsEnd; ++i) { >+ RenderObject* obj = i->key; > RenderSelectionInfo* newInfo = newSelectedObjects.get(obj); >- RenderSelectionInfo* oldInfo = it->value.get(); >+ RenderSelectionInfo* oldInfo = i->value.get(); > if (!newInfo || oldInfo->rect() != newInfo->rect() || oldInfo->state() != newInfo->state() >- || (root.selectionStart() == obj && oldSelectionData.selectionStartPos != root.selectionStartPos()) >- || (root.selectionEnd() == obj && oldSelectionData.selectionEndPos != root.selectionEndPos())) { >+ || (root.selectionStart() == obj && oldStartPos != root.selectionStartPos()) >+ || (root.selectionEnd() == obj && oldEndPos != root.selectionEndPos())) { > oldInfo->repaint(); > if (newInfo) { > newInfo->repaint(); >@@ -1052,16 +1035,16 @@ void RenderView::applySubtreeSelection(SelectionSubtreeRoot& root, RenderObject* > } > > // Any new objects that remain were not found in the old objects dict, and so they need to be updated. >- auto newObjectsEnd = newSelectedObjects.end(); >- for (auto it = newSelectedObjects.begin(); it != newObjectsEnd; ++it) >- it->value->repaint(); >+ SelectedObjectMap::iterator newObjectsEnd = newSelectedObjects.end(); >+ for (SelectedObjectMap::iterator i = newSelectedObjects.begin(); i != newObjectsEnd; ++i) >+ i->value->repaint(); > > // Have any of the old blocks changed? >- auto oldBlocksEnd = oldSelectionData.selectedBlocks.end(); >- for (auto it = oldSelectionData.selectedBlocks.begin(); it != oldBlocksEnd; ++it) { >- RenderBlock* block = it->key; >+ SelectedBlockMap::iterator oldBlocksEnd = oldSelectedBlocks.end(); >+ for (SelectedBlockMap::iterator i = oldSelectedBlocks.begin(); i != oldBlocksEnd; ++i) { >+ RenderBlock* block = i->key; > RenderBlockSelectionInfo* newInfo = newSelectedBlocks.get(block); >- RenderBlockSelectionInfo* oldInfo = it->value.get(); >+ RenderBlockSelectionInfo* oldInfo = i->value.get(); > if (!newInfo || oldInfo->rects() != newInfo->rects() || oldInfo->state() != newInfo->state()) { > oldInfo->repaint(); > if (newInfo) { >@@ -1072,17 +1055,17 @@ void RenderView::applySubtreeSelection(SelectionSubtreeRoot& root, RenderObject* > } > > // Any new blocks that remain were not found in the old blocks dict, and so they need to be updated. >- auto newBlocksEnd = newSelectedBlocks.end(); >- for (auto it = newSelectedBlocks.begin(); it != newBlocksEnd; ++it) >- it->value->repaint(); >+ SelectedBlockMap::iterator newBlocksEnd = newSelectedBlocks.end(); >+ for (SelectedBlockMap::iterator i = newSelectedBlocks.begin(); i != newBlocksEnd; ++i) >+ i->value->repaint(); > } > > void RenderView::getSelection(RenderObject*& startRenderer, int& startOffset, RenderObject*& endRenderer, int& endOffset) const > { >- startRenderer = m_unsplitSelectionStart; >- startOffset = m_unsplitSelectionStartPos; >- endRenderer = m_unsplitSelectionEnd; >- endOffset = m_unsplitSelectionEndPos; >+ startRenderer = m_selectionStart; >+ startOffset = m_selectionStartPos; >+ endRenderer = m_selectionEnd; >+ endOffset = m_selectionEndPos; > } > > void RenderView::clearSelection() >diff --git a/Source/WebCore/rendering/RenderView.h b/Source/WebCore/rendering/RenderView.h >index d7772ac181276e9d44f2ac63e81b493dfa7aaf83..0c26b6835dc06944c5dcf5dfd1a043a690616eeb 100644 >--- a/Source/WebCore/rendering/RenderView.h >+++ b/Source/WebCore/rendering/RenderView.h >@@ -89,8 +89,8 @@ public: > void setSelection(RenderObject* start, int startPos, RenderObject* end, int endPos, SelectionRepaintMode = RepaintNewXOROld); > void getSelection(RenderObject*& startRenderer, int& startOffset, RenderObject*& endRenderer, int& endOffset) const; > void clearSelection(); >- RenderObject* selectionUnsplitStart() const { return m_unsplitSelectionStart; } >- RenderObject* selectionUnsplitEnd() const { return m_unsplitSelectionEnd; } >+ RenderObject* selectionStart() const { return m_selectionStart; } >+ RenderObject* selectionEnd() const { return m_selectionEnd; } > IntRect selectionBounds(bool clipToVisibleContent = true) const; > void repaintSelection() const; > >@@ -304,19 +304,17 @@ private: > friend class LayoutStateDisabler; > > void splitSelectionBetweenSubtrees(RenderObject* start, int startPos, RenderObject* end, int endPos, SelectionRepaintMode blockRepaintMode); >- void clearSubtreeSelection(const SelectionSubtreeRoot&, SelectionRepaintMode, OldSelectionData&); >- void updateSelectionForSubtrees(RenderSubtreesMap&, SelectionRepaintMode); >- void applySubtreeSelection(SelectionSubtreeRoot&, RenderObject* start, RenderObject* end, int endPos, SelectionRepaintMode, const OldSelectionData&); >+ void setSubtreeSelection(SelectionSubtreeRoot&, RenderObject* start, int startPos, RenderObject* end, int endPos, SelectionRepaintMode); > LayoutRect subtreeSelectionBounds(const SelectionSubtreeRoot&, bool clipToVisibleContent = true) const; > void repaintSubtreeSelection(const SelectionSubtreeRoot&) const; > > private: > FrameView& m_frameView; > >- RenderObject* m_unsplitSelectionStart; >- RenderObject* m_unsplitSelectionEnd; >- int m_unsplitSelectionStartPos; >- int m_unsplitSelectionEndPos; >+ RenderObject* m_selectionStart; >+ RenderObject* m_selectionEnd; >+ int m_selectionStartPos; >+ int m_selectionEndPos; > > uint64_t m_rendererCount; > >diff --git a/Source/WebCore/rendering/SelectionSubtreeRoot.cpp b/Source/WebCore/rendering/SelectionSubtreeRoot.cpp >index fafaee644fcd577f1cfeadf01d4adfc198392642..5cfd3fcb39a2d876642fc2a6b94cf3a63ca65380 100644 >--- a/Source/WebCore/rendering/SelectionSubtreeRoot.cpp >+++ b/Source/WebCore/rendering/SelectionSubtreeRoot.cpp >@@ -45,14 +45,6 @@ SelectionSubtreeRoot::SelectionSubtreeRoot() > { > } > >-SelectionSubtreeRoot::SelectionSubtreeRoot(RenderObject* selectionStart, int selectionStartPos, RenderObject* selectionEnd, int selectionEndPos) >- : m_selectionStart(selectionStart) >- , m_selectionStartPos(selectionStartPos) >- , m_selectionEnd(selectionEnd) >- , m_selectionEndPos(selectionEndPos) >-{ >-} >- > void SelectionSubtreeRoot::adjustForVisibleSelection(Document& document) > { > if (selectionClear()) >diff --git a/Source/WebCore/rendering/SelectionSubtreeRoot.h b/Source/WebCore/rendering/SelectionSubtreeRoot.h >index 42c5c934098d3b3cd1dc1c0302e261ac7abaabaa..35cef1182c76705d0ee75e5f47e4628abf3b9729 100644 >--- a/Source/WebCore/rendering/SelectionSubtreeRoot.h >+++ b/Source/WebCore/rendering/SelectionSubtreeRoot.h >@@ -31,7 +31,6 @@ > #define SelectionSubtreeRoot_h > > #include "RenderObject.h" >-#include "RenderSelectionInfo.h" > > namespace WebCore { > >@@ -39,28 +38,8 @@ class Document; > > class SelectionSubtreeRoot { > public: >- >- typedef HashMap<RenderObject*, std::unique_ptr<RenderSelectionInfo>> SelectedObjectMap; >- typedef HashMap<RenderBlock*, std::unique_ptr<RenderBlockSelectionInfo>> SelectedBlockMap; >- typedef HashMap<SelectionSubtreeRoot*, SelectionSubtreeRoot> RenderSubtreesMap; >- >- struct OldSelectionData { >- OldSelectionData() >- : selectionStartPos(-1) >- , selectionEndPos(-1) >- { >- } >- >- int selectionStartPos; >- int selectionEndPos; >- SelectedObjectMap selectedObjects; >- SelectedBlockMap selectedBlocks; >- }; >- >- typedef HashMap<SelectionSubtreeRoot*, std::unique_ptr<OldSelectionData>> SubtreeOldSelectionDataMap; > > SelectionSubtreeRoot(); >- SelectionSubtreeRoot(RenderObject* selectionStart, int selectionStartPos, RenderObject* selectionEnd, int selectionEndPos); > > RenderObject* selectionStart() const { return m_selectionStart; } > int selectionStartPos() const { return m_selectionStartPos; } >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index e5cebfeaa10cce7148d99de970c8bcb9df37b785..3c935abe1170a1e1961317366d2fa518eb8c28b9 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,17 @@ >+2014-07-18 Commit Queue <commit-queue@webkit.org> >+ >+ Unreviewed, rolling out r171218. >+ https://bugs.webkit.org/show_bug.cgi?id=135055 >+ >+ Made fast/dom/HTMLObjectElement/beforeload-set-text- >+ crash.xhtml crash (Requested by ap on #webkit). >+ >+ Reverted changeset: >+ >+ "REGRESSION (r169105): Crash in selection" >+ https://bugs.webkit.org/show_bug.cgi?id=134303 >+ http://trac.webkit.org/changeset/171218 >+ > 2014-07-18 Mario Sanchez Prada <mario.prada@samsung.com> > > [GTK] Unreviewed GTK gardening. Tests passing after SVN r171001 >diff --git a/LayoutTests/fast/regions/selection/crash-deselect-expected.txt b/LayoutTests/fast/regions/selection/crash-deselect-expected.txt >deleted file mode 100644 >index 4f21e219584a1de79da178cc6f032cfaaa91aca7..0000000000000000000000000000000000000000 >--- a/LayoutTests/fast/regions/selection/crash-deselect-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: line 66: HierarchyRequestError: DOM Exception 3: A Node was inserted somewhere it doesn't belong. >- >-Errlog selectionTest: HierarchyRequestError: HierarchyRequestError: DOM Exception 3 : index 1 >-Errlog webtest_fn_24: >- >diff --git a/LayoutTests/fast/regions/selection/crash-deselect.html b/LayoutTests/fast/regions/selection/crash-deselect.html >deleted file mode 100644 >index a1a9248f53d553cee31b4d0aa0774138ea3767d8..0000000000000000000000000000000000000000 >--- a/LayoutTests/fast/regions/selection/crash-deselect.html >+++ /dev/null >@@ -1,72 +0,0 @@ >-<!DOCTYPE html> >-<html id="webtest0"> >- <head id="webtest1"> >- <style id="webtest2"></style> >- <style> >- :last-child { -webkit-flow-into: foo; } >- </style> >- >- </head> >- <body id="webtest3"> >- <script id="example"></script> >- >- <script type="text/javascript"> >- if (window.testRunner) >- testRunner.dumpAsText(false); >- </script> >- >- <script> >- var new_elem = document.createElement("canvas"); >- new_elem.setAttribute("id", "webtest11"); >- document.querySelector("#webtest0").appendChild(new_elem); >- >- document.write("<br><summary>"); >- </script> >- <summary> >- <mathml id="webtest12"> >- <femerge></femerge> >- </mathml> >- >- <script> >- function selectionTest() { >- try { >- wf_i = 0; >- for (; wf_i<40; wf_i++) { >- var range = document.createRange(); >- >- range.setStartBefore(document.getElementById("webtest3")); >- range.setEndAfter(document.getElementById("webtest2")); >- range.deleteContents(); >- >- var markElement = document.getElementById("webtest1").appendChild(document.createElementNS("", "mark")); >- range.setStartAfter(markElement); >- >- var appletElement = document.getElementById("example").appendChild(document.createElement("applet")); >- range.setEndAfter(appletElement); >- >- range.insertNode(document.getElementById("example")); >- } >- } catch(e) { >- document.write("Errlog selectionTest: " + e.name + ": " + e.message + " : index " + wf_i + " <br><table/>"); >- } >- } >- selectionTest(); >- </script> >- <sub> >- >- <script> >- document.designMode = "on"; >- document.execCommand("SelectAll"); >- document.write("Errlog webtest_fn_24: <br><nobr>"); >- >- var femergeElement = document.getElementById("webtest12").appendChild(document.createElement("femerge")); >- var appletElement = document.getElementById("example").appendChild(document.createElement("applet")); >- var gradientElement = document.body.appendChild(document.createElement("gradient")); >- >- document.getElementById("webtest2").isEqualNode(femergeElement.insertBefore(document.documentElement, gradientElement)); >- </script> >- >- <table></table> >- </summary> >- </body> >-</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 135055
: 235130