tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit d8bd94aa646aa77a24a487be85480a479341d8eb
parent a804b5349956a4ce2002bebae629b152afd30ca2
Author: Emilio Cobos Álvarez <emilio@crisal.io>
Date:   Fri,  9 Jan 2026 16:00:07 +0000

Bug 2009424 - Make containing block adjustment work for default anchored frames. r=layout-anchor-positioning-reviewers,layout-reviewers,dshin

Differential Revision: https://phabricator.services.mozilla.com/D278497

Diffstat:
Mlayout/generic/AbsoluteContainingBlock.cpp | 29+++++++++++++++--------------
Dtesting/web-platform/meta/css/css-anchor-position/anchor-scroll-position-try-007.html.ini | 5-----
2 files changed, 15 insertions(+), 19 deletions(-)

diff --git a/layout/generic/AbsoluteContainingBlock.cpp b/layout/generic/AbsoluteContainingBlock.cpp @@ -1326,6 +1326,7 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( // The current containing block, with ongoing modifications. // Starts as a local containing block. nsRect containingBlock = aOriginalContainingBlockRect; + nsRect scrollableContainingBlock = aOriginalScrollableContainingBlockRect; const auto defaultAnchorInfo = [&]() -> Maybe<AnchorPosInfo> { if (!aAnchorPosResolutionCache) { return Nothing{}; @@ -1341,6 +1342,18 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( containingBlock = aOriginalScrollableContainingBlockRect; } + if (ViewportFrame* viewport = do_QueryFrame(aDelegatingFrame)) { + if (IsSnapshotContainingBlock(aKidFrame)) { + return ContainingBlockRect{ + dom::ViewTransition::SnapshotContainingBlockRect( + viewport->PresContext())}; + } + MOZ_ASSERT(aOriginalScrollableContainingBlockRect == + aOriginalContainingBlockRect); + containingBlock = scrollableContainingBlock = + viewport->GetContainingBlockAdjustedForScrollbars(aReflowInput); + } + // https://drafts.csswg.org/css-position/#original-cb // Handle grid-based adjustment first... if (isGrid) { @@ -1382,24 +1395,12 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( aAnchorPosResolutionCache->mReferenceData->mScrollCompensatedSides = GetScrollCompensatedSidesFor(resolvedPositionArea); return ContainingBlockRect{ - offset, resolvedPositionArea, - aOriginalScrollableContainingBlockRect, + offset, resolvedPositionArea, scrollableContainingBlock, // Unscroll the CB by canceling out the previously applied // scroll offset (See above), the offset will be applied later. scrolledAnchorCb + offset}; } - return ContainingBlockRect{aOriginalScrollableContainingBlockRect, - containingBlock}; - } - - if (ViewportFrame* viewport = do_QueryFrame(aDelegatingFrame)) { - if (!IsSnapshotContainingBlock(aKidFrame)) { - return ContainingBlockRect{ - viewport->GetContainingBlockAdjustedForScrollbars(aReflowInput)}; - } - return ContainingBlockRect{ - dom::ViewTransition::SnapshotContainingBlockRect( - viewport->PresContext())}; + return ContainingBlockRect{scrollableContainingBlock, containingBlock}; } return ContainingBlockRect{containingBlock}; }(); diff --git a/testing/web-platform/meta/css/css-anchor-position/anchor-scroll-position-try-007.html.ini b/testing/web-platform/meta/css/css-anchor-position/anchor-scroll-position-try-007.html.ini @@ -1,5 +0,0 @@ -[anchor-scroll-position-try-007.html] - [Should use the third position option with enough space left] - expected: - if os == "android": PASS - FAIL