Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: efdc94274152816082dc0b6183901c9a2728d8c3
https://github.com/WebKit/WebKit/commit/efdc94274152816082dc0b6183901c9a2728d8c3
Author: Simon Fraser <[email protected]>
Date: 2026-01-30 (Fri, 30 Jan 2026)
Changed paths:
M Source/WebCore/dom/Document.cpp
M Source/WebCore/page/LocalFrameView.cpp
M Source/WebCore/page/LocalFrameView.h
M Source/WebCore/page/scrolling/ScrollAnchoringController.cpp
M Source/WebCore/page/scrolling/ScrollAnchoringController.h
M Source/WebCore/platform/ScrollAnimator.cpp
M Source/WebCore/platform/ScrollableArea.cpp
M Source/WebCore/platform/ScrollableArea.h
M Source/WebCore/rendering/RenderLayerScrollableArea.cpp
M Source/WebCore/rendering/RenderLayerScrollableArea.h
M Source/WebCore/rendering/RenderObject.cpp
Log Message:
-----------
[Scroll anchoring] Eliminate the
invalidateScrollAnchoringElement/updateScrollAnchoringElement pattern
https://bugs.webkit.org/show_bug.cgi?id=306650
rdar://169303894
Reviewed by Tim Nguyen.
A repeating pattern in scroll anchoring code was this:
invalidateScrollAnchoringElement();
updateScrollAnchoringElement();
Fix this by adding a `ComputeNewScrollAnchor` argument which defaults to `Yes`.
We can also push code down into ScrollableArea by making
scrollAnchoringController() be the virtual
function; other code is common between LocalFrameView and
RenderLayerScrollableArea. Now only
ScrollableArea needs to call `invalidateAnchorElement()`.
Rename `updateScrollAnchoringPositionForScrollableAreas()` to
`adjustScrollAnchoringPositionForScrollableAreas()`
because there are too many things with "update" in the name.
Make ScrollAnchoringController CheckedPtr compatible.
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::updateLayout):
(WebCore::Document::runScrollSteps):
* Source/WebCore/page/LocalFrameView.cpp:
(WebCore::LocalFrameView::LocalFrameView):
(WebCore::LocalFrameView::setLayoutViewportOverrideRect):
(WebCore::LocalFrameView::scrollOffsetChangedViaPlatformWidgetImpl):
(WebCore::LocalFrameView::updateScrollAnchoringElementsForScrollableAreas):
(WebCore::LocalFrameView::adjustScrollAnchoringPositionForScrollableAreas):
(WebCore::LocalFrameView::scheduleResizeEventIfNeeded):
(WebCore::LocalFrameView::updateScrollAnchoringPositionForScrollableAreas):
Deleted.
(WebCore::LocalFrameView::updateScrollAnchoringElement): Deleted.
(WebCore::LocalFrameView::updateScrollPositionForScrollAnchoringController):
Deleted.
(WebCore::LocalFrameView::invalidateScrollAnchoringElement): Deleted.
* Source/WebCore/page/LocalFrameView.h:
* Source/WebCore/page/scrolling/ScrollAnchoringController.cpp:
(WebCore::ScrollAnchoringController::invalidateAnchorElement):
(WebCore::ScrollAnchoringController::examineAnchorCandidate):
(WebCore::ScrollAnchoringController::adjustScrollPositionForAnchoring):
* Source/WebCore/page/scrolling/ScrollAnchoringController.h:
* Source/WebCore/platform/ScrollAnimator.cpp:
(WebCore::notifyScrollAnchoringControllerOfScroll):
* Source/WebCore/platform/ScrollableArea.cpp:
(WebCore::ScrollableArea::scrollPositionChanged):
(WebCore::ScrollableArea::updateScrollAnchoringElement):
(WebCore::ScrollableArea::adjustScrollAnchoringPosition):
* Source/WebCore/platform/ScrollableArea.h:
(WebCore::ScrollableArea::scrollAnchoringController const):
(WebCore::ScrollableArea::updateScrollAnchoringElement): Deleted.
(WebCore::ScrollableArea::updateScrollPositionForScrollAnchoringController):
Deleted.
(WebCore::ScrollableArea::invalidateScrollAnchoringElement): Deleted.
* Source/WebCore/rendering/RenderLayerScrollableArea.cpp:
(WebCore::RenderLayerScrollableArea::updateScrollAnchoringElement): Deleted.
(WebCore::RenderLayerScrollableArea::updateScrollPositionForScrollAnchoringController):
Deleted.
(WebCore::RenderLayerScrollableArea::invalidateScrollAnchoringElement): Deleted.
* Source/WebCore/rendering/RenderLayerScrollableArea.h:
* Source/WebCore/rendering/RenderObject.cpp:
(WebCore::RenderObject::searchParentChainForScrollAnchoringController):
Canonical link: https://commits.webkit.org/306533@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications