Tile update problems in iframe after scrolling page too soon after load
authorantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Apr 2019 16:31:58 +0000 (16:31 +0000)
committerantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Apr 2019 16:31:58 +0000 (16:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=197057
<rdar://problem/49913663>

Reviewed by Simon Fraser.

We end up destroying FrameHosting scrolling node when we shouldn't.

No test, despite attempts I couldn't get this state to stick. The problem is that in
most cases the destroying scrolling node gets immediately recreated and connected again.
Getting into testably buggy state requires some very specific layer tree configuration update.

* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::detachFromScrollingCoordinator):

Test the right thing.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@244426 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderLayerBacking.cpp

index 4850a82..bec17c6 100644 (file)
@@ -1,3 +1,22 @@
+2019-04-18  Antti Koivisto  <antti@apple.com>
+
+        Tile update problems in iframe after scrolling page too soon after load
+        https://bugs.webkit.org/show_bug.cgi?id=197057
+        <rdar://problem/49913663>
+
+        Reviewed by Simon Fraser.
+
+        We end up destroying FrameHosting scrolling node when we shouldn't.
+
+        No test, despite attempts I couldn't get this state to stick. The problem is that in
+        most cases the destroying scrolling node gets immediately recreated and connected again.
+        Getting into testably buggy state requires some very specific layer tree configuration update.
+
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
+
+        Test the right thing.
+
 2019-04-18  Antoine Quint  <graouts@apple.com>
 
         [Pointer Events WPT] Unskip imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_for_disconnected_node.html
index 2aa27cf..10bb64e 100644 (file)
@@ -1850,7 +1850,7 @@ void RenderLayerBacking::detachFromScrollingCoordinator(OptionSet<ScrollCoordina
         m_scrollingNodeID = 0;
     }
 
-    if (roles.contains(ScrollCoordinationRole::Scrolling) && m_frameHostingNodeID) {
+    if (roles.contains(ScrollCoordinationRole::FrameHosting) && m_frameHostingNodeID) {
         LOG(Compositing, "Detaching FrameHosting node %" PRIu64, m_frameHostingNodeID);
         scrollingCoordinator->unparentChildrenAndDestroyNode(m_frameHostingNodeID);
         m_frameHostingNodeID = 0;