tor-browser

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

commit e64ec53679977f308a7b46cb5de9b858bc02dede
parent 409c93329155855895a38df6724d8ae178af32a1
Author: Norisz Fay <nfay@mozilla.com>
Date:   Mon,  8 Dec 2025 03:19:08 +0200

Revert "Bug 1924786 - Make position-area and default-anchor adjustments take priority over CSS grid CB. r=layout-anchor-positioning-reviewers,layout-reviewers,dshin" for causing wpt failures on align-self-default-overflow-htb-ltr-htb.html

This reverts commit bc04f15c3ab9c27efdadd9a29e4e77d208d32bc8.

Diffstat:
Mlayout/generic/AbsoluteContainingBlock.cpp | 26+++++++++++++++-----------
Mlayout/generic/nsGridContainerFrame.cpp | 9+++++----
Dtesting/web-platform/tests/css/css-anchor-position/grid-position-area-basic-ref.html | 44--------------------------------------------
Dtesting/web-platform/tests/css/css-anchor-position/grid-position-area-basic.html | 51---------------------------------------------------
4 files changed, 20 insertions(+), 110 deletions(-)

diff --git a/layout/generic/AbsoluteContainingBlock.cpp b/layout/generic/AbsoluteContainingBlock.cpp @@ -1220,13 +1220,27 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( aAnchorPosResolutionCache, firstTryIndex == currentFallbackIndex); auto cb = [&]() { + if (isGrid) { + // TODO(emilio): how does position-area interact with grid? + const auto border = aDelegatingFrame->GetUsedBorder(); + const nsPoint borderShift{border.left, border.top}; + // Shift in by border of the overall grid container. + return ContainingBlockRect{nsGridContainerFrame::GridItemCB(aKidFrame) + + borderShift}; + } + + auto positionArea = aKidFrame->StylePosition()->mPositionArea; + if (currentFallback && currentFallback->IsPositionArea()) { + MOZ_ASSERT(currentFallback->IsPositionArea()); + positionArea = currentFallback->AsPositionArea(); + } + if (aAnchorPosResolutionCache) { const auto defaultAnchorInfo = AnchorPositioningUtils::ResolveAnchorPosRect( aKidFrame, aDelegatingFrame, nullptr, false, aAnchorPosResolutionCache); if (defaultAnchorInfo) { - auto positionArea = aKidFrame->StylePosition()->mPositionArea; if (!positionArea.IsNone()) { // Offset should be up to, but not including the containing block's // scroll offset. @@ -1257,16 +1271,6 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( } } - if (isGrid) { - // TODO(emilio, bug 2004596): This adjustment is supposed to also - // restrict the position-area rect above... - const auto border = aDelegatingFrame->GetUsedBorder(); - const nsPoint borderShift{border.left, border.top}; - // Shift in by border of the overall grid container. - return ContainingBlockRect{nsGridContainerFrame::GridItemCB(aKidFrame) + - borderShift}; - } - if (ViewportFrame* viewport = do_QueryFrame(aDelegatingFrame)) { if (!IsSnapshotContainingBlock(aKidFrame)) { return ContainingBlockRect{ diff --git a/layout/generic/nsGridContainerFrame.cpp b/layout/generic/nsGridContainerFrame.cpp @@ -9326,16 +9326,17 @@ nscoord nsGridContainerFrame::ReflowChildren(GridReflowInput& aGridRI, *cb = itemCB.GetPhysicalRect(wm, gridCBPhysicalSize); ++i; } - const auto border = aGridRI.mReflowInput->ComputedPhysicalBorder(); - const nsPoint borderShift{border.left, border.top}; - const nsRect paddingRect(borderShift, gridCBPhysicalSize); + // We pass a dummy rect as CB because each child has its own CB rect. + // The IsGridContainerCB flag tells AbsoluteContainingBlock::Reflow to + // use those instead. + nsRect dummyRect; // XXX: To optimize the performance, set the flags only when the CB width // or height actually changes. AbsPosReflowFlags flags{ AbsPosReflowFlag::AllowFragmentation, AbsPosReflowFlag::CBWidthChanged, AbsPosReflowFlag::CBHeightChanged, AbsPosReflowFlag::IsGridContainerCB}; absoluteContainer->Reflow(this, PresContext(), *aGridRI.mReflowInput, - aStatus, paddingRect, flags, + aStatus, dummyRect, flags, &aDesiredSize.mOverflowAreas); } return bSize; diff --git a/testing/web-platform/tests/css/css-anchor-position/grid-position-area-basic-ref.html b/testing/web-platform/tests/css/css-anchor-position/grid-position-area-basic-ref.html @@ -1,44 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<style> -#grid { - display: grid; - grid: 150px 100px / 200px 300px; - padding: 20px; - position: relative; - border: 1px solid; -} - -#positioned { - position: absolute; - background: magenta; - grid-column: 1 / 2; - grid-row: 1 / 2; - left: 500px; - bottom: 0; -} - -#static { - background: pink; - grid-column: 1 / 2; - grid-row: 1 / 2; -} - -#anchor { - background: lime; - grid-column: 2 / 3; - grid-row: 2 / 3; -} - -.abs-cb { - width: 600px; - height: 600px; - position: relative; -} -</style> - -<div id="grid"> - <div id="anchor"></div> - <div id="positioned">Anchored</div> - <div id="static"></div> -</div> diff --git a/testing/web-platform/tests/css/css-anchor-position/grid-position-area-basic.html b/testing/web-platform/tests/css/css-anchor-position/grid-position-area-basic.html @@ -1,51 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1924786"> -<link rel="help" href="https://drafts.csswg.org/css-position/#original-cb"> -<link rel="match" href="grid-position-area-basic-ref.html"> -<style> -#grid { - display: grid; - grid: 150px 100px / 200px 300px; - padding: 20px; - position: relative; - border: 1px solid; -} - -#positioned { - position: absolute; - background: magenta; - grid-column: 1 / 2; - grid-row: 1 / 2; - position-anchor: --foo; - position-area: top right; - /* FIXME: Shouldn't be needed */ - width: fit-content; - height: fit-content; -} - -#static { - background: pink; - grid-column: 1 / 2; - grid-row: 1 / 2; -} - -#anchor { - background: lime; - grid-column: 2 / 3; - grid-row: 2 / 3; - anchor-name: --foo; -} - -.abs-cb { - width: 600px; - height: 600px; - position: relative; -} -</style> - -<div id="grid"> - <div id="anchor"></div> - <div id="positioned">Anchored</div> - <div id="static"></div> -</div>