tor-browser

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

commit 81582e34d299d48c7237e4d24a4ffc07e24500bf
parent 2b88ccd9ac9d2ed603a9ac6e59540a61fb7abdf4
Author: Emilio Cobos Álvarez <emilio@crisal.io>
Date:   Wed,  8 Oct 2025 15:57:36 +0000

Bug 1993232 - Implement position-try-tactics for margins and inset properties. r=firefox-style-system-reviewers,layout-anchor-positioning-reviewers,layout-reviewers,dshin

Plumb the try tactics along the cascade, and use them to flip the properties of
the fallback styles.

This means we need to compute a fallback style even if we don't specify a try
rule name... But seems fair enough?

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

Diffstat:
Mlayout/generic/AbsoluteContainingBlock.cpp | 21+++++++++------------
Mlayout/style/ServoStyleSet.cpp | 6+++---
Mlayout/style/ServoStyleSet.h | 7++++---
Mservo/components/style/logical_geometry.rs | 19+++++++++++++++++++
Mservo/components/style/properties/cascade.rs | 16++++++++++++++--
Mservo/components/style/style_resolver.rs | 1+
Mservo/components/style/stylist.rs | 47++++++++++++++++++++++++++++++-----------------
Mservo/components/style/values/specified/position.rs | 84++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Mservo/ports/geckolib/glue.rs | 19+++++++++----------
Mtesting/web-platform/meta/css/css-anchor-position/last-successful-pseudo-element-basic.html.ini | 3+++
Mtesting/web-platform/meta/css/css-anchor-position/last-successful-pseudo-element-fallbacks.html.ini | 3+++
Dtesting/web-platform/meta/css/css-anchor-position/position-try-fallbacks-002.html.ini | 2--
Mtesting/web-platform/meta/css/css-anchor-position/try-tactic-anchor.html.ini | 24------------------------
Atesting/web-platform/meta/css/css-anchor-position/try-tactic-back-to-base.html.ini | 3+++
Dtesting/web-platform/meta/css/css-anchor-position/try-tactic-base.html.ini | 3---
Dtesting/web-platform/meta/css/css-anchor-position/try-tactic-basic.html.ini | 45---------------------------------------------
Dtesting/web-platform/meta/css/css-anchor-position/try-tactic-margin.html.ini | 21---------------------
Mtesting/web-platform/meta/css/css-anchor-position/try-tactic-percentage.html.ini | 24------------------------
Dtesting/web-platform/meta/css/css-anchor-position/try-tactic-wm.html.ini | 18------------------
19 files changed, 181 insertions(+), 185 deletions(-)

