Title: [195267] releases/WebKitGTK/webkit-2.10
Revision
195267
Author
[email protected]
Date
2016-01-19 01:02:16 -0800 (Tue, 19 Jan 2016)

Log Message

Merge r195069 - ASSERTION FAILED: !newRelayoutRoot.container() || !newRelayoutRoot.container()->needsLayout() in WebCore::FrameView::scheduleRelayoutOfSubtree
https://bugs.webkit.org/show_bug.cgi?id=151605#c1

Reviewed by David Hyatt.

Do not let RenderMultiColumnSet/RenderFlowThread mark ancestors dirty while updating scrollbars
for overflow content. While updating scrollbars, we only layout descendants so marking parents dirty
is unnecessary and could lead to an invalid dirty state.

Source/WebCore:

Test: fast/multicol/body-stuck-with-dirty-bit-with-columns.html

* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::layoutSpecialExcludedChild):
* rendering/RenderFlowThread.cpp:
(WebCore::RenderFlowThread::invalidateRegions):
* rendering/RenderFlowThread.h:
* rendering/RenderMultiColumnSet.cpp:
(WebCore::RenderMultiColumnSet::prepareForLayout):

LayoutTests:

* fast/multicol/body-stuck-with-dirty-bit-with-columns-expected.txt: Added.
* fast/multicol/body-stuck-with-dirty-bit-with-columns.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog (195266 => 195267)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog	2016-01-19 09:00:42 UTC (rev 195266)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog	2016-01-19 09:02:16 UTC (rev 195267)
@@ -1,3 +1,17 @@
+2016-01-14  Zalan Bujtas  <[email protected]>
+
+        ASSERTION FAILED: !newRelayoutRoot.container() || !newRelayoutRoot.container()->needsLayout() in WebCore::FrameView::scheduleRelayoutOfSubtree
+        https://bugs.webkit.org/show_bug.cgi?id=151605#c1
+
+        Reviewed by David Hyatt.
+
+        Do not let RenderMultiColumnSet/RenderFlowThread mark ancestors dirty while updating scrollbars
+        for overflow content. While updating scrollbars, we only layout descendants so marking parents dirty
+        is unnecessary and could lead to an invalid dirty state.
+
+        * fast/multicol/body-stuck-with-dirty-bit-with-columns-expected.txt: Added.
+        * fast/multicol/body-stuck-with-dirty-bit-with-columns.html: Added.
+
 2016-01-14  Martin Robinson  <[email protected]>
 
         [GTK] [EFL] Hyphenation can never work in practice due to requirements on lang tags

Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/multicol/body-stuck-with-dirty-bit-with-columns-expected.txt (0 => 195267)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/multicol/body-stuck-with-dirty-bit-with-columns-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/multicol/body-stuck-with-dirty-bit-with-columns-expected.txt	2016-01-19 09:02:16 UTC (rev 195267)
@@ -0,0 +1 @@
+

Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/multicol/body-stuck-with-dirty-bit-with-columns.html (0 => 195267)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/multicol/body-stuck-with-dirty-bit-with-columns.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/multicol/body-stuck-with-dirty-bit-with-columns.html	2016-01-19 09:02:16 UTC (rev 195267)
@@ -0,0 +1,39 @@
+<title>This tests that we don't leave any renderer dirty when layout is done. PASS if no crash or assert in debug.</title>
+<style>
+*{
+    -webkit-columns: 55px 87;
+    overflow-y: scroll;
+    -webkit-background-composite: source-out;
+    width: 0%;
+}
+*|* {
+    display: inline-flex;
+}
+</style>
+<summary id="id_0">
+    aa
+    <progress></progress>
+</summary>
+<script>
+if (window.testRunner)
+    testRunner.waitUntilDone();
+
+setTimeout(function() {
+    if (window.localStorage.stage == 3) {
+        delete window.localStorage.stage;
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.notifyDone();
+        }
+    } else {
+        if (window.localStorage.stage)
+        	window.localStorage.stage++;
+        else
+        	window.localStorage.stage = 1;
+        window.scrollTo(0,document.body.scrollHeight);
+        v_0 = document.getElementById('id_0');
+        v_0.removeChild(v_0.childNodes[0]);
+        location.reload();
+    }
+}, 0);
+</script>

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog (195266 => 195267)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog	2016-01-19 09:00:42 UTC (rev 195266)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog	2016-01-19 09:02:16 UTC (rev 195267)
@@ -1,3 +1,24 @@
+2016-01-14  Zalan Bujtas  <[email protected]>
+
+        ASSERTION FAILED: !newRelayoutRoot.container() || !newRelayoutRoot.container()->needsLayout() in WebCore::FrameView::scheduleRelayoutOfSubtree
+        https://bugs.webkit.org/show_bug.cgi?id=151605#c1
+
+        Reviewed by David Hyatt.
+
+        Do not let RenderMultiColumnSet/RenderFlowThread mark ancestors dirty while updating scrollbars
+        for overflow content. While updating scrollbars, we only layout descendants so marking parents dirty
+        is unnecessary and could lead to an invalid dirty state.
+
+        Test: fast/multicol/body-stuck-with-dirty-bit-with-columns.html
+
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::layoutSpecialExcludedChild):
+        * rendering/RenderFlowThread.cpp:
+        (WebCore::RenderFlowThread::invalidateRegions):
+        * rendering/RenderFlowThread.h:
+        * rendering/RenderMultiColumnSet.cpp:
+        (WebCore::RenderMultiColumnSet::prepareForLayout):
+
 2016-01-14  Martin Robinson  <[email protected]>
 
         [GTK] [EFL] Hyphenation can never work in practice due to requirements on lang tags

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderBlockFlow.cpp (195266 => 195267)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderBlockFlow.cpp	2016-01-19 09:00:42 UTC (rev 195266)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderBlockFlow.cpp	2016-01-19 09:02:16 UTC (rev 195267)
@@ -3755,7 +3755,7 @@
         for (RenderMultiColumnSet* columnSet = flowThread->firstMultiColumnSet(); columnSet; columnSet = columnSet->nextSiblingMultiColumnSet())
             columnSet->prepareForLayout(!flowThread->inBalancingPass());
 
