tor-browser

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

commit 29419ad5e3ffc8db0d02836645a057b8aa910437
parent b6c808f722238888fd45514a53759ac2786f7166
Author: Alexandru Marc <amarc@mozilla.com>
Date:   Wed, 10 Dec 2025 15:56:57 +0200

Revert "Bug 1991929 p3. Make shrink-wrapping work for anchor positioned elements. r=dshin,layout-reviewers,layout-anchor-positioning-reviewers,firefox-style-system-reviewers" for causing wr failures @ position-absolute-semi-replaced-stretch-button.html

This reverts commit 437984364be51bbd737fab51b0b3f6bde78225ae.

Diffstat:
Mlayout/generic/ReflowInput.cpp | 22----------------------
Mlayout/generic/ReflowInput.h | 19+++++++++++++++++++
Mlayout/generic/nsContainerFrame.cpp | 15+++++++--------
Mlayout/generic/nsContainerFrame.h | 3+--
Mlayout/generic/nsIFrame.cpp | 11++++-------
Mlayout/style/nsStyleStruct.h | 9++++-----
6 files changed, 35 insertions(+), 44 deletions(-)

diff --git a/layout/generic/ReflowInput.cpp b/layout/generic/ReflowInput.cpp @@ -40,28 +40,6 @@ using namespace mozilla::css; using namespace mozilla::dom; using namespace mozilla::layout; -AnchorPosResolutionParams AnchorPosResolutionParams::From( - const mozilla::SizeComputationInput* aSizingInput, - bool aIgnorePositionArea) { - const mozilla::StylePositionArea posArea = - aIgnorePositionArea - ? mozilla::StylePositionArea{} - : aSizingInput->mFrame->StylePosition()->mPositionArea; - bool inlineUsesAnchorCenter = false; - bool blockUsesAnchorCenter = false; - - ComputeAnchorCenterUsage(aSizingInput->mFrame, - aSizingInput->mAnchorPosResolutionCache, - inlineUsesAnchorCenter, blockUsesAnchorCenter); - - return {aSizingInput->mFrame, - aSizingInput->mFrame->StyleDisplay()->mPosition, - posArea, - aSizingInput->mAnchorPosResolutionCache, - inlineUsesAnchorCenter, - blockUsesAnchorCenter}; -} - static bool CheckNextInFlowParenthood(nsIFrame* aFrame, nsIFrame* aParent) { nsIFrame* frameNext = aFrame->GetNextInFlow(); nsIFrame* parentNext = aParent->GetNextInFlow(); diff --git a/layout/generic/ReflowInput.h b/layout/generic/ReflowInput.h @@ -979,4 +979,23 @@ void ComputeAnchorCenterUsage( mozilla::AnchorPosResolutionCache* aAnchorPosResolutionCache, bool& aInlineUsesAnchorCenter, bool& aBlockUsesAnchorCenter); +inline AnchorPosResolutionParams AnchorPosResolutionParams::From( + const mozilla::ReflowInput* aRI, bool aIgnorePositionArea) { + const mozilla::StylePositionArea posArea = + aIgnorePositionArea ? mozilla::StylePositionArea{} + : aRI->mStylePosition->mPositionArea; + bool inlineUsesAnchorCenter = false; + bool blockUsesAnchorCenter = false; + + ComputeAnchorCenterUsage(aRI->mFrame, aRI->mAnchorPosResolutionCache, + inlineUsesAnchorCenter, blockUsesAnchorCenter); + + return {aRI->mFrame, + aRI->mStyleDisplay->mPosition, + posArea, + aRI->mAnchorPosResolutionCache, + inlineUsesAnchorCenter, + blockUsesAnchorCenter}; +} + #endif // mozilla_ReflowInput_h diff --git a/layout/generic/nsContainerFrame.cpp b/layout/generic/nsContainerFrame.cpp @@ -2472,30 +2472,29 @@ StyleAlignFlags nsContainerFrame::CSSAlignmentForAbsPosChild( StyleAlignFlags nsContainerFrame::CSSAlignmentForAbsPosChildWithinContainingBlock( - const SizeComputationInput& aSizingInput, LogicalAxis aLogicalAxis, + const ReflowInput& aChildRI, LogicalAxis aLogicalAxis, const StylePositionArea& aResolvedPositionArea, const LogicalSize& aCBSize) const { - MOZ_ASSERT(aSizingInput.mFrame->IsAbsolutelyPositioned(), + MOZ_ASSERT(aChildRI.mFrame->IsAbsolutelyPositioned(), "This method should only be called for abspos children"); // When determining the position of absolutely-positioned boxes, // `auto` behaves as `normal`. StyleAlignFlags alignment = - aSizingInput.mFrame->StylePosition()->UsedSelfAlignment(aLogicalAxis, - nullptr); + aChildRI.mStylePosition->UsedSelfAlignment(aLogicalAxis, nullptr); // Check if position-area is set - if so, it determines the default alignment // https://drafts.csswg.org/css-anchor-position/#position-area-alignment if (!aResolvedPositionArea.IsNone() && alignment == StyleAlignFlags::NORMAL) { const WritingMode cbWM = GetWritingMode(); const auto anchorResolutionParams = AnchorPosResolutionParams::From( - &aSizingInput, /* aIgnorePositionArea = */ true); + &aChildRI, /* aIgnorePositionArea = */ true); const auto anchorOffsetResolutionParams = AnchorPosOffsetResolutionParams::ExplicitCBFrameSize( anchorResolutionParams, &aCBSize); // Check if we have exactly one auto inset in this axis (IMCB situation) const auto singleAutoInset = - aSizingInput.mFrame->StylePosition()->GetSingleAutoInsetInAxis( + aChildRI.mStylePosition->GetSingleAutoInsetInAxis( aLogicalAxis, cbWM, anchorOffsetResolutionParams); // Check if exactly one inset in the axis is auto @@ -2519,13 +2518,13 @@ nsContainerFrame::CSSAlignmentForAbsPosChildWithinContainingBlock( const auto axis = ToStyleLogicalAxis(aLogicalAxis); const auto cbSWM = cbWM.ToStyleWritingMode(); const auto selfWM = - aSizingInput.mFrame->GetWritingMode().ToStyleWritingMode(); + aChildRI.mFrame->GetWritingMode().ToStyleWritingMode(); Servo_ResolvePositionAreaSelfAlignment(&aResolvedPositionArea, axis, &cbSWM, &selfWM, &alignment); } } - return CSSAlignUtils::UsedAlignmentForAbsPos(aSizingInput.mFrame, alignment, + return CSSAlignUtils::UsedAlignmentForAbsPos(aChildRI.mFrame, alignment, aLogicalAxis, GetWritingMode()); } diff --git a/layout/generic/nsContainerFrame.h b/layout/generic/nsContainerFrame.h @@ -481,8 +481,7 @@ class nsContainerFrame : public nsSplittableFrame { * on its type (By overriding `CSSAlignmentForAbsPosChild`). */ mozilla::StyleAlignFlags CSSAlignmentForAbsPosChildWithinContainingBlock( - const SizeComputationInput& aSizingInput, - mozilla::LogicalAxis aLogicalAxis, + const ReflowInput& aChildRI, mozilla::LogicalAxis aLogicalAxis, const mozilla::StylePositionArea& aResolvedPositionArea, const mozilla::LogicalSize& aContainingBlockSize) const; diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp @@ -7289,17 +7289,14 @@ LogicalSize nsIFrame::ComputeAbsolutePosAutoSize( }; // i.e. Absolute containing block - + const auto* parent = GetParent(); + const auto parentWM = parent->GetWritingMode(); // Self alignment properties translate `auto` to normal for this purpose. // https://drafts.csswg.org/css-align-3/#valdef-justify-self-auto - nsContainerFrame* contFrame = static_cast<nsContainerFrame*>(this); - const StylePositionArea posArea = stylePos->mPositionArea; const auto inlineSelfAlign = - contFrame->CSSAlignmentForAbsPosChildWithinContainingBlock( - aSizingInput, LogicalAxis::Inline, posArea, aCBSize); + stylePos->UsedSelfAlignment(aWM, LogicalAxis::Inline, parentWM, nullptr); const auto blockSelfAlign = - contFrame->CSSAlignmentForAbsPosChildWithinContainingBlock( - aSizingInput, LogicalAxis::Block, posArea, aCBSize); + stylePos->UsedSelfAlignment(aWM, LogicalAxis::Block, parentWM, nullptr); const auto iShouldStretch = shouldStretch( inlineSelfAlign, this, iStartOffsetIsAuto, iEndOffsetIsAuto); const auto bShouldStretch = diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h @@ -41,9 +41,9 @@ struct nsStyleVisibility; class nsComputedDOMStyle; namespace mozilla { class ComputedStyle; -struct AnchorPosResolutionCache; struct IntrinsicSize; -struct SizeComputationInput; +struct ReflowInput; +struct AnchorPosResolutionCache; } // namespace mozilla @@ -399,9 +399,8 @@ struct AnchorPosResolutionParams { static inline AnchorPosResolutionParams From( const nsIFrame* aFrame, mozilla::AnchorPosResolutionCache* aAnchorPosResolutionCache = nullptr); - static AnchorPosResolutionParams From( - const mozilla::SizeComputationInput* aSizingInput, - bool aIgnorePositionArea = false); + static inline AnchorPosResolutionParams From( + const mozilla::ReflowInput* aRI, bool aIgnorePositionArea = false); static inline AnchorPosResolutionParams From( const nsComputedDOMStyle* aComputedDOMStyle); };