Title: [245656] trunk
Revision
245656
Author
[email protected]
Date
2019-05-22 15:58:25 -0700 (Wed, 22 May 2019)

Log Message

Fix scrolling tree state for more obscure combinations of positioning and paint order
https://bugs.webkit.org/show_bug.cgi?id=198139

Reviewed by Antti Koivisto.

Source/WebCore:

There were three places in RenderLayerCompositor that used a version of ancestor
layer traversal looking at containing blocks, and all three had issues. So make a
shared function to do the ancestor walk, and use it thrice.

isScrolledByOverflowScrollLayer() fumbled containingBlockCanSkipLayers, so failed
to create a scrolling tree node for a composited layer inside position:fixed in
overflow (tested by composited-in-absolute-in-overflow.html).

collectStationaryLayerRelatedOverflowNodes() failed to handle nested
overflow:scroll; it needs to find all the composited scrollers that affect the
position of the given layer relative to its compositing ancestor, which may be the
scroller, or a descendant of the scroller. However, it didn't walk up far enough
and find more that one ancestor. Tested by absolute-in-nested-sc-scrollers.html.

enclosingClippingScopes() was OK but now uses the share function.

Tests: scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers.html
       scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow.html

* rendering/RenderLayerCompositor.cpp:
(WebCore::traverseAncestorLayers):
(WebCore::enclosingClippingScopes):
(WebCore::isScrolledByOverflowScrollLayer):
(WebCore::collectStationaryLayerRelatedOverflowNodes):
(WebCore::collectRelatedCoordinatedScrollingNodes):

LayoutTests:

* platform/ios-wk2/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt: Added.
* platform/ios-wk2/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt: Added.
* scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt: Added.
* scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers.html: Added.
* scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt: Added.
* scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (245655 => 245656)


--- trunk/LayoutTests/ChangeLog	2019-05-22 22:43:25 UTC (rev 245655)
+++ trunk/LayoutTests/ChangeLog	2019-05-22 22:58:25 UTC (rev 245656)
@@ -1,5 +1,19 @@
 2019-05-22  Simon Fraser  <[email protected]>
 
+        Fix scrolling tree state for more obscure combinations of positioning and paint order
+        https://bugs.webkit.org/show_bug.cgi?id=198139
+
+        Reviewed by Antti Koivisto.
+
+        * platform/ios-wk2/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt: Added.
+        * platform/ios-wk2/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt: Added.
+        * scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt: Added.
+        * scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers.html: Added.
+        * scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt: Added.
+        * scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow.html: Added.
+
+2019-05-22  Simon Fraser  <[email protected]>
+
         Inner scroller of nested overflow:scrolls jitters when scrolling
         https://bugs.webkit.org/show_bug.cgi?id=198131
 

Added: trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt (0 => 245656)


--- trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt	2019-05-22 22:58:25 UTC (rev 245656)
@@ -0,0 +1,50 @@
+
+(Frame scrolling node
+  (scrollable area size 800 600)
+  (contents size 800 600)
+  (parent relative scrollable rect at (0,0) size 800x600)
+  (scrollable area parameters 
+    (horizontal scroll elasticity 1)
+    (vertical scroll elasticity 1)
+    (horizontal scrollbar mode 0)
+    (vertical scrollbar mode 0))
+  (layout viewport at (0,0) size 800x600)
+  (min layout viewport origin (0,0))
+  (max layout viewport origin (0,0))
+  (behavior for fixed 0)
+  (children 1
+    (Overflow scrolling node
+      (scrollable area size 300 300)
+      (contents size 300 794)
+      (parent relative scrollable rect at (30,22) size 300x300)
+      (scrollable area parameters 
+        (horizontal scroll elasticity 1)
+        (vertical scroll elasticity 1)
+        (horizontal scrollbar mode 0)
+        (vertical scrollbar mode 0)
+        (has enabled vertical scrollbar 1))
+      (children 1
+        (Overflow scrolling node
+          (scrollable area size 250 250)
+          (contents size 250 500)
+          (parent relative scrollable rect at (24,24) size 250x250)
+          (scrollable area parameters 
+            (horizontal scroll elasticity 1)
+            (vertical scroll elasticity 1)
+            (horizontal scrollbar mode 0)
+            (vertical scrollbar mode 0)
+            (has enabled vertical scrollbar 1))
+          (children 1
+            (Positioned node
+              (layout constraints 
+                (layer-position-at-last-layout (-2,6))
+                (positioning-behavior stationary))
+              (related overflow nodes 2)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+

Added: trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt (0 => 245656)


--- trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt	2019-05-22 22:58:25 UTC (rev 245656)
@@ -0,0 +1,29 @@
+
+(Frame scrolling node
+  (scrollable area size 800 600)
+  (contents size 800 600)
+  (parent relative scrollable rect at (0,0) size 800x600)
+  (scrollable area parameters 
+    (horizontal scroll elasticity 1)
+    (vertical scroll elasticity 1)
+    (horizontal scrollbar mode 0)
+    (vertical scrollbar mode 0))
+  (layout viewport at (0,0) size 800x600)
+  (min layout viewport origin (0,0))
+  (max layout viewport origin (0,0))
+  (behavior for fixed 0)
+  (children 1
+    (Overflow scrolling node
+      (scrollable area size 300 300)
+      (contents size 300 1000)
+      (parent relative scrollable rect at (30,22) size 300x300)
+      (scrollable area parameters 
+        (horizontal scroll elasticity 1)
+        (vertical scroll elasticity 1)
+        (horizontal scrollbar mode 0)
+        (vertical scrollbar mode 0)
+        (has enabled vertical scrollbar 1))
+    )
+  )
+)
+

Added: trunk/LayoutTests/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt (0 => 245656)


--- trunk/LayoutTests/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers-expected.txt	2019-05-22 22:58:25 UTC (rev 245656)
@@ -0,0 +1,50 @@
+
+(Frame scrolling node
+  (scrollable area size 800 600)
+  (contents size 800 600)
+  (parent relative scrollable rect at (0,0) size 800x600)
+  (scrollable area parameters 
+    (horizontal scroll elasticity 2)
+    (vertical scroll elasticity 2)
+    (horizontal scrollbar mode 0)
+    (vertical scrollbar mode 0))
+  (layout viewport at (0,0) size 800x600)
+  (min layout viewport origin (0,0))
+  (max layout viewport origin (0,0))
+  (behavior for fixed 0)
+  (children 1
+    (Overflow scrolling node
+      (scrollable area size 285 285)
+      (contents size 285 794)
+      (parent relative scrollable rect at (30,22) size 285x285)
+      (scrollable area parameters 
+        (horizontal scroll elasticity 0)
+        (vertical scroll elasticity 0)
+        (horizontal scrollbar mode 0)
+        (vertical scrollbar mode 0)
+        (has enabled vertical scrollbar 1))
+      (children 1
+        (Overflow scrolling node
+          (scrollable area size 235 235)
+          (contents size 235 500)
+          (parent relative scrollable rect at (24,24) size 235x235)
+          (scrollable area parameters 
+            (horizontal scroll elasticity 0)
+            (vertical scroll elasticity 0)
+            (horizontal scrollbar mode 0)
+            (vertical scrollbar mode 0)
+            (has enabled vertical scrollbar 1))
+          (children 1
+            (Positioned node
+              (layout constraints 
+                (layer-position-at-last-layout (-2,6))
+                (positioning-behavior stationary))
+              (related overflow nodes 2)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+

Added: trunk/LayoutTests/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers.html (0 => 245656)


--- trunk/LayoutTests/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers.html	                        (rev 0)
+++ trunk/LayoutTests/scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers.html	2019-05-22 22:58:25 UTC (rev 245656)
@@ -0,0 +1,68 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+    <title>Tests that we make a scrolling tree node for composited layers nested inside position:absolute in a scroller</title>
+    <style>
+        .scroller {
+            overflow: scroll;
+            margin: 20px;
+            height: 300px;
+            width: 300px;
+            border: 2px solid black;
+            opacity: 0.8;
+        }
+
+        .scroller > .scroller {
+            height: 250px;
+            width: 250px;
+        }
+
+        .absolute {
+            position:absolute;
+            left: 50px;
+            top: 50px;
+            width: 200px;
+            height: 120px;
+            padding: 20px;
+            background: gray;
+        }
+        
+        .composited {
+            transform: translateZ(0);
+        }
+        
+        .box {
+            width: 100px;
+            height: 100px;
+            background-color: green;
+        }
+        
+        .spacer {
+            height: 500px;
+            width: 20px;
+            background-color: silver;
+        }
+    </style>
+    <script>
+        if (window.testRunner)
+            testRunner.dumpAsText();
+
+        window.addEventListener('load', () => {
+            if (window.internals)
+                document.getElementById('tree').innerText = internals.scrollingStateTreeAsText();
+        }, false);
+    </script>
+</head>
+<body>
+    <div class="scroller">
+        <div class="scroller">
+            <div class="absolute">
+                <!-- <div class="composited box"></div> -->
+            </div>
+            <div class="spacer"></div>
+        </div>
+        <div class="spacer"></div>
+    </div>
+<pre id="tree"></pre>
+</body>
+</html>

Added: trunk/LayoutTests/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt (0 => 245656)


--- trunk/LayoutTests/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow-expected.txt	2019-05-22 22:58:25 UTC (rev 245656)
@@ -0,0 +1,29 @@
+
+(Frame scrolling node
+  (scrollable area size 800 600)
+  (contents size 800 600)
+  (parent relative scrollable rect at (0,0) size 800x600)
+  (scrollable area parameters 
+    (horizontal scroll elasticity 2)
+    (vertical scroll elasticity 2)
+    (horizontal scrollbar mode 0)
+    (vertical scrollbar mode 0))
+  (layout viewport at (0,0) size 800x600)
+  (min layout viewport origin (0,0))
+  (max layout viewport origin (0,0))
+  (behavior for fixed 0)
+  (children 1
+    (Overflow scrolling node
+      (scrollable area size 285 285)
+      (contents size 285 1000)
+      (parent relative scrollable rect at (30,22) size 285x285)
+      (scrollable area parameters 
+        (horizontal scroll elasticity 0)
+        (vertical scroll elasticity 0)
+        (horizontal scrollbar mode 0)
+        (vertical scrollbar mode 0)
+        (has enabled vertical scrollbar 1))
+    )
+  )
+)
+

Added: trunk/LayoutTests/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow.html (0 => 245656)


--- trunk/LayoutTests/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow.html	                        (rev 0)
+++ trunk/LayoutTests/scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow.html	2019-05-22 22:58:25 UTC (rev 245656)
@@ -0,0 +1,58 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+    <title>Tests that we make a scrolling tree node for composited layers nested inside position:absolute in a scroller</title>
+    <style>
+        .scroller {
+            overflow: scroll;
+            margin: 20px;
+            height: 300px;
+            width: 300px;
+            border: 2px solid black;
+        }
+
+        .absolute {
+            position:absolute;
+            left: 50px;
+            top: 50px;
+            width: 200px;
+            height: 120px;
+            padding: 20px;
+            background: gray;
+        }
+        
+        .composited {
+            transform: translateZ(0);
+        }
+        
+        .box {
+            width: 100px;
+            height: 100px;
+            background-color: green;
+        }
+        
+        .spacer {
+            height: 500px;
+        }
+    </style>
+    <script>
+        if (window.testRunner)
+            testRunner.dumpAsText();
+
+        window.addEventListener('load', () => {
+            if (window.internals)
+                document.getElementById('tree').innerText = internals.scrollingStateTreeAsText();
+        }, false);
+    </script>
+</head>
+<body>
+    <div class="scroller">
+        <div class="spacer"></div>
+        <div class="absolute">
+            <div class="composited box"></div>
+        </div>
+        <div class="spacer"></div>
+    </div>
+<pre id="tree"></pre>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (245655 => 245656)


--- trunk/Source/WebCore/ChangeLog	2019-05-22 22:43:25 UTC (rev 245655)
+++ trunk/Source/WebCore/ChangeLog	2019-05-22 22:58:25 UTC (rev 245656)
@@ -1,5 +1,38 @@
 2019-05-22  Simon Fraser  <[email protected]>
 
+        Fix scrolling tree state for more obscure combinations of positioning and paint order
+        https://bugs.webkit.org/show_bug.cgi?id=198139
+
+        Reviewed by Antti Koivisto.
+
+        There were three places in RenderLayerCompositor that used a version of ancestor
+        layer traversal looking at containing blocks, and all three had issues. So make a
+        shared function to do the ancestor walk, and use it thrice.
+
+        isScrolledByOverflowScrollLayer() fumbled containingBlockCanSkipLayers, so failed
+        to create a scrolling tree node for a composited layer inside position:fixed in
+        overflow (tested by composited-in-absolute-in-overflow.html).
+
+        collectStationaryLayerRelatedOverflowNodes() failed to handle nested
+        overflow:scroll; it needs to find all the composited scrollers that affect the
+        position of the given layer relative to its compositing ancestor, which may be the
+        scroller, or a descendant of the scroller. However, it didn't walk up far enough
+        and find more that one ancestor. Tested by absolute-in-nested-sc-scrollers.html.
+
+        enclosingClippingScopes() was OK but now uses the share function.
+
+        Tests: scrollingcoordinator/scrolling-tree/absolute-in-nested-sc-scrollers.html
+               scrollingcoordinator/scrolling-tree/composited-in-absolute-in-overflow.html
+
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::traverseAncestorLayers):
+        (WebCore::enclosingClippingScopes):
+        (WebCore::isScrolledByOverflowScrollLayer):
+        (WebCore::collectStationaryLayerRelatedOverflowNodes):
+        (WebCore::collectRelatedCoordinatedScrollingNodes):
+
+2019-05-22  Simon Fraser  <[email protected]>
+
         Inner scroller of nested overflow:scrolls jitters when scrolling
         https://bugs.webkit.org/show_bug.cgi?id=198131
 

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (245655 => 245656)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2019-05-22 22:43:25 UTC (rev 245655)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2019-05-22 22:58:25 UTC (rev 245656)
@@ -1794,6 +1794,34 @@
     extent.extentComputed = true;
 }
 
+enum class AncestorTraversal { Continue, Stop };
+
+// This is a simplified version of containing block walking that only handles absolute position.
+template <typename Function>
+static AncestorTraversal traverseAncestorLayers(const RenderLayer& layer, Function&& function)
+{
+    bool containingBlockCanSkipLayers = layer.renderer().isAbsolutelyPositioned();
+    RenderLayer* nextPaintOrderParent = layer.paintOrderParent();
+
+    for (const auto* ancestorLayer = layer.parent(); ancestorLayer; ancestorLayer = ancestorLayer->parent()) {
+        bool inContainingBlockChain = true;
+
+        if (containingBlockCanSkipLayers)
+            inContainingBlockChain = ancestorLayer->renderer().canContainAbsolutelyPositionedObjects();
+
+        if (function(*ancestorLayer, inContainingBlockChain, ancestorLayer == nextPaintOrderParent) == AncestorTraversal::Stop)
+            return AncestorTraversal::Stop;
+
+        if (inContainingBlockChain)
+            containingBlockCanSkipLayers = ancestorLayer->renderer().isAbsolutelyPositioned();
+        
+        if (ancestorLayer == nextPaintOrderParent)
+            nextPaintOrderParent = ancestorLayer->paintOrderParent();
+    }
+    
+    return AncestorTraversal::Continue;
+}
+
 static bool createsClippingScope(const RenderLayer& layer)
 {
     return layer.hasCompositedScrollableOverflow();
@@ -1807,27 +1835,20 @@
     if (!layer.hasCompositedScrollingAncestor())
         return clippingScopes;
 
-    bool containingBlockCanSkipLayers = layer.renderer().isAbsolutelyPositioned();
-    for (const auto* ancestorLayer = layer.parent(); ancestorLayer; ancestorLayer = ancestorLayer->parent()) {
-        bool inContainingBlockChain = true;
-        if (containingBlockCanSkipLayers) {
-            inContainingBlockChain = ancestorLayer->renderer().canContainAbsolutelyPositionedObjects();
-            if (inContainingBlockChain)
-                containingBlockCanSkipLayers = ancestorLayer->renderer().isAbsolutelyPositioned();
-        }
-        
-        if (inContainingBlockChain && createsClippingScope(*ancestorLayer)) {
+    traverseAncestorLayers(layer, [&](const RenderLayer& ancestorLayer, bool inContainingBlockChain, bool) {
+        if (inContainingBlockChain && createsClippingScope(ancestorLayer)) {
             LayoutRect clipRect;
-            if (is<RenderBox>(ancestorLayer->renderer())) {
+            if (is<RenderBox>(ancestorLayer.renderer())) {
                 // FIXME: This is expensive. Broken with transforms.
-                LayoutPoint offsetFromRoot = ancestorLayer->convertToLayerCoords(&rootLayer, { });
-                clipRect = downcast<RenderBox>(ancestorLayer->renderer()).overflowClipRect(offsetFromRoot);
+                LayoutPoint offsetFromRoot = ancestorLayer.convertToLayerCoords(&rootLayer, { });
+                clipRect = downcast<RenderBox>(ancestorLayer.renderer()).overflowClipRect(offsetFromRoot);
             }
 
-            LayerOverlapMap::LayerAndBounds layerAndBounds { const_cast<RenderLayer&>(*ancestorLayer), clipRect };
+            LayerOverlapMap::LayerAndBounds layerAndBounds { const_cast<RenderLayer&>(ancestorLayer), clipRect };
             clippingScopes.insert(1, layerAndBounds); // Order is roots to leaves.
         }
-    }
+        return AncestorTraversal::Continue;
+    });
 
     return clippingScopes;
 }
@@ -3040,24 +3061,17 @@
     return nullptr;
 }
 
-// Return true if overflowScrollLayer is in layer's containing block chain.
 static bool isScrolledByOverflowScrollLayer(const RenderLayer& layer, const RenderLayer& overflowScrollLayer)
 {
-    bool containingBlockCanSkipLayers = layer.renderer().isAbsolutelyPositioned();
-
-    for (const auto* currLayer = layer.parent(); currLayer; currLayer = currLayer->parent()) {
-        bool inContainingBlockChain = true;
-        if (containingBlockCanSkipLayers) {
-            inContainingBlockChain = currLayer->renderer().canContainAbsolutelyPositionedObjects();
-            if (inContainingBlockChain)
-                containingBlockCanSkipLayers = currLayer->renderer().isAbsolutelyPositioned();
+    bool scrolledByOverflowScroll = false;
+    traverseAncestorLayers(layer, [&](const RenderLayer& ancestorLayer, bool inContainingBlockChain, bool) {
+        if (&ancestorLayer == &overflowScrollLayer) {
+            scrolledByOverflowScroll = inContainingBlockChain;
+            return AncestorTraversal::Stop;
         }
-
-        if (currLayer == &overflowScrollLayer)
-            return inContainingBlockChain;
-    }
-
-    return false;
+        return AncestorTraversal::Continue;
+    });
+    return scrolledByOverflowScroll;
 }
 
 static bool isNonScrolledLayerInsideScrolledCompositedAncestor(const RenderLayer& layer, const RenderLayer& compositedAncestor, const RenderLayer& scrollingAncestor)
@@ -3083,7 +3097,7 @@
     return isNonScrolledLayerInsideScrolledCompositedAncestor(layer, compositedAncestor, *scrollingAncestor);
 }
 
-static void collectStationaryLayerRelatedOverflowNodes(const RenderLayer& layer, const RenderLayer& /*compositedAncestor*/, Vector<ScrollingNodeID>& scrollingNodes)
+static void collectStationaryLayerRelatedOverflowNodes(const RenderLayer& layer, const RenderLayer&, Vector<ScrollingNodeID>& scrollingNodes)
 {
     ASSERT(layer.isComposited());
     
@@ -3097,24 +3111,21 @@
     };
 
     ASSERT(layer.renderer().isAbsolutelyPositioned());
-    bool containingBlockCanSkipLayers = true;
 
-    for (const auto* currLayer = layer.parent(); currLayer; currLayer = currLayer->parent()) {
-        bool inContainingBlockChain = true;
-        if (containingBlockCanSkipLayers) {
-            inContainingBlockChain = currLayer->renderer().canContainAbsolutelyPositionedObjects();
-            if (inContainingBlockChain)
-                containingBlockCanSkipLayers = currLayer->renderer().isAbsolutelyPositioned();
-        }
+    // Collect all the composited scrollers which affect the position of this layer relative to its compositing ancestor (which might be inside the scroller or the scroller itself).
+    bool seenPaintOrderAncestor = false;
+    traverseAncestorLayers(layer, [&](const RenderLayer& ancestorLayer, bool isContainingBlockChain, bool isPaintOrderAncestor) {
+        seenPaintOrderAncestor |= isPaintOrderAncestor;
+        if (isContainingBlockChain && isPaintOrderAncestor)
+            return AncestorTraversal::Stop;
 
-        if (currLayer->hasCompositedScrollableOverflow()) {
-            appendOverflowLayerNodeID(*currLayer);
-            break;
-        }
-    }
+        if (seenPaintOrderAncestor && !isContainingBlockChain && ancestorLayer.hasCompositedScrollableOverflow())
+            appendOverflowLayerNodeID(ancestorLayer);
+
+        return AncestorTraversal::Continue;
+    });
 }
 
-
 ScrollPositioningBehavior RenderLayerCompositor::computeCoordinatedPositioningForLayer(const RenderLayer& layer) const
 {
     if (layer.isRenderViewLayer())
@@ -3182,7 +3193,6 @@
     }
     case ScrollPositioningBehavior::Stationary: {
         ASSERT(layer.renderer().isAbsolutelyPositioned());
-        // Collect all the composited scrollers between this layer and its composited ancestor.
         auto* compositedAncestor = layer.ancestorCompositingLayer();
         if (!compositedAncestor)
             return overflowNodeData;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to