-        flowThread->invalidateRegions();
+        flowThread->invalidateRegions(MarkOnlyThis);
         flowThread->setNeedsHeightsRecalculation(true);
         flowThread->layout();
     } else {

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderFlowThread.cpp (195266 => 195267)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderFlowThread.cpp	2016-01-19 09:00:42 UTC (rev 195266)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderFlowThread.cpp	2016-01-19 09:02:16 UTC (rev 195267)
@@ -106,7 +106,7 @@
     m_regionList.remove(renderRegion);
 }
 
-void RenderFlowThread::invalidateRegions()
+void RenderFlowThread::invalidateRegions(MarkingBehavior markingParents)
 {
     ASSERT(!inFinalLayoutPhase());
 
@@ -125,7 +125,7 @@
     if (m_lineToRegionMap)
         m_lineToRegionMap->clear();
     m_layersToRegionMappingsDirty = true;
-    setNeedsLayout();
+    setNeedsLayout(markingParents);
 
     m_regionsInvalidated = true;
 }

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderFlowThread.h (195266 => 195267)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderFlowThread.h	2016-01-19 09:00:42 UTC (rev 195266)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderFlowThread.h	2016-01-19 09:02:16 UTC (rev 195267)
@@ -85,7 +85,7 @@
     virtual void regionChangedWritingMode(RenderRegion*) { }
 
     void validateRegions();
-    void invalidateRegions();
+    void invalidateRegions(MarkingBehavior = MarkContainingBlockChain);
     bool hasValidRegionInfo() const { return !m_regionsInvalidated && !m_regionList.isEmpty(); }
 
     // Some renderers (column spanners) are moved out of the flow thread to live among column

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderMultiColumnSet.cpp (195266 => 195267)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderMultiColumnSet.cpp	2016-01-19 09:00:42 UTC (rev 195266)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderMultiColumnSet.cpp	2016-01-19 09:02:16 UTC (rev 195267)
@@ -362,7 +362,7 @@
     // Start with "infinite" flow thread portion height until height is known.
     setLogicalBottomInFlowThread(RenderFlowThread::maxLogicalHeight());
 
-    setNeedsLayout();
+    setNeedsLayout(MarkOnlyThis);
 }
 
 void RenderMultiColumnSet::beginFlow(RenderBlock* container)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to