diff --git a/layout/generic/AbsoluteContainingBlock.cpp b/layout/generic/AbsoluteContainingBlock.cpp @@ -900,18 +900,15 @@ void AbsoluteContainingBlock::ReflowAbsoluteFrame( while (true) { nextFallback = &fallbacks[aIndex]; if (nextFallback->IsIdentAndOrTactic()) { - auto* ident = nextFallback->AsIdentAndOrTactic().ident.AsAtom(); - if (!ident->IsEmpty()) { - nextFallbackStyle = aPresContext->StyleSet()->ResolvePositionTry( - *aKidFrame->GetContent()->AsElement(), *aKidFrame->Style(), - ident); - if (!nextFallbackStyle) { - // No @position-try rule for this name was found, per spec we should - // skip it. - aIndex++; - if (aIndex >= fallbacks.Length()) { - return false; - } + nextFallbackStyle = aPresContext->StyleSet()->ResolvePositionTry( + *aKidFrame->GetContent()->AsElement(), *aKidFrame->Style(), + nextFallback->AsIdentAndOrTactic()); + if (!nextFallbackStyle) { + // No @position-try rule for this name was found, per spec we should + // skip it. + aIndex++; + if (aIndex >= fallbacks.Length()) { + return false; } } } diff --git a/layout/style/ServoStyleSet.cpp b/layout/style/ServoStyleSet.cpp @@ -609,10 +609,10 @@ already_AddRefed<ComputedStyle> ServoStyleSet::ResolveStartingStyle( } already_AddRefed<ComputedStyle> ServoStyleSet::ResolvePositionTry( - dom::Element& aElement, ComputedStyle& aStyle, nsAtom* aName) { - MOZ_ASSERT(aName); + dom::Element& aElement, ComputedStyle& aStyle, + const StyleDashedIdentAndOrTryTactic& aFallback) { return Servo_ComputedValues_GetForPositionTry(mRawData.get(), &aStyle, - &aElement, aName) + &aElement, &aFallback) .Consume(); } diff --git a/layout/style/ServoStyleSet.h b/layout/style/ServoStyleSet.h @@ -32,6 +32,7 @@ enum class MediaFeatureChangeReason : uint8_t; enum class StylePageSizeOrientation : uint8_t; enum class StyleRuleChangeKind : uint32_t; enum class StyleRelativeSelectorNthEdgeInvalidateFor : uint8_t; +struct StyleDashedIdentAndOrTryTactic; struct StyleRuleChange; class ErrorResult; @@ -262,9 +263,9 @@ class ServoStyleSet { // function after checking if it may have rules inside @starting-style. already_AddRefed<ComputedStyle> ResolveStartingStyle(dom::Element& aElement); - already_AddRefed<ComputedStyle> ResolvePositionTry(dom::Element& aElement, - ComputedStyle& aStyle, - nsAtom* aName); + already_AddRefed<ComputedStyle> ResolvePositionTry( + dom::Element& aElement, ComputedStyle& aStyle, + const StyleDashedIdentAndOrTryTactic&); size_t SheetCount(Origin) const; StyleSheet* SheetAt(Origin, size_t aIndex) const; diff --git a/servo/components/style/logical_geometry.rs b/servo/components/style/logical_geometry.rs @@ -307,6 +307,25 @@ impl WritingMode { } } + /// Given a physical side, flips the start on that axis, and returns the corresponding + /// physical side. + #[inline] + pub fn flipped_start_side(&self, side: PhysicalSide) -> PhysicalSide { + let bs = self.block_start_physical_side(); + if side == bs { + return self.inline_start_physical_side(); + } + let be = self.block_end_physical_side(); + if side == be { + return self.inline_end_physical_side(); + } + if side == self.inline_start_physical_side() { + return bs; + } + debug_assert_eq!(side, self.inline_end_physical_side()); + be + } + #[inline] pub fn start_start_physical_corner(&self) -> PhysicalCorner { PhysicalCorner::from_sides( diff --git a/servo/components/style/properties/cascade.rs b/servo/components/style/properties/cascade.rs @@ -29,6 +29,7 @@ use crate::stylesheets::{layer_rule::LayerOrder, Origin}; use crate::stylist::Stylist; #[cfg(feature = "gecko")] use crate::values::specified::length::FontBaseSize; +use crate::values::specified::position::PositionTryFallbacksTryTactic; use crate::values::{computed, specified}; use rustc_hash::FxHashMap; use servo_arc::Arc; @@ -70,6 +71,7 @@ pub fn cascade<E>( parent_style: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>, first_line_reparenting: FirstLineReparenting, + try_tactic: PositionTryFallbacksTryTactic, visited_rules: Option<&StrongRuleNode>, cascade_input_flags: ComputedValueFlags, rule_cache: Option<&RuleCache>, @@ -87,6 +89,7 @@ where parent_style, layout_parent_style, first_line_reparenting, + try_tactic, CascadeMode::Unvisited { visited_rules }, cascade_input_flags, rule_cache, @@ -186,6 +189,7 @@ fn cascade_rules<E>( parent_style: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>, first_line_reparenting: FirstLineReparenting, + try_tactic: PositionTryFallbacksTryTactic, cascade_mode: CascadeMode, cascade_input_flags: ComputedValueFlags, rule_cache: Option<&RuleCache>, @@ -204,6 +208,7 @@ where parent_style, layout_parent_style, first_line_reparenting, + try_tactic, cascade_mode, cascade_input_flags, rule_cache, @@ -260,6 +265,7 @@ pub fn apply_declarations<'a, E, I>( parent_style: Option<&'a ComputedValues>, layout_parent_style: Option<&ComputedValues>, first_line_reparenting: FirstLineReparenting<'a>, + try_tactic: PositionTryFallbacksTryTactic, cascade_mode: CascadeMode, cascade_input_flags: ComputedValueFlags, rule_cache: Option<&'a RuleCache>, @@ -299,7 +305,7 @@ where let using_cached_reset_properties; let ignore_colors = context.builder.device.forced_colors().is_active(); - let mut cascade = Cascade::new(first_line_reparenting, ignore_colors); + let mut cascade = Cascade::new(first_line_reparenting, try_tactic, ignore_colors); let mut declarations = Default::default(); let mut shorthand_cache = ShorthandsWithPropertyReferencesCache::default(); let properties_to_apply = match cascade_mode { @@ -626,6 +632,7 @@ impl<'a> Declarations<'a> { struct Cascade<'b> { first_line_reparenting: FirstLineReparenting<'b>, + try_tactic: PositionTryFallbacksTryTactic, ignore_colors: bool, seen: LonghandIdSet, author_specified: LonghandIdSet, @@ -635,9 +642,10 @@ struct Cascade<'b> { } impl<'b> Cascade<'b> { - fn new(first_line_reparenting: FirstLineReparenting<'b>, ignore_colors: bool) -> Self { + fn new(first_line_reparenting: FirstLineReparenting<'b>, try_tactic: PositionTryFallbacksTryTactic, ignore_colors: bool) -> Self { Self { first_line_reparenting, + try_tactic, ignore_colors, seen: LonghandIdSet::default(), author_specified: LonghandIdSet::default(), @@ -861,6 +869,9 @@ impl<'b> Cascade<'b> { .set_writing_mode_dependency(wm); longhand_id = longhand_id.to_physical(wm); } + if !self.try_tactic.is_empty() { + longhand_id = self.try_tactic.apply_to_property(longhand_id, context.builder.writing_mode); + } self.apply_one_longhand( context, longhand_id, @@ -1022,6 +1033,7 @@ impl<'b> Cascade<'b> { visited_parent!(parent_style), visited_parent!(layout_parent_style), self.first_line_reparenting, + self.try_tactic, CascadeMode::Visited { unvisited_context: &*context, }, diff --git a/servo/components/style/style_resolver.rs b/servo/components/style/style_resolver.rs @@ -389,6 +389,7 @@ where parent_style, layout_parent_style, FirstLineReparenting::No, + /* try_tactic = */ Default::default(), Some(&self.context.thread_local.rule_cache), &mut conditions, ); diff --git a/servo/components/style/stylist.rs b/servo/components/style/stylist.rs @@ -55,6 +55,8 @@ use crate::stylesheets::{ CssRule, EffectiveRulesIterator, Origin, OriginSet, PageRule, PerOrigin, PerOriginIter, StylesheetContents, StylesheetInDocument, }; +use crate::values::computed::DashedIdentAndOrTryTactic; +use crate::values::specified::position::PositionTryFallbacksTryTactic; use crate::values::{computed, AtomIdent}; use crate::AllocErr; use crate::{Atom, LocalName, Namespace, ShrinkIfNeeded, WeakAtom}; @@ -1204,6 +1206,7 @@ impl Stylist { parent_style, parent_style, FirstLineReparenting::No, + PositionTryFallbacksTryTactic::default(), /* rule_cache = */ None, &mut RuleCacheConditions::default(), ) @@ -1215,13 +1218,17 @@ impl Stylist { style: &ComputedValues, guards: &StylesheetGuards, element: E, - name: &Atom, + name_and_try_tactic: &DashedIdentAndOrTryTactic, ) -> Option<Arc<ComputedValues>> where E: TElement, { - let fallback_rule = self.lookup_position_try(name, element)?; - let fallback_block = &fallback_rule.read_with(guards.author).block; + let fallback_rule = if !name_and_try_tactic.ident.is_empty() { + Some(self.lookup_position_try(&name_and_try_tactic.ident.0, element)?) + } else { + None + }; + let fallback_block = fallback_rule.as_ref().map(|r| &r.read_with(guards.author).block); let pseudo = style .pseudo() .or_else(|| element.implemented_pseudo_element()); @@ -1231,20 +1238,22 @@ impl Stylist { inputs.visited_rules = None; let rules = inputs.rules.as_ref().unwrap_or(self.rule_tree.root()); let mut important_rules_changed = false; - let new_rules = self.rule_tree.update_rule_at_level( - CascadeLevel::PositionFallback, - LayerOrder::root(), - Some(fallback_block.borrow_arc()), - rules, - guards, - &mut important_rules_changed, - ); - if new_rules.is_some() { - inputs.rules = new_rules; - } else { - // This will return an identical style to `style`. We could consider optimizing - // this a bit more but for now just perform the cascade, this can only happen with - // the same position-try name repeated multiple times anyways. + if let Some(fallback_block) = fallback_block { + let new_rules = self.rule_tree.update_rule_at_level( + CascadeLevel::PositionFallback, + LayerOrder::root(), + Some(fallback_block.borrow_arc()), + rules, + guards, + &mut important_rules_changed, + ); + if new_rules.is_some() { + inputs.rules = new_rules; + } else { + // This will return an identical style to `style`. We could consider optimizing + // this a bit more but for now just perform the cascade, this can only happen with + // the same position-try name repeated multiple times anyways. + } } inputs }; @@ -1257,6 +1266,7 @@ impl Stylist { parent_style, layout_parent_style, FirstLineReparenting::No, + name_and_try_tactic.try_tactic, /* rule_cache = */ None, &mut RuleCacheConditions::default(), )) @@ -1284,6 +1294,7 @@ impl Stylist { parent_style: Option<&ComputedValues>, layout_parent_style: Option<&ComputedValues>, first_line_reparenting: FirstLineReparenting, + try_tactic: PositionTryFallbacksTryTactic, rule_cache: Option<&RuleCache>, rule_cache_conditions: &mut RuleCacheConditions, ) -> Arc<ComputedValues> @@ -1323,6 +1334,7 @@ impl Stylist { parent_style, layout_parent_style, first_line_reparenting, + try_tactic, visited_rules, inputs.flags, rule_cache, @@ -1786,6 +1798,7 @@ impl Stylist { Some(parent_style), Some(parent_style), FirstLineReparenting::No, + PositionTryFallbacksTryTactic::default(), CascadeMode::Unvisited { visited_rules: None, }, diff --git a/servo/components/style/values/specified/position.rs b/servo/components/style/values/specified/position.rs @@ -7,7 +7,9 @@ //! //! [position]: https://drafts.csswg.org/css-backgrounds-3/#position +use crate::logical_geometry::{PhysicalSide, WritingMode}; use crate::parser::{Parse, ParserContext}; +use crate::properties::LonghandId; use crate::selector_map::PrecomputedHashMap; use crate::str::HTML_SPACE_CHARACTERS; use crate::values::computed::LengthPercentage as ComputedLengthPercentage; @@ -578,9 +580,89 @@ impl Parse for PositionTryFallbacksTryTactic { } impl PositionTryFallbacksTryTactic { - fn is_empty(&self) -> bool { + /// Returns whether there's any tactic. + #[inline] + pub fn is_empty(&self) -> bool { self.0.is_none() } + + fn flip_vertical(id: LonghandId) -> LonghandId { + match id { + LonghandId::Top => LonghandId::Bottom, + LonghandId::Bottom => LonghandId::Top, + LonghandId::MarginTop => LonghandId::MarginBottom, + LonghandId::MarginBottom => LonghandId::MarginTop, + _ => id, + } + } + + fn flip_horizontal(id: LonghandId) -> LonghandId { + match id { + LonghandId::Left => LonghandId::Right, + LonghandId::Right => LonghandId::Left, + LonghandId::MarginLeft => LonghandId::MarginRight, + LonghandId::MarginRight => LonghandId::MarginLeft, + _ => id, + } + } + + fn flip_start(id: LonghandId, wm: WritingMode) -> LonghandId { + use LonghandId::*; + let (physical_side, is_margin) = match id { + // TODO(emilio): Needs some work to use the same cascade implementation for these. + // Also to make justify-self: left | right map to align-self properly. + // AlignSelf => return JustifySelf, + // JustifySelf => return AlignSelf, + + Width => return Height, + Height => return Width, + MinWidth => return MinHeight, + MinHeight => return MinWidth, + MaxWidth => return MaxHeight, + MaxHeight => return MaxWidth, + + Top => (PhysicalSide::Top, false), + Right => (PhysicalSide::Right, false), + Bottom => (PhysicalSide::Bottom, false), + Left => (PhysicalSide::Left, false), + + MarginTop => (PhysicalSide::Top, true), + MarginRight => (PhysicalSide::Right, true), + MarginBottom => (PhysicalSide::Bottom, true), + MarginLeft => (PhysicalSide::Left, true), + _ => return id, + }; + + match wm.flipped_start_side(physical_side) { + PhysicalSide::Top => if is_margin { MarginTop } else { Top }, + PhysicalSide::Right => if is_margin { MarginRight } else { Right }, + PhysicalSide::Bottom => if is_margin { MarginBottom } else { Bottom }, + PhysicalSide::Left => if is_margin { MarginLeft } else { Left }, + } + } + + /// Applies a try tactic to a given property. + pub fn apply_to_property(&self, mut id: LonghandId, wm: WritingMode) -> LonghandId { + debug_assert!(!id.is_logical(), "Logical props should've been replaced already"); + debug_assert!(!self.is_empty(), "Should have something to do"); + // TODO(emilio): Consider building a LonghandIdSet to check for unaffected properties, and + // bailing out earlier? + for tactic in [self.0, self.1, self.2] { + id = match tactic { + PositionTryFallbacksTryTacticKeyword::None => break, + PositionTryFallbacksTryTacticKeyword::FlipInline | + PositionTryFallbacksTryTacticKeyword::FlipBlock => { + if wm.is_horizontal() == (tactic == PositionTryFallbacksTryTacticKeyword::FlipInline) { + Self::flip_horizontal(id) + } else { + Self::flip_vertical(id) + } + }, + PositionTryFallbacksTryTacticKeyword::FlipStart => Self::flip_start(id, wm), + } + } + id + } } #[derive( diff --git a/servo/ports/geckolib/glue.rs b/servo/ports/geckolib/glue.rs @@ -172,6 +172,7 @@ use style::values::resolved; use style::values::specified::intersection_observer::IntersectionObserverMargin; use style::values::specified::source_size_list::SourceSizeList; use style::values::specified::svg_path::PathCommand; +use style::values::specified::position::DashedIdentAndOrTryTactic; use style::values::specified::{AbsoluteLength, NoCalcLength}; use style::values::{specified, AtomIdent, CustomIdent, KeyframesName}; use style_traits::{CssWriter, ParseError, ParsingMode, ToCss, TypedValue}; @@ -4387,22 +4388,19 @@ pub unsafe extern "C" fn Servo_ComputedValues_GetForPositionTry( raw_data: &PerDocumentStyleData, style: &ComputedValues, element: &RawGeckoElement, - name: *const nsAtom, + name_and_try_tactic: &DashedIdentAndOrTryTactic, ) -> Strong<ComputedValues> { - debug_assert!(!name.is_null()); let global_style_data = &*GLOBAL_STYLE_DATA; let guard = global_style_data.shared_lock.read(); let guards = StylesheetGuards::same(&guard); let element = GeckoElement(element); let data = raw_data.borrow(); - Atom::with(name, |name| { - data.stylist.resolve_position_try( - style, - &guards, - element, - name, - ) - }) + data.stylist.resolve_position_try( + style, + &guards, + element, + name_and_try_tactic + ) .into() } @@ -6846,6 +6844,7 @@ pub extern "C" fn Servo_ReparentStyle( Some(parent_style), Some(layout_parent_style), FirstLineReparenting::Yes { style_to_reparent }, + /* try_tactic = */ Default::default(), /* rule_cache = */ None, &mut RuleCacheConditions::default(), ) diff --git a/testing/web-platform/meta/css/css-anchor-position/last-successful-pseudo-element-basic.html.ini b/testing/web-platform/meta/css/css-anchor-position/last-successful-pseudo-element-basic.html.ini @@ -4,3 +4,6 @@ [No successful position, keep flip-block] expected: FAIL + + [Base position without fallback now successful] + expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/last-successful-pseudo-element-fallbacks.html.ini b/testing/web-platform/meta/css/css-anchor-position/last-successful-pseudo-element-fallbacks.html.ini @@ -4,3 +4,6 @@ [No successful position, keep flip-block] expected: FAIL + + [No successful position, last successful invalidated by position-try-fallbacks change] + expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/position-try-fallbacks-002.html.ini b/testing/web-platform/meta/css/css-anchor-position/position-try-fallbacks-002.html.ini @@ -1,2 +0,0 @@ -[position-try-fallbacks-002.html] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/try-tactic-anchor.html.ini b/testing/web-platform/meta/css/css-anchor-position/try-tactic-anchor.html.ini @@ -47,12 +47,6 @@ [flip-inline, left:anchor(end), right:anchor(left)] expected: FAIL - [flip-start, right:anchor(start), bottom:anchor(top)] - expected: FAIL - - [flip-start, bottom:anchor(start), right:anchor(left)] - expected: FAIL - [flip-inline flip-start, right:anchor(start), top:anchor(bottom)] expected: FAIL @@ -65,12 +59,6 @@ [flip-block flip-start, bottom:anchor(start), left:anchor(right)] expected: FAIL - [flip-start, left:anchor(end), top:anchor(bottom)] - expected: FAIL - - [flip-start, top:anchor(end), left:anchor(right)] - expected: FAIL - [flip-block, bottom:anchor(start), top:anchor(bottom)] expected: FAIL @@ -83,12 +71,6 @@ [flip-inline, left:anchor(self-end), right:anchor(left)] expected: FAIL - [flip-start, right:anchor(self-start), bottom:anchor(top)] - expected: FAIL - - [flip-start, bottom:anchor(self-start), right:anchor(left)] - expected: FAIL - [flip-inline flip-start, right:anchor(self-start), top:anchor(bottom)] expected: FAIL @@ -101,12 +83,6 @@ [flip-block flip-start, bottom:anchor(self-start), left:anchor(right)] expected: FAIL - [flip-start, left:anchor(self-end), top:anchor(bottom)] - expected: FAIL - - [flip-start, top:anchor(self-end), left:anchor(right)] - expected: FAIL - [flip-block, bottom:anchor(self-start), top:anchor(bottom)] expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/try-tactic-back-to-base.html.ini b/testing/web-platform/meta/css/css-anchor-position/try-tactic-back-to-base.html.ini @@ -0,0 +1,3 @@ +[try-tactic-back-to-base.html] + [Should use base values when nothing fits] + expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/try-tactic-base.html.ini b/testing/web-platform/meta/css/css-anchor-position/try-tactic-base.html.ini @@ -1,3 +0,0 @@ -[try-tactic-base.html] - [flip-start affects base values] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/try-tactic-basic.html.ini b/testing/web-platform/meta/css/css-anchor-position/try-tactic-basic.html.ini @@ -1,45 +0,0 @@ -[try-tactic-basic.html] - [--pf flip-block] - expected: FAIL - - [--pf flip-inline] - expected: FAIL - - [--pf flip-block flip-inline] - expected: FAIL - - [--pf flip-start] - expected: FAIL - - [--pf flip-inline flip-start] - expected: FAIL - - [--pf flip-block flip-start] - expected: FAIL - - [--pf flip-block flip-inline flip-start] - expected: FAIL - - [--pf flip-inline flip-block] - expected: FAIL - - [--pf flip-block flip-start flip-inline] - expected: FAIL - - [--pf flip-inline flip-start flip-block] - expected: FAIL - - [--pf flip-start flip-block] - expected: FAIL - - [--pf flip-start flip-inline] - expected: FAIL - - [--pf flip-start flip-block flip-inline] - expected: FAIL - - [--pf flip-start flip-inline flip-block] - expected: FAIL - - [--pf flip-inline flip-block flip-start] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/try-tactic-margin.html.ini b/testing/web-platform/meta/css/css-anchor-position/try-tactic-margin.html.ini @@ -1,21 +0,0 @@ -[try-tactic-margin.html] - [--pf flip-block] - expected: FAIL - - [--pf flip-inline] - expected: FAIL - - [--pf flip-block flip-inline] - expected: FAIL - - [--pf flip-start] - expected: FAIL - - [--pf flip-block flip-start] - expected: FAIL - - [--pf flip-inline flip-start] - expected: FAIL - - [--pf flip-block flip-inline flip-start] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/try-tactic-percentage.html.ini b/testing/web-platform/meta/css/css-anchor-position/try-tactic-percentage.html.ini @@ -29,30 +29,6 @@ [flip-block flip-inline, top:anchor(100%), bottom:anchor(0%)] expected: FAIL - [flip-start, left:anchor(0%), top:anchor(0%)] - expected: FAIL - - [flip-start, left:anchor(100%), top:anchor(100%)] - expected: FAIL - - [flip-start, bottom:anchor(0%), right:anchor(0%)] - expected: FAIL - - [flip-start, bottom:anchor(100%), right:anchor(100%)] - expected: FAIL - - [flip-block flip-start, left:anchor(0%), top:anchor(0%)] - expected: FAIL - - [flip-block flip-start, left:anchor(100%), top:anchor(100%)] - expected: FAIL - - [flip-block flip-start, bottom:anchor(0%), left:anchor(100%)] - expected: FAIL - - [flip-block flip-start, bottom:anchor(100%), left:anchor(0%)] - expected: FAIL - [flip-inline flip-start, left:anchor(0%), bottom:anchor(100%)] expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/try-tactic-wm.html.ini b/testing/web-platform/meta/css/css-anchor-position/try-tactic-wm.html.ini @@ -1,18 +0,0 @@ -[try-tactic-wm.html] - [flip-inline horizontal-tb ltr] - expected: FAIL - - [flip-inline vertical-lr ltr] - expected: FAIL - - [flip-start horizontal-tb ltr] - expected: FAIL - - [flip-start horizontal-tb rtl] - expected: FAIL - - [flip-inline sideways-lr ltr] - expected: FAIL - - [flip-block sideways-rl ltr] - expected: FAIL