Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 46572d8428cba7c77d2ea1182c7a1c9502b12ab8 https://github.com/WebKit/WebKit/commit/46572d8428cba7c77d2ea1182c7a1c9502b12ab8 Author: Simon Fraser <simon.fra...@apple.com> Date: 2023-05-02 (Tue, 02 May 2023)
Changed paths: M Source/WebCore/page/scrolling/ScrollingStateTree.cpp M Source/WebCore/page/scrolling/ScrollingStateTree.h M Source/WebCore/rendering/RenderLayerCompositor.cpp M Source/WebCore/rendering/RenderLayerCompositor.h Log Message: ----------- Assert that the scrolling tree is valid, and fix issues with negative z-index layers https://bugs.webkit.org/show_bug.cgi?id=256193 rdar://108769471 Reviewed by Tim Horton. To make it easier to detect invalid scrolling trees which can result in MESSAGE_CHECKs (rdar://108204370) add code to check the validity of the scrolling tree in the web process, and assert when not valid. This code checks that nodes that have cross-references to other scrolling tree nodes actually point to live nodes. This detected a case where we have incorrect behavior (tested by scrollingcoordinator/scrolling-tree/scroller-with-negative-z-child.html and two similar tests); when an overflow:scroll has composited descendant which is not a paint-order child, the child gets an "ancestor clipping stack" which points to ScrollingStateOverflowScrollProxyNodes, which reference the actual overflow scrolling node. However, if the child has negative z-index, we encounter the child before the overflow scroller so fail to find its scrolling tree node. Fix this by keeping track of RenderLayers with unresolved scrolling tree references in m_layersWithUnresolvedRelations, and updating them at the end of the "update backing and hierarchy" compositing phase. * Source/WebCore/page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::commit): (WebCore::ScrollingStateTree::traverse const): (WebCore::ScrollingStateTree::isValid const): * Source/WebCore/page/scrolling/ScrollingStateTree.h: * Source/WebCore/rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::setupScrollProxyRelatedOverflowScrollingNode): (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingProxyRole): (WebCore::RenderLayerCompositor::resolveScrollingTreeRelationships): * Source/WebCore/rendering/RenderLayerCompositor.h: Canonical link: https://commits.webkit.org/263620@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes