Title: [175965] trunk
Revision
175965
Author
[email protected]
Date
2014-11-11 11:38:37 -0800 (Tue, 11 Nov 2014)

Log Message

[Frame Flattening] ASSERT(transaction->view == &view()) fails in RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction()
https://bugs.webkit.org/show_bug.cgi?id=138615
<rdar://problem/18928487>

Reviewed by David Hyatt.

Source/WebCore:

Fixes an issue where we always expected that the RenderView associated with the RenderBlock called in
RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction() is the same as the RenderView associated with
the top transaction in the UpdateScrollInfoAfterLayoutTransaction stack regardless of frame flattening. This
expectation is only true when frame flattening is disabled.

Test: fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction):

LayoutTests:

Add a test that causes an assertion failure in affected builds.

* fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update-expected.txt: Added.
* fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (175964 => 175965)


--- trunk/LayoutTests/ChangeLog	2014-11-11 19:18:58 UTC (rev 175964)
+++ trunk/LayoutTests/ChangeLog	2014-11-11 19:38:37 UTC (rev 175965)
@@ -1,3 +1,16 @@
+2014-11-11  Daniel Bates  <[email protected]>
+
+        [Frame Flattening] ASSERT(transaction->view == &view()) fails in RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction()
+        https://bugs.webkit.org/show_bug.cgi?id=138615
+        <rdar://problem/18928487>
+
+        Reviewed by David Hyatt.
+
+        Add a test that causes an assertion failure in affected builds.
+
+        * fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update-expected.txt: Added.
+        * fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html: Added.
+
 2014-11-11  Tibor Meszaros  <[email protected]>
 
         [EFL] Unskip now passing http tests

Added: trunk/LayoutTests/fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update-expected.txt (0 => 175965)


--- trunk/LayoutTests/fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update-expected.txt	2014-11-11 19:38:37 UTC (rev 175965)
@@ -0,0 +1,4 @@
+Test that the layout of a frame-flattened <iframe> inside a flex box doesn't try to modify the list of elements in the main frame that are waiting for a scroll update. This test passed if you see the word PASS below. Otherwise, it failed.
+
+
+PASS

Added: trunk/LayoutTests/fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html (0 => 175965)


--- trunk/LayoutTests/fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html	                        (rev 0)
+++ trunk/LayoutTests/fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html	2014-11-11 19:38:37 UTC (rev 175965)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+#flex-box-in-main-frame {
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+}
+</style>
+<script>
+if (window.testRunner) {
+    testRunner.dumpAsText();
+    testRunner.waitUntilDone();
+}
+
+if (window.internals)
+    internals.settings.setFrameFlatteningEnabled(true);
+
+function runTest()
+{
+    var iframeDocument = document.getElementById("iframe").contentDocument;
+    iframeDocument.getElementById("container").style.display = "inline"; // Removes anonymous wrapper around "This is some inline text."
+    iframeDocument.body.offsetWidth; // Force layout
+
+    document.getElementById("console").innerText = "PASS";
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+</script>
+</head>
+<body>
+<p>Test that the layout of a frame-flattened &lt;iframe&gt; inside a flex box doesn't try to modify the list of elements in the main frame that are waiting for a scroll update. This test passed if you see the word PASS below. Otherwise, it failed.</p>
+<div id="flex-box-in-main-frame">
+    <!-- Note, we defer scroll updates to this flex box until we finish the layout of its children. -->
+    <iframe id="iframe" _onload_="runTest()" width="20%" height="20%" scrolling="auto" srcdoc="
+        <div id='container'>
+            This is some inline text.
+            <p>This is some text in a block.</p>
+        </div>
+    "></iframe>
+</div>
+<pre id="console">FAIL</pre>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (175964 => 175965)


--- trunk/Source/WebCore/ChangeLog	2014-11-11 19:18:58 UTC (rev 175964)
+++ trunk/Source/WebCore/ChangeLog	2014-11-11 19:38:37 UTC (rev 175965)
@@ -1,3 +1,21 @@
+2014-11-11  Daniel Bates  <[email protected]>
+
+        [Frame Flattening] ASSERT(transaction->view == &view()) fails in RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction()
+        https://bugs.webkit.org/show_bug.cgi?id=138615
+        <rdar://problem/18928487>
+
+        Reviewed by David Hyatt.
+
+        Fixes an issue where we always expected that the RenderView associated with the RenderBlock called in
+        RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction() is the same as the RenderView associated with
+        the top transaction in the UpdateScrollInfoAfterLayoutTransaction stack regardless of frame flattening. This
+        expectation is only true when frame flattening is disabled.
+
+        Test: fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction):
+
 2014-11-11  Tim Horton  <[email protected]>
 
         Adopt DDActionContext menu type SPI

Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (175964 => 175965)


--- trunk/Source/WebCore/rendering/RenderBlock.cpp	2014-11-11 19:18:58 UTC (rev 175964)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp	2014-11-11 19:38:37 UTC (rev 175965)
@@ -896,8 +896,8 @@
     if (UNLIKELY(updateScrollInfoAfterLayoutTransactionStack().get() != 0)) {
         UpdateScrollInfoAfterLayoutTransaction* transaction = currentUpdateScrollInfoAfterLayoutTransaction();
         ASSERT(transaction);
-        ASSERT(transaction->view == &view());
-        transaction->blocks.remove(this);
+        if (transaction->view == &view())
+            transaction->blocks.remove(this);
     }
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to