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:
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);
};