tor-browser

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

commit 2daf7d65680deb4faa64c2f3577f214c32c02710
parent 840de0e5aac63e7579a37155d94b71f4a3c11787
Author: Emilio Cobos Álvarez <emilio@crisal.io>
Date:   Sat,  6 Dec 2025 08:06:58 +0000

Bug 1989292 - Basic scrollable containing block support for anchor positioning. r=layout-anchor-positioning-reviewers,layout-reviewers,dshin

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

Diffstat:
Mlayout/base/AnchorPositioningUtils.cpp | 45++++++++++++---------------------------------
Mlayout/base/AnchorPositioningUtils.h | 13+++----------
Mlayout/base/PresShell.cpp | 5+----
Mlayout/generic/AbsoluteContainingBlock.cpp | 190++++++++++++++++++++++++++++---------------------------------------------------
Mlayout/generic/AbsoluteContainingBlock.h | 5+++--
Dtesting/web-platform/meta/css/css-anchor-position/position-area-scrolling-001.tentative.html.ini | 9---------
Dtesting/web-platform/meta/css/css-anchor-position/position-try-custom-property.html.ini | 6------
Dtesting/web-platform/meta/css/css-anchor-position/scrollable-containing-block-position-area.html.ini | 12------------
Mtesting/web-platform/meta/css/css-anchor-position/scrollable-containing-block-size.html.ini | 15---------------
Dtesting/web-platform/meta/css/css-anchor-position/scrollable-containing-block-validity.html.ini | 3---
10 files changed, 87 insertions(+), 216 deletions(-)

diff --git a/layout/base/AnchorPositioningUtils.cpp b/layout/base/AnchorPositioningUtils.cpp @@ -869,28 +869,11 @@ AnchorPositioningUtils::ContainingBlockInfo::UseCBFrameSize( } bool AnchorPositioningUtils::FitsInContainingBlock( - const ContainingBlockInfo& aContainingBlockInfo, - const nsIFrame* aPositioned, const AnchorPosReferenceData* aReferenceData) { + const nsIFrame* aPositioned, const AnchorPosReferenceData& aReferenceData) { MOZ_ASSERT(aPositioned->GetProperty(nsIFrame::AnchorPosReferences()) == - aReferenceData); - const auto originalContainingBlockRect = - aContainingBlockInfo.GetContainingBlockRect(); - const auto overflowCheckRect = aReferenceData->mContainingBlockRect - - aReferenceData->mDefaultScrollShift; - const auto rect = [&]() { - auto rect = aPositioned->GetMarginRect(); - const auto* cb = aPositioned->GetParent(); - if (!IsScrolled(cb)) { - return rect; - } - const ScrollContainerFrame* scrollContainer = - do_QueryFrame(cb->GetParent()); - return rect - scrollContainer->GetScrollPosition(); - }(); - - return overflowCheckRect.Intersect(originalContainingBlockRect) - .Union(originalContainingBlockRect) - .Contains(rect); + &aReferenceData); + return aReferenceData.mContainingBlockRect.Contains( + aPositioned->GetMarginRect()); } nsIFrame* AnchorPositioningUtils::GetAnchorThatFrameScrollsWith( @@ -923,7 +906,7 @@ nsIFrame* AnchorPositioningUtils::GetAnchorThatFrameScrollsWith( } static bool TriggerFallbackReflow(PresShell* aPresShell, nsIFrame* aPositioned, - AnchorPosReferenceData* aReferencedAnchors, + AnchorPosReferenceData& aReferencedAnchors, bool aEvaluateAllFallbacksIfNeeded) { auto totalFallbacks = aPositioned->StylePosition()->mPositionTryFallbacks._0.Length(); @@ -933,7 +916,6 @@ static bool TriggerFallbackReflow(PresShell* aPresShell, nsIFrame* aPositioned, } const bool positionedFitsInCB = AnchorPositioningUtils::FitsInContainingBlock( - AnchorPositioningUtils::ContainingBlockInfo::UseCBFrameSize(aPositioned), aPositioned, aReferencedAnchors); if (positionedFitsInCB) { return false; @@ -969,7 +951,7 @@ static bool AnchorIsEffectivelyHidden(nsIFrame* aAnchor) { static bool ComputePositionVisibility( PresShell* aPresShell, nsIFrame* aPositioned, - AnchorPosReferenceData* aReferencedAnchors) { + AnchorPosReferenceData& aReferencedAnchors) { auto vis = aPositioned->StylePosition()->mPositionVisibility; if (vis & StylePositionVisibility::ALWAYS) { MOZ_ASSERT(vis == StylePositionVisibility::ALWAYS, @@ -977,7 +959,7 @@ static bool ComputePositionVisibility( return true; } if (vis & StylePositionVisibility::ANCHORS_VALID) { - for (const auto& ref : *aReferencedAnchors) { + for (const auto& ref : aReferencedAnchors) { if (ref.GetData().isNothing()) { return false; } @@ -985,17 +967,14 @@ static bool ComputePositionVisibility( } if (vis & StylePositionVisibility::NO_OVERFLOW) { const bool positionedFitsInCB = - AnchorPositioningUtils::FitsInContainingBlock( - AnchorPositioningUtils::ContainingBlockInfo::UseCBFrameSize( - aPositioned), - aPositioned, aReferencedAnchors); + AnchorPositioningUtils::FitsInContainingBlock(aPositioned, + aReferencedAnchors); if (!positionedFitsInCB) { return false; } } if (vis & StylePositionVisibility::ANCHORS_VISIBLE) { - const auto* defaultAnchorName = - aReferencedAnchors->mDefaultAnchorName.get(); + const auto* defaultAnchorName = aReferencedAnchors.mDefaultAnchorName.get(); if (defaultAnchorName) { auto* defaultAnchor = aPresShell->GetAnchorPosAnchor(defaultAnchorName, aPositioned); @@ -1056,7 +1035,7 @@ bool AnchorPositioningUtils::TriggerLayoutOnOverflow( continue; } - if (TriggerFallbackReflow(aPresShell, positioned, referencedAnchors, + if (TriggerFallbackReflow(aPresShell, positioned, *referencedAnchors, aEvaluateAllFallbacksIfNeeded)) { didLayoutPositionedItems = true; } @@ -1066,7 +1045,7 @@ bool AnchorPositioningUtils::TriggerLayoutOnOverflow( continue; } const bool shouldBeVisible = - ComputePositionVisibility(aPresShell, positioned, referencedAnchors); + ComputePositionVisibility(aPresShell, positioned, *referencedAnchors); const bool isVisible = !positioned->HasAnyStateBits(NS_FRAME_POSITION_VISIBILITY_HIDDEN); if (shouldBeVisible != isVisible) { diff --git a/layout/base/AnchorPositioningUtils.h b/layout/base/AnchorPositioningUtils.h @@ -92,8 +92,6 @@ class AnchorPosReferenceData { struct PositionTryBackup { mozilla::PhysicalAxes mCompensatingForScroll; nsPoint mDefaultScrollShift; - nsRect mContainingBlockRect; - bool mUseScrollableContainingBlock = false; }; using Value = mozilla::Maybe<AnchorPosResolutionData>; @@ -128,15 +126,12 @@ class AnchorPosReferenceData { PositionTryBackup TryPositionWithSameDefaultAnchor() { auto compensatingForScroll = std::exchange(mCompensatingForScroll, {}); auto defaultScrollShift = std::exchange(mDefaultScrollShift, {}); - auto insetModifiedContainingBlock = std::exchange(mContainingBlockRect, {}); - return {compensatingForScroll, defaultScrollShift, - insetModifiedContainingBlock}; + return {compensatingForScroll, defaultScrollShift}; } void UndoTryPositionWithSameDefaultAnchor(PositionTryBackup&& aBackup) { mCompensatingForScroll = aBackup.mCompensatingForScroll; mDefaultScrollShift = aBackup.mDefaultScrollShift; - mContainingBlockRect = aBackup.mContainingBlockRect; } // Distance from the default anchor to the nearest scroll container. @@ -308,10 +303,8 @@ struct AnchorPositioningUtils { nsRect mRect; }; - static bool FitsInContainingBlock( - const ContainingBlockInfo& aContainingBlockInfo, - const nsIFrame* aPositioned, - const AnchorPosReferenceData* aReferenceData); + static bool FitsInContainingBlock(const nsIFrame* aPositioned, + const AnchorPosReferenceData&); /** * If aFrame is positioned using CSS anchor positioning, and it scrolls with diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp @@ -11693,10 +11693,7 @@ static bool CheckOverflow(nsIFrame* aPositioned, if (!hasFallbacks) { return false; } - const auto overflows = !AnchorPositioningUtils::FitsInContainingBlock( - AnchorPositioningUtils::ContainingBlockInfo::UseCBFrameSize(aPositioned), - aPositioned, &aData); - return hasFallbacks && overflows; + return !AnchorPositioningUtils::FitsInContainingBlock(aPositioned, aData); } // HACK(dshin, Bug 1999954): This is a workaround. While we try to lay out diff --git a/layout/generic/AbsoluteContainingBlock.cpp b/layout/generic/AbsoluteContainingBlock.cpp @@ -17,12 +17,11 @@ #include "mozilla/DebugOnly.h" #include "mozilla/PresShell.h" #include "mozilla/ReflowInput.h" +#include "mozilla/ScrollContainerFrame.h" #include "mozilla/ViewportFrame.h" #include "mozilla/dom/ViewTransition.h" -#include "nsAtomicContainerFrame.h" #include "nsCSSFrameConstructor.h" #include "nsContainerFrame.h" -#include "nsGkAtoms.h" #include "nsGridContainerFrame.h" #include "nsIFrameInlines.h" #include "nsPlaceholderFrame.h" @@ -261,6 +260,24 @@ void AbsoluteContainingBlock::Reflow(nsContainerFrame* aDelegatingFrame, aOverflowAreas = nullptr; } + const auto scrollableContainingBlock = [&]() -> nsRect { + switch (aDelegatingFrame->Style()->GetPseudoType()) { + case PseudoStyleType::scrolledContent: + case PseudoStyleType::scrolledCanvas: { + // FIXME(bug 2004432): This is close enough to what we want. In practice + // we don't want to account for relative positioning and so on, but this + // seems good enough for now. + ScrollContainerFrame* sf = do_QueryFrame(aDelegatingFrame->GetParent()); + // Clamp to the scrollable range. + return sf->GetUnsnappedScrolledRectInternal( + aOverflowAreas->ScrollableOverflow(), aContainingBlock.Size()); + } + default: + break; + } + return aContainingBlock; + }(); + nsReflowStatus reflowStatus; const bool reflowAll = aReflowInput.ShouldReflowAllKids(); const bool cbWidthChanged = aFlags.contains(AbsPosReflowFlag::CBWidthChanged); @@ -321,8 +338,8 @@ void AbsoluteContainingBlock::Reflow(nsContainerFrame* aDelegatingFrame, // Reflow the frame nsReflowStatus kidStatus; ReflowAbsoluteFrame(aDelegatingFrame, aPresContext, aReflowInput, - aContainingBlock, aFlags, kidFrame, kidStatus, - aOverflowAreas, + aContainingBlock, scrollableContainingBlock, aFlags, + kidFrame, kidStatus, aOverflowAreas, anchorPosResolutionCache.ptrOr(nullptr)); MOZ_ASSERT(!kidStatus.IsInlineBreakBefore(), "ShouldAvoidBreakInside should prevent this from happening"); @@ -1079,15 +1096,19 @@ struct AnchorShiftInfo { }; struct ContainingBlockRect { - Maybe<AnchorShiftInfo> mAnchorShiftInfo = Nothing{}; - nsRect mRect; + Maybe<AnchorShiftInfo> mAnchorShiftInfo; + nsRect mMaybeScrollableRect; + nsRect mFinalRect; - explicit ContainingBlockRect(const nsRect& aRect) : mRect{aRect} {} + explicit ContainingBlockRect(const nsRect& aRect) + : mMaybeScrollableRect{aRect}, mFinalRect{aRect} {} ContainingBlockRect(const nsPoint& aOffset, const StylePositionArea& aResolvedArea, - const nsRect& aRect) + const nsRect& aMaybeScrollableRect, + const nsRect& aFinalRect) : mAnchorShiftInfo{Some(AnchorShiftInfo{aOffset, aResolvedArea})}, - mRect{aRect} {} + mMaybeScrollableRect{aMaybeScrollableRect}, + mFinalRect{aFinalRect} {} StylePositionArea ResolvedPositionArea() const { return mAnchorShiftInfo @@ -1096,72 +1117,13 @@ struct ContainingBlockRect { } }; -static nsRect GrowOverflowCheckRect(const nsRect& aOverflowCheckRect, - const nsRect& aKidRect, - const StylePositionArea& aPosArea) { - // The overflow check rect may end up being smaller than the positioned rect - - // imagine an absolute containing block & a scroller of the same size, and an - // anchor inside it. If position-area: bottom, and the anchor positioned such - // that the anchor is touching the lower edge of the containing block & the - // scroller, the grid height is 0, which the positioned frame will always - // overflow - until the scrollbar moves. To account for this, we will let this - // containing block grow in directions that aren't constrained by the anchor. - auto result = aOverflowCheckRect; - if (aPosArea.first == StylePositionAreaKeyword::Left || - aPosArea.first == StylePositionAreaKeyword::SpanLeft) { - // Allowed to grow left - if (aKidRect.x < result.x) { - result.SetLeftEdge(aKidRect.x); - } - } else if (aPosArea.first == StylePositionAreaKeyword::Center) { - // Not allowed to grow in this axis - } else if (aPosArea.first == StylePositionAreaKeyword::Right || - aPosArea.first == StylePositionAreaKeyword::SpanRight) { - // Allowed to grow right - if (aKidRect.XMost() > aOverflowCheckRect.XMost()) { - result.SetRightEdge(aKidRect.XMost()); - } - } else if (aPosArea.first == StylePositionAreaKeyword::SpanAll) { - // Allowed to grow in both directions - if (aKidRect.x < aOverflowCheckRect.x) { - result.SetLeftEdge(aKidRect.x); - } - if (aKidRect.XMost() > aOverflowCheckRect.XMost()) { - result.SetRightEdge(aKidRect.XMost()); - } - } - if (aPosArea.first == StylePositionAreaKeyword::Top || - aPosArea.first == StylePositionAreaKeyword::SpanTop) { - // Allowed to grow up - if (aKidRect.y < aOverflowCheckRect.y) { - result.SetTopEdge(aKidRect.y); - } - } else if (aPosArea.first == StylePositionAreaKeyword::Center) { - // Not allowed to grow in this axis - } else if (aPosArea.first == StylePositionAreaKeyword::Bottom || - aPosArea.first == StylePositionAreaKeyword::SpanBottom) { - // Allowed to grow down - if (aKidRect.YMost() > aOverflowCheckRect.YMost()) { - result.SetBottomEdge(aKidRect.YMost()); - } - } else if (aPosArea.first == StylePositionAreaKeyword::SpanAll) { - // Allowed to grow in both directions - if (aKidRect.y < aOverflowCheckRect.y) { - result.SetTopEdge(aKidRect.y); - } - if (aKidRect.YMost() > aOverflowCheckRect.YMost()) { - result.SetBottomEdge(aKidRect.YMost()); - } - } - return result; -} - // XXX Optimize the case where it's a resize reflow and the absolutely // positioned child has the exact same size and position and skip the // reflow... void AbsoluteContainingBlock::ReflowAbsoluteFrame( nsContainerFrame* aDelegatingFrame, nsPresContext* aPresContext, const ReflowInput& aReflowInput, const nsRect& aOriginalContainingBlockRect, + const nsRect& aOriginalScrollableContainingBlockRect, AbsPosReflowFlags aFlags, nsIFrame* aKidFrame, nsReflowStatus& aStatus, OverflowAreas* aOverflowAreas, AnchorPosResolutionCache* aAnchorPosResolutionCache) { @@ -1262,34 +1224,39 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( positionArea = currentFallback->AsPositionArea(); } - if (!positionArea.IsNone() && aAnchorPosResolutionCache) { + if (aAnchorPosResolutionCache) { const auto defaultAnchorInfo = AnchorPositioningUtils::ResolveAnchorPosRect( aKidFrame, aDelegatingFrame, nullptr, false, aAnchorPosResolutionCache); if (defaultAnchorInfo) { - // Offset should be up to, but not including the containing block's - // scroll offset. - const auto offset = AnchorPositioningUtils::GetScrollOffsetFor( - aAnchorPosResolutionCache->mReferenceData - ->CompensatingForScrollAxes(), - aKidFrame, aAnchorPosResolutionCache->mDefaultAnchorCache); - // Imagine an abspos container with a scroller in it, and then an - // anchor in it, where the anchor is visually in the middle of the - // scrollport. Then, when the scroller moves such that the anchor's - // left edge is on that of the scrollports, w.r.t. containing block, - // the anchor is zero left offset horizontally. The position-area grid - // needs to account for this. - const auto scrolledAnchorRect = defaultAnchorInfo->mRect - offset; - StylePositionArea resolvedPositionArea{}; - const auto scrolledAnchorCb = AnchorPositioningUtils:: - AdjustAbsoluteContainingBlockRectForPositionArea( - scrolledAnchorRect + aOriginalContainingBlockRect.TopLeft(), - aOriginalContainingBlockRect, aKidFrame->GetWritingMode(), - aDelegatingFrame->GetWritingMode(), positionArea, - &resolvedPositionArea); - return ContainingBlockRect{offset, resolvedPositionArea, - scrolledAnchorCb}; + if (!positionArea.IsNone()) { + // Offset should be up to, but not including the containing block's + // scroll offset. + const auto offset = AnchorPositioningUtils::GetScrollOffsetFor( + aAnchorPosResolutionCache->mReferenceData + ->CompensatingForScrollAxes(), + aKidFrame, aAnchorPosResolutionCache->mDefaultAnchorCache); + // Imagine an abspos container with a scroller in it, and then an + // anchor in it, where the anchor is visually in the middle of the + // scrollport. Then, when the scroller moves such that the anchor's + // left edge is on that of the scrollports, w.r.t. containing block, + // the anchor is zero left offset horizontally. The position-area + // grid needs to account for this. + const auto scrolledAnchorRect = defaultAnchorInfo->mRect - offset; + StylePositionArea resolvedPositionArea{}; + const auto scrolledAnchorCb = AnchorPositioningUtils:: + AdjustAbsoluteContainingBlockRectForPositionArea( + scrolledAnchorRect + aOriginalContainingBlockRect.TopLeft(), + aOriginalScrollableContainingBlockRect, + aKidFrame->GetWritingMode(), + aDelegatingFrame->GetWritingMode(), positionArea, + &resolvedPositionArea); + return ContainingBlockRect{offset, resolvedPositionArea, + aOriginalScrollableContainingBlockRect, + scrolledAnchorCb}; + } + return ContainingBlockRect{aOriginalScrollableContainingBlockRect}; } } @@ -1306,11 +1273,11 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( }(); if (aAnchorPosResolutionCache) { aAnchorPosResolutionCache->mReferenceData->mContainingBlockRect = - cb.mRect; + cb.mMaybeScrollableRect; } const WritingMode outerWM = aReflowInput.GetWritingMode(); const WritingMode wm = aKidFrame->GetWritingMode(); - const LogicalSize cbSize(outerWM, cb.mRect.Size()); + const LogicalSize cbSize(outerWM, cb.mFinalRect.Size()); ReflowInput::InitFlags initFlags; const bool staticPosIsCBOrigin = [&] { @@ -1358,7 +1325,7 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( // Don't split things below the fold. (Ideally we shouldn't *have* // anything totally below the fold, but we can't position frames // across next-in-flow breaks yet. (Bug 1994346) - (aKidFrame->GetLogicalRect(cb.mRect.Size()).BStart(wm) <= + (aKidFrame->GetLogicalRect(cb.mFinalRect.Size()).BStart(wm) <= aReflowInput.AvailableBSize()); // Get the border values @@ -1539,23 +1506,13 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( // So far, we've positioned against the padding edge of the containing // block, which is necessary for inset computation. However, the position // of a frame originates against the border box. - r += cb.mRect.TopLeft(); + r += cb.mFinalRect.TopLeft(); if (cb.mAnchorShiftInfo) { // Push the frame out to where the anchor is. r += cb.mAnchorShiftInfo->mOffset; } aKidFrame->SetRect(r); - - // For the purpose of computing the inset-modified containing block, - // `auto` is considered the same as 0. - // https://drafts.csswg.org/css-position-3/#resolving-insets - LogicalMargin insetModification{ - outerWM, bStartInsetAuto ? 0 : offsets.BStart(outerWM), - iEndInsetAuto ? 0 : offsets.IEnd(outerWM), - bEndInsetAuto ? 0 : offsets.BEnd(outerWM), - iStartInsetAuto ? 0 : offsets.IStart(outerWM)}; - cb.mRect.Deflate(insetModification.GetPhysicalMargin(outerWM)); } aKidFrame->DidReflow(aPresContext, &kidReflowInput); @@ -1596,22 +1553,11 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( aAnchorPosResolutionCache->mReferenceData->mDefaultScrollShift = offset; }(); - const auto fits = aStatus.IsComplete() && [&]() { - const auto overflowCheckRect = cb.mRect; - if (aAnchorPosResolutionCache) { - if (cb.mAnchorShiftInfo) { - aAnchorPosResolutionCache->mReferenceData->mContainingBlockRect = - GrowOverflowCheckRect(overflowCheckRect, - aKidFrame->GetNormalRect(), - cb.mAnchorShiftInfo->mResolvedArea); - } - return AnchorPositioningUtils::FitsInContainingBlock( - AnchorPositioningUtils::ContainingBlockInfo::ExplicitCBFrameSize( - aOriginalContainingBlockRect), - aKidFrame, aAnchorPosResolutionCache->mReferenceData); - } - return overflowCheckRect.Contains(aKidFrame->GetRect()); - }(); + // FIXME(bug 2004495): Per spec this should be the inset-modified + // containing-block, see: + // https://drafts.csswg.org/css-anchor-position-1/#fallback-apply + const auto fits = aStatus.IsComplete() && cb.mMaybeScrollableRect.Contains( + aKidFrame->GetMarginRect()); if (fallbacks.IsEmpty() || fits) { // We completed the reflow - Either we had a fallback that fit, or we // didn't have any to try in the first place. diff --git a/layout/generic/AbsoluteContainingBlock.h b/layout/generic/AbsoluteContainingBlock.h @@ -175,8 +175,9 @@ class AbsoluteContainingBlock { void ReflowAbsoluteFrame( nsContainerFrame* aDelegatingFrame, nsPresContext* aPresContext, const ReflowInput& aReflowInput, - const nsRect& aOriginalContainingBlockRect, AbsPosReflowFlags aFlags, - nsIFrame* aKidFrame, nsReflowStatus& aStatus, + const nsRect& aOriginalContainingBlockRect, + const nsRect& aOriginalScrollableContainingBlockRect, + AbsPosReflowFlags aFlags, nsIFrame* aKidFrame, nsReflowStatus& aStatus, OverflowAreas* aOverflowAreas, mozilla::AnchorPosResolutionCache* aAnchorPosResolutionCache = nullptr); diff --git a/testing/web-platform/meta/css/css-anchor-position/position-area-scrolling-001.tentative.html.ini b/testing/web-platform/meta/css/css-anchor-position/position-area-scrolling-001.tentative.html.ini @@ -1,9 +0,0 @@ -[position-area-scrolling-001.tentative.html] - [Initial scroll position] - expected: FAIL - - [Scroll to 40,60] - expected: FAIL - - [Redisplay at 40,60] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/position-try-custom-property.html.ini b/testing/web-platform/meta/css/css-anchor-position/position-try-custom-property.html.ini @@ -1,6 +0,0 @@ -[position-try-custom-property.html] - [.target 1] - expected: FAIL - - [.target 2] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/scrollable-containing-block-position-area.html.ini b/testing/web-platform/meta/css/css-anchor-position/scrollable-containing-block-position-area.html.ini @@ -1,12 +0,0 @@ -[scrollable-containing-block-position-area.html] - [.target 1] - expected: FAIL - - [.target 2] - expected: FAIL - - [.target 3] - expected: FAIL - - [.target 4] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/scrollable-containing-block-size.html.ini b/testing/web-platform/meta/css/css-anchor-position/scrollable-containing-block-size.html.ini @@ -1,16 +1,10 @@ [scrollable-containing-block-size.html] - [.target 1] - expected: FAIL - [.target 2] expected: FAIL [.target 3] expected: FAIL - [.target 4] - expected: FAIL - [.target 5] expected: FAIL @@ -28,12 +22,3 @@ [.target 10] expected: FAIL - - [.target 11] - expected: FAIL - - [.target 12] - expected: FAIL - - [.target 13] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/scrollable-containing-block-validity.html.ini b/testing/web-platform/meta/css/css-anchor-position/scrollable-containing-block-validity.html.ini @@ -1,3 +0,0 @@ -[scrollable-containing-block-validity.html] - [.target 2] - expected: FAIL