aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2023-04-28 17:17:43 +0200
committerMartin Robinson <mrobinson@igalia.com>2023-05-09 12:07:20 +0200
commite1675266187fa2eb8686c06724919bb7b4f8db76 (patch)
tree3a03bd46814523916049df2cfd286bc6b1193b48
parent4e37d07ea4f2bba124f78f17873fbb02c66d1cdb (diff)
downloadservo-e1675266187fa2eb8686c06724919bb7b4f8db76.tar.gz
servo-e1675266187fa2eb8686c06724919bb7b4f8db76.zip
Better implement getComputedStyle() for positioned insets
The specification dictates quite quite idiosyncratic return values when querying insets of positioned elements via getComputedStyle(). These depend on whether or not the elements size was overconstrained. This change adds a better implementation of that in preparation for returning proper values for position: sticky.
-rw-r--r--components/layout_2020/display_list/stacking_context.rs91
-rw-r--r--components/layout_2020/flow/root.rs15
-rw-r--r--components/layout_2020/fragment_tree/containing_block.rs99
-rw-r--r--components/layout_2020/fragment_tree/mod.rs2
-rw-r--r--components/layout_2020/fragments.rs167
-rw-r--r--components/layout_2020/positioned.rs255
-rw-r--r--components/layout_2020/query.rs20
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html.ini36
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html.ini24
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html.ini36
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html.ini24
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html.ini24
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html.ini24
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html.ini24
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html.ini24
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html.ini36
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html.ini18
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html.ini42
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html.ini24
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html.ini18
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html.ini18
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/position-absolute-003.html.ini12
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom/computed-style-005.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-absolute.html.ini324
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-fixed.html.ini324
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-relative.html.ini432
26 files changed, 800 insertions, 1317 deletions
diff --git a/components/layout_2020/display_list/stacking_context.rs b/components/layout_2020/display_list/stacking_context.rs
index ec61f829374..7f15a530863 100644
--- a/components/layout_2020/display_list/stacking_context.rs
+++ b/components/layout_2020/display_list/stacking_context.rs
@@ -5,6 +5,7 @@
use crate::cell::ArcRefCell;
use crate::display_list::conversions::ToWebRender;
use crate::display_list::DisplayListBuilder;
+use crate::fragment_tree::ContainingBlockManager;
use crate::fragments::{AnonymousFragment, BoxFragment, Fragment};
use crate::geom::PhysicalRect;
use crate::style_ext::ComputedValuesExt;
@@ -51,96 +52,6 @@ impl ContainingBlock {
}
}
-#[derive(Clone)]
-pub(crate) struct ContainingBlockManager<'a, T> {
- // The containing block for all non-absolute descendants. "...if the element's
- // position is 'relative' or 'static', the containing block is formed by the
- // content edge of the nearest block container ancestor box." This is also
- // the case for 'position: sticky' elements.
- // https://www.w3.org/TR/CSS2/visudet.html#containing-block-details
- pub for_non_absolute_descendants: &'a T,
-
- // The containing block for absolute descendants. "If the element has
- // 'position: absolute', the containing block is
- // established by the nearest ancestor with a 'position' of 'absolute',
- // 'relative' or 'fixed', in the following way:
- // 1. In the case that the ancestor is an inline element, the containing
- // block is the bounding box around the padding boxes of the first and the
- // last inline boxes generated for that element. In CSS 2.1, if the inline
- // element is split across multiple lines, the containing block is
- // undefined.
- // 2. Otherwise, the containing block is formed by the padding edge of the
- // ancestor."
- // https://www.w3.org/TR/CSS2/visudet.html#containing-block-details
- // If the ancestor forms a containing block for all descendants (see below),
- // this value will be None and absolute descendants will use the containing
- // block for fixed descendants.
- pub for_absolute_descendants: Option<&'a T>,
-
- // The containing block for fixed and absolute descendants.
- // "For elements whose layout is governed by the CSS box model, any value
- // other than none for the transform property also causes the element to
- // establish a containing block for all descendants. Its padding box will be
- // used to layout for all of its absolute-position descendants,
- // fixed-position descendants, and descendant fixed background attachments."
- // https://w3c.github.io/csswg-drafts/css-transforms-1/#containing-block-for-all-descendants
- // See `ComputedValues::establishes_containing_block_for_all_descendants`
- // for a list of conditions where an element forms a containing block for
- // all descendants.
- pub for_absolute_and_fixed_descendants: &'a T,
-}
-
-impl<'a, T> ContainingBlockManager<'a, T> {
- fn get_containing_block_for_fragment(&self, fragment: &Fragment) -> &T {
- if let Fragment::Box(box_fragment) = fragment {
- match box_fragment.style.clone_position() {
- ComputedPosition::Fixed => self.for_absolute_and_fixed_descendants,
- ComputedPosition::Absolute => self
- .for_absolute_descendants
- .unwrap_or(self.for_absolute_and_fixed_descendants),
- _ => self.for_non_absolute_descendants,
- }
- } else {
- self.for_non_absolute_descendants
- }
- }
-
- pub(crate) fn new_for_non_absolute_descendants(
- &self,
- for_non_absolute_descendants: &'a T,
- ) -> Self {
- return ContainingBlockManager {
- for_non_absolute_descendants,
- for_absolute_descendants: self.for_absolute_descendants,
- for_absolute_and_fixed_descendants: self.for_absolute_and_fixed_descendants,
- };
- }
-
- pub(crate) fn new_for_absolute_descendants(
- &self,
- for_non_absolute_descendants: &'a T,
- for_absolute_descendants: &'a T,
- ) -> Self {
- return ContainingBlockManager {
- for_non_absolute_descendants,
- for_absolute_descendants: Some(for_absolute_descendants),
- for_absolute_and_fixed_descendants: self.for_absolute_and_fixed_descendants,
- };
- }
-
- pub(crate) fn new_for_absolute_and_fixed_descendants(
- &self,
- for_non_absolute_descendants: &'a T,
- for_absolute_and_fixed_descendants: &'a T,
- ) -> Self {
- return ContainingBlockManager {
- for_non_absolute_descendants,
- for_absolute_descendants: None,
- for_absolute_and_fixed_descendants,
- };
- }
-}
-
pub(crate) type ContainingBlockInfo<'a> = ContainingBlockManager<'a, ContainingBlock>;
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
diff --git a/components/layout_2020/flow/root.rs b/components/layout_2020/flow/root.rs
index c0ca277167c..f6eae6ea478 100644
--- a/components/layout_2020/flow/root.rs
+++ b/components/layout_2020/flow/root.rs
@@ -15,7 +15,7 @@ use crate::flow::float::FloatBox;
use crate::flow::inline::InlineLevelBox;
use crate::flow::{BlockContainer, BlockFormattingContext, BlockLevelBox};
use crate::formatting_contexts::IndependentFormattingContext;
-use crate::fragment_tree::Tag;
+use crate::fragment_tree::{ContainingBlockManager, Tag};
use crate::fragments::Fragment;
use crate::geom::flow_relative::Vec2;
use crate::geom::{PhysicalPoint, PhysicalRect, PhysicalSize};
@@ -457,11 +457,14 @@ impl FragmentTree {
&self,
mut process_func: impl FnMut(&Fragment, usize, &PhysicalRect<Length>) -> Option<T>,
) -> Option<T> {
- self.root_fragments.iter().find_map(|child| {
- child
- .borrow()
- .find(&self.initial_containing_block, 0, &mut process_func)
- })
+ let info = ContainingBlockManager {
+ for_non_absolute_descendants: &self.initial_containing_block,
+ for_absolute_descendants: None,
+ for_absolute_and_fixed_descendants: &self.initial_containing_block,
+ };
+ self.root_fragments
+ .iter()
+ .find_map(|child| child.borrow().find(&info, 0, &mut process_func))
}
pub fn remove_nodes_in_fragment_tree_from_set(&self, set: &mut FxHashSet<AnimationSetKey>) {
diff --git a/components/layout_2020/fragment_tree/containing_block.rs b/components/layout_2020/fragment_tree/containing_block.rs
new file mode 100644
index 00000000000..5bd02a67867
--- /dev/null
+++ b/components/layout_2020/fragment_tree/containing_block.rs
@@ -0,0 +1,99 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use crate::fragments::Fragment;
+use style::computed_values::position::T as ComputedPosition;
+
+/// A data structure used to track the containing block when recursing
+/// through the Fragment tree. It tracks the three types of containing
+/// blocks (for all descendants, for absolute and fixed position
+/// descendants, and for fixed position descendants).
+pub(crate) struct ContainingBlockManager<'a, T> {
+ // The containing block for all non-absolute descendants. "...if the element's
+ // position is 'relative' or 'static', the containing block is formed by the
+ // content edge of the nearest block container ancestor box." This is also
+ // the case for 'position: sticky' elements.
+ // https://www.w3.org/TR/CSS2/visudet.html#containing-block-details
+ pub for_non_absolute_descendants: &'a T,
+
+ // The containing block for absolute descendants. "If the element has
+ // 'position: absolute', the containing block is
+ // established by the nearest ancestor with a 'position' of 'absolute',
+ // 'relative' or 'fixed', in the following way:
+ // 1. In the case that the ancestor is an inline element, the containing
+ // block is the bounding box around the padding boxes of the first and the
+ // last inline boxes generated for that element. In CSS 2.1, if the inline
+ // element is split across multiple lines, the containing block is
+ // undefined.
+ // 2. Otherwise, the containing block is formed by the padding edge of the
+ // ancestor."
+ // https://www.w3.org/TR/CSS2/visudet.html#containing-block-details
+ // If the ancestor forms a containing block for all descendants (see below),
+ // this value will be None and absolute descendants will use the containing
+ // block for fixed descendants.
+ pub for_absolute_descendants: Option<&'a T>,
+
+ // The containing block for fixed and absolute descendants.
+ // "For elements whose layout is governed by the CSS box model, any value
+ // other than none for the transform property also causes the element to
+ // establish a containing block for all descendants. Its padding box will be
+ // used to layout for all of its absolute-position descendants,
+ // fixed-position descendants, and descendant fixed background attachments."
+ // https://w3c.github.io/csswg-drafts/css-transforms-1/#containing-block-for-all-descendants
+ // See `ComputedValues::establishes_containing_block_for_all_descendants`
+ // for a list of conditions where an element forms a containing block for
+ // all descendants.
+ pub for_absolute_and_fixed_descendants: &'a T,
+}
+
+impl<'a, T> ContainingBlockManager<'a, T> {
+ pub(crate) fn get_containing_block_for_fragment(&self, fragment: &Fragment) -> &T {
+ if let Fragment::Box(box_fragment) = fragment {
+ match box_fragment.style.clone_position() {
+ ComputedPosition::Fixed => self.for_absolute_and_fixed_descendants,
+ ComputedPosition::Absolute => self
+ .for_absolute_descendants
+ .unwrap_or(self.for_absolute_and_fixed_descendants),
+ _ => self.for_non_absolute_descendants,
+ }
+ } else {
+ self.for_non_absolute_descendants
+ }
+ }
+
+ pub(crate) fn new_for_non_absolute_descendants(
+ &self,
+ for_non_absolute_descendants: &'a T,
+ ) -> Self {
+ return ContainingBlockManager {
+ for_non_absolute_descendants,
+ for_absolute_descendants: self.for_absolute_descendants,
+ for_absolute_and_fixed_descendants: self.for_absolute_and_fixed_descendants,
+ };
+ }
+
+ pub(crate) fn new_for_absolute_descendants(
+ &self,
+ for_non_absolute_descendants: &'a T,
+ for_absolute_descendants: &'a T,
+ ) -> Self {
+ return ContainingBlockManager {
+ for_non_absolute_descendants,
+ for_absolute_descendants: Some(for_absolute_descendants),
+ for_absolute_and_fixed_descendants: self.for_absolute_and_fixed_descendants,
+ };
+ }
+
+ pub(crate) fn new_for_absolute_and_fixed_descendants(
+ &self,
+ for_non_absolute_descendants: &'a T,
+ for_absolute_and_fixed_descendants: &'a T,
+ ) -> Self {
+ return ContainingBlockManager {
+ for_non_absolute_descendants,
+ for_absolute_descendants: None,
+ for_absolute_and_fixed_descendants,
+ };
+ }
+}
diff --git a/components/layout_2020/fragment_tree/mod.rs b/components/layout_2020/fragment_tree/mod.rs
index 1d7425655cb..96f07217ac4 100644
--- a/components/layout_2020/fragment_tree/mod.rs
+++ b/components/layout_2020/fragment_tree/mod.rs
@@ -3,5 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
mod base;
+mod containing_block;
pub(crate) use base::*;
+pub(crate) use containing_block::*;
diff --git a/components/layout_2020/fragments.rs b/components/layout_2020/fragments.rs
index 53e6d93cdc1..4dbacf10182 100644
--- a/components/layout_2020/fragments.rs
+++ b/components/layout_2020/fragments.rs
@@ -3,10 +3,11 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::cell::ArcRefCell;
-use crate::fragment_tree::{BaseFragment, BaseFragmentInfo, Tag};
+use crate::fragment_tree::{BaseFragment, BaseFragmentInfo, ContainingBlockManager, Tag};
use crate::geom::flow_relative::{Rect, Sides};
-use crate::geom::{PhysicalPoint, PhysicalRect};
+use crate::geom::{PhysicalPoint, PhysicalRect, PhysicalSides, PhysicalSize};
use crate::positioned::HoistedSharedFragment;
+use crate::style_ext::ComputedValuesExt;
use gfx::font::FontMetrics as GfxFontMetrics;
use gfx::text::glyph::GlyphStore;
use gfx_traits::print_tree::PrintTree;
@@ -14,9 +15,10 @@ use msg::constellation_msg::{BrowsingContextId, PipelineId};
use servo_arc::Arc as ServoArc;
use std::sync::Arc;
use style::computed_values::overflow_x::T as ComputedOverflow;
+use style::computed_values::position::T as ComputedPosition;
use style::logical_geometry::WritingMode;
use style::properties::ComputedValues;
-use style::values::computed::Length;
+use style::values::computed::{CSSPixelLength, Length, LengthPercentage, LengthPercentageOrAuto};
use style::values::specified::text::TextDecorationLine;
use style::Zero;
use webrender_api::{FontInstanceKey, ImageKey};
@@ -59,6 +61,9 @@ pub(crate) struct BoxFragment {
/// The scrollable overflow of this box fragment.
pub scrollable_overflow_from_children: PhysicalRect<Length>,
+
+ /// Whether or not this box was overconstrained in the given dimension.
+ overconstrained: PhysicalSize<bool>,
}
#[derive(Serialize)]
@@ -207,36 +212,54 @@ impl Fragment {
pub(crate) fn find<T>(
&self,
- containing_block: &PhysicalRect<Length>,
+ manager: &ContainingBlockManager<PhysicalRect<Length>>,
level: usize,
process_func: &mut impl FnMut(&Fragment, usize, &PhysicalRect<Length>) -> Option<T>,
) -> Option<T> {
+ let containing_block = manager.get_containing_block_for_fragment(self);
if let Some(result) = process_func(self, level, containing_block) {
return Some(result);
}
match self {
Fragment::Box(fragment) => {
- let new_containing_block = fragment
+ let content_rect = fragment
.content_rect
.to_physical(fragment.style.writing_mode, containing_block)
.translate(containing_block.origin.to_vector());
- fragment.children.iter().find_map(|child| {
- child
- .borrow()
- .find(&new_containing_block, level + 1, process_func)
- })
+ let padding_rect = fragment
+ .padding_rect()
+ .to_physical(fragment.style.writing_mode, containing_block)
+ .translate(containing_block.origin.to_vector());
+ let new_manager = if fragment
+ .style
+ .establishes_containing_block_for_all_descendants()
+ {
+ manager.new_for_absolute_and_fixed_descendants(&content_rect, &padding_rect)
+ } else if fragment
+ .style
+ .establishes_containing_block_for_absolute_descendants()
+ {
+ manager.new_for_absolute_descendants(&content_rect, &padding_rect)
+ } else {
+ manager.new_for_non_absolute_descendants(&content_rect)
+ };
+
+ fragment
+ .children
+ .iter()
+ .find_map(|child| child.borrow().find(&new_manager, level + 1, process_func))
},
Fragment::Anonymous(fragment) => {
- let new_containing_block = fragment
+ let content_rect = fragment
.rect
.to_physical(fragment.mode, containing_block)
.translate(containing_block.origin.to_vector());
- fragment.children.iter().find_map(|child| {
- child
- .borrow()
- .find(&new_containing_block, level + 1, process_func)
- })
+ let new_manager = manager.new_for_non_absolute_descendants(&content_rect);
+ fragment
+ .children
+ .iter()
+ .find_map(|child| child.borrow().find(&new_manager, level + 1, process_func))
},
_ => None,
}
@@ -304,6 +327,39 @@ impl BoxFragment {
margin: Sides<Length>,
block_margins_collapsed_with_children: CollapsedBlockMargins,
) -> BoxFragment {
+ let position = style.get_box().position;
+ let insets = style.get_position();
+ let width_overconstrained = position == ComputedPosition::Relative &&
+ !insets.left.is_auto() &&
+ !insets.right.is_auto();
+ let height_overconstrained = position == ComputedPosition::Relative &&
+ !insets.left.is_auto() &&
+ !insets.bottom.is_auto();
+
+ Self::new_with_overconstrained(
+ base_fragment_info,
+ style,
+ children,
+ content_rect,
+ padding,
+ border,
+ margin,
+ block_margins_collapsed_with_children,
+ PhysicalSize::new(width_overconstrained, height_overconstrained),
+ )
+ }
+
+ pub fn new_with_overconstrained(
+ base_fragment_info: BaseFragmentInfo,
+ style: ServoArc<ComputedValues>,
+ children: Vec<Fragment>,
+ content_rect: Rect<Length>,
+ padding: Sides<Length>,
+ border: Sides<Length>,
+ margin: Sides<Length>,
+ block_margins_collapsed_with_children: CollapsedBlockMargins,
+ overconstrained: PhysicalSize<bool>,
+ ) -> BoxFragment {
// FIXME(mrobinson, bug 25564): We should be using the containing block
// here to properly convert scrollable overflow to physical geometry.
let containing_block = PhysicalRect::zero();
@@ -311,6 +367,7 @@ impl BoxFragment {
children.iter().fold(PhysicalRect::zero(), |acc, child| {
acc.union(&child.scrollable_overflow(&containing_block))
});
+
BoxFragment {
base: base_fragment_info.into(),
style,
@@ -324,6 +381,7 @@ impl BoxFragment {
margin,
block_margins_collapsed_with_children,
scrollable_overflow_from_children,
+ overconstrained,
}
}
@@ -363,6 +421,7 @@ impl BoxFragment {
\nborder rect={:?}\
\nscrollable_overflow={:?}\
\noverflow={:?} / {:?}\
+ \noverconstrained={:?}
\nstyle={:p}",
self.base,
self.content_rect,
@@ -371,6 +430,7 @@ impl BoxFragment {
self.scrollable_overflow(&PhysicalRect::zero()),
self.style.get_box().overflow_x,
self.style.get_box().overflow_y,
+ self.overconstrained,
self.style,
));
@@ -414,6 +474,81 @@ impl BoxFragment {
overflow
}
+
+ pub(crate) fn calculate_resolved_insets_if_positioned(
+ &self,
+ containing_block: &PhysicalRect<CSSPixelLength>,
+ ) -> PhysicalSides<CSSPixelLength> {
+ let position = self.style.get_box().position;
+ debug_assert_ne!(
+ position,
+ ComputedPosition::Static,
+ "Should not call this method on statically positioned box."
+ );
+
+ let (cb_width, cb_height) = (containing_block.width(), containing_block.height());
+ let content_rect = self
+ .content_rect
+ .to_physical(self.style.writing_mode, &containing_block);
+
+ // "A resolved value special case property like top defined in another
+ // specification If the property applies to a positioned element and the
+ // resolved value of the display property is not none or contents, and
+ // the property is not over-constrained, then the resolved value is the
+ // used value. Otherwise the resolved value is the computed value."
+ // https://drafts.csswg.org/cssom/#resolved-values
+ let insets = self.style.get_position();
+ if position == ComputedPosition::Relative {
+ let get_resolved_axis =
+ |start: &LengthPercentageOrAuto,
+ end: &LengthPercentageOrAuto,
+ container_length: CSSPixelLength| {
+ let start = start.map(|v| v.percentage_relative_to(container_length));
+ let end = end.map(|v| v.percentage_relative_to(container_length));
+ match (start.non_auto(), end.non_auto()) {
+ (None, None) => (Length::zero(), Length::zero()),
+ (None, Some(end)) => (-end, end),
+ (Some(start), None) => (start, -start),
+ // This is the overconstrained case, for which the resolved insets will
+ // simply be the computed insets.
+ (Some(start), Some(end)) => (start, end),
+ }
+ };
+ let (left, right) = get_resolved_axis(&insets.left, &insets.right, cb_width);
+ let (top, bottom) = get_resolved_axis(&insets.top, &insets.bottom, cb_height);
+ return PhysicalSides::new(top, right, bottom, left);
+ }
+
+ debug_assert!(
+ position == ComputedPosition::Fixed || position == ComputedPosition::Absolute,
+ "Got unknown position."
+ );
+
+ let resolve = |value: &LengthPercentageOrAuto, container_length| {
+ value
+ .auto_is(LengthPercentage::zero)
+ .percentage_relative_to(container_length)
+ };
+
+ let (top, bottom) = if self.overconstrained.height {
+ (
+ resolve(&insets.top, cb_height),
+ resolve(&insets.bottom, cb_height),
+ )
+ } else {
+ (content_rect.origin.y, cb_height - content_rect.max_y())
+ };
+ let (left, right) = if self.overconstrained.width {
+ (
+ resolve(&insets.left, cb_width),
+ resolve(&insets.right, cb_width),
+ )
+ } else {
+ (content_rect.origin.x, cb_width - content_rect.max_x())
+ };
+
+ PhysicalSides::new(top, right, bottom, left)
+ }
}
impl TextFragment {
diff --git a/components/layout_2020/positioned.rs b/components/layout_2020/positioned.rs
index 744086ebc93..0a7dd28e945 100644
--- a/components/layout_2020/positioned.rs
+++ b/components/layout_2020/positioned.rs
@@ -93,6 +93,13 @@ pub(crate) enum AbsoluteBoxOffsets {
}
impl AbsoluteBoxOffsets {
+ fn both_specified(&self) -> bool {
+ match self {
+ AbsoluteBoxOffsets::Both { .. } => return true,
+ _ => return false,
+ }
+ }
+
fn adjust_offset(&mut self, new_offset: Length) {
match *self {
AbsoluteBoxOffsets::StaticStart { ref mut start } => *start = new_offset,
@@ -444,32 +451,30 @@ impl HoistedAbsolutelyPositionedBox {
};
let shared_fragment = self.fragment.borrow();
+ let inline_axis_solver = AbsoluteAxisSolver {
+ containing_size: cbis,
+ padding_border_sum: pbm.padding_border_sums.inline,
+ computed_margin_start: pbm.margin.inline_start,
+ computed_margin_end: pbm.margin.inline_end,
+ avoid_negative_margin_start: true,
+ box_offsets: &shared_fragment.box_offsets.inline,
+ };
- let solve_inline_axis = |computed_size| {
- solve_axis(
- cbis,
- pbm.padding_border_sums.inline,
- pbm.margin.inline_start,
- pbm.margin.inline_end,
- /* avoid_negative_margin_start */ true,
- &shared_fragment.box_offsets.inline,
- computed_size,
- )
+ let block_axis_solver = AbsoluteAxisSolver {
+ containing_size: cbbs,
+ padding_border_sum: pbm.padding_border_sums.block,
+ computed_margin_start: pbm.margin.block_start,
+ computed_margin_end: pbm.margin.block_end,
+ avoid_negative_margin_start: false,
+ box_offsets: &shared_fragment.box_offsets.block,
};
- let solve_block_axis = |computed_size| {
- solve_axis(
- cbbs,
- pbm.padding_border_sums.block,
- pbm.margin.block_start,
- pbm.margin.block_end,
- /* avoid_negative_margin_start */ false,
- &shared_fragment.box_offsets.block,
- computed_size,
- )
+ let overconstrained = Vec2 {
+ inline: inline_axis_solver.is_overconstrained_for_size(computed_size.inline),
+ block: block_axis_solver.is_overconstrained_for_size(computed_size.block),
};
- let mut inline_axis = solve_inline_axis(computed_size.inline);
- let mut block_axis = solve_block_axis(computed_size.block);
+ let mut inline_axis = inline_axis_solver.solve_for_size(computed_size.inline);
+ let mut block_axis = block_axis_solver.solve_for_size(computed_size.block);
let mut positioning_context =
PositioningContext::new_for_style(absolutely_positioned_box.context.style()).unwrap();
@@ -519,7 +524,8 @@ impl HoistedAbsolutelyPositionedBox {
// https://drafts.csswg.org/css2/#min-max-widths (step 2)
if let Some(max) = max_size.inline {
if inline_size > max {
- inline_axis = solve_inline_axis(LengthOrAuto::LengthPercentage(max));
+ inline_axis = inline_axis_solver
+ .solve_for_size(LengthOrAuto::LengthPercentage(max));
inline_size = inline_axis.size.auto_is(|| unreachable!());
}
}
@@ -530,8 +536,8 @@ impl HoistedAbsolutelyPositionedBox {
// because a non-‘auto’ computed ‘inline-size’ always becomes the used value.
// https://drafts.csswg.org/css2/#min-max-widths (step 3)
if inline_size < min_size.inline {
- inline_axis =
- solve_inline_axis(LengthOrAuto::LengthPercentage(min_size.inline));
+ inline_axis = inline_axis_solver
+ .solve_for_size(LengthOrAuto::LengthPercentage(min_size.inline));
inline_size = inline_axis.size.auto_is(|| unreachable!());
}
@@ -581,7 +587,8 @@ impl HoistedAbsolutelyPositionedBox {
// https://drafts.csswg.org/css2/#min-max-heights (step 2)
if let Some(max) = max_size.block {
if result.content_size.block > max {
- block_axis = solve_block_axis(LengthOrAuto::LengthPercentage(max));
+ block_axis = block_axis_solver
+ .solve_for_size(LengthOrAuto::LengthPercentage(max));
result = try_layout(LengthOrAuto::LengthPercentage(max));
}
}
@@ -592,8 +599,8 @@ impl HoistedAbsolutelyPositionedBox {
// because a non-‘auto’ computed ‘block-size’ always becomes the used value.
// https://drafts.csswg.org/css2/#min-max-heights (step 3)
if result.content_size.block < min_size.block {
- block_axis =
- solve_block_axis(LengthOrAuto::LengthPercentage(min_size.block));
+ block_axis = block_axis_solver
+ .solve_for_size(LengthOrAuto::LengthPercentage(min_size.block));
result = try_layout(LengthOrAuto::LengthPercentage(min_size.block));
}
@@ -631,7 +638,10 @@ impl HoistedAbsolutelyPositionedBox {
size: content_size,
};
- BoxFragment::new(
+ let physical_overconstrained =
+ overconstrained.to_physical(containing_block.style.writing_mode);
+
+ BoxFragment::new_with_overconstrained(
absolutely_positioned_box.context.base_fragment_info(),
absolutely_positioned_box.context.style().clone(),
fragments,
@@ -640,6 +650,7 @@ impl HoistedAbsolutelyPositionedBox {
pbm.border,
margin,
CollapsedBlockMargins::zero(),
+ physical_overconstrained,
)
};
positioning_context.layout_collected_children(layout_context, &mut new_fragment);
@@ -661,97 +672,111 @@ struct AxisResult {
margin_end: Length,
}
-/// This unifies some of the parts in common in:
-///
-/// * https://drafts.csswg.org/css2/visudet.html#abs-non-replaced-width
-/// * https://drafts.csswg.org/css2/visudet.html#abs-non-replaced-height
-///
-/// … and:
-///
-/// * https://drafts.csswg.org/css2/visudet.html#abs-replaced-width
-/// * https://drafts.csswg.org/css2/visudet.html#abs-replaced-height
-///
-/// In the replaced case, `size` is never `Auto`.
-fn solve_axis(
+struct AbsoluteAxisSolver<'a> {
containing_size: Length,
padding_border_sum: Length,
computed_margin_start: LengthOrAuto,
computed_margin_end: LengthOrAuto,
avoid_negative_margin_start: bool,
- box_offsets: &AbsoluteBoxOffsets,
- computed_size: LengthOrAuto,
-) -> AxisResult {
- match box_offsets {
- AbsoluteBoxOffsets::StaticStart { start } => AxisResult {
- anchor: Anchor::Start(*start),
- size: computed_size,
- margin_start: computed_margin_start.auto_is(Length::zero),
- margin_end: computed_margin_end.auto_is(Length::zero),
- },
- AbsoluteBoxOffsets::Start { start } => AxisResult {
- anchor: Anchor::Start(start.percentage_relative_to(containing_size)),
- size: computed_size,
- margin_start: computed_margin_start.auto_is(Length::zero),
- margin_end: computed_margin_end.auto_is(Length::zero),
- },
- AbsoluteBoxOffsets::End { end } => AxisResult {
- anchor: Anchor::End(end.percentage_relative_to(containing_size)),
- size: computed_size,
- margin_start: computed_margin_start.auto_is(Length::zero),
- margin_end: computed_margin_end.auto_is(Length::zero),
- },
- AbsoluteBoxOffsets::Both { start, end } => {
- let start = start.percentage_relative_to(containing_size);
- let end = end.percentage_relative_to(containing_size);
-
- let margin_start;
- let margin_end;
- let used_size;
- if let LengthOrAuto::LengthPercentage(s) = computed_size {
- used_size = s;
- let margins = containing_size - start - end - padding_border_sum - s;
- match (computed_margin_start, computed_margin_end) {
- (LengthOrAuto::Auto, LengthOrAuto::Auto) => {
- if avoid_negative_margin_start && margins < Length::zero() {
- margin_start = Length::zero();
- margin_end = margins;
- } else {
- margin_start = margins / 2.;
- margin_end = margins / 2.;
- }
- },
- (LengthOrAuto::Auto, LengthOrAuto::LengthPercentage(end)) => {
- margin_start = margins - end;
- margin_end = end;
- },
- (LengthOrAuto::LengthPercentage(start), LengthOrAuto::Auto) => {
- margin_start = start;
- margin_end = margins - start;
- },
- (
- LengthOrAuto::LengthPercentage(start),
- LengthOrAuto::LengthPercentage(end),
- ) => {
- margin_start = start;
- margin_end = end;
- },
+ box_offsets: &'a AbsoluteBoxOffsets,
+}
+
+impl<'a> AbsoluteAxisSolver<'a> {
+ /// This unifies some of the parts in common in:
+ ///
+ /// * https://drafts.csswg.org/css2/visudet.html#abs-non-replaced-width
+ /// * https://drafts.csswg.org/css2/visudet.html#abs-non-replaced-height
+ ///
+ /// … and:
+ ///
+ /// * https://drafts.csswg.org/css2/visudet.html#abs-replaced-width
+ /// * https://drafts.csswg.org/css2/visudet.html#abs-replaced-height
+ ///
+ /// In the replaced case, `size` is never `Auto`.
+ fn solve_for_size(&self, computed_size: LengthOrAuto) -> AxisResult {
+ match self.box_offsets {
+ AbsoluteBoxOffsets::StaticStart { start } => AxisResult {
+ anchor: Anchor::Start(*start),
+ size: computed_size,
+ margin_start: self.computed_margin_start.auto_is(Length::zero),
+ margin_end: self.computed_margin_end.auto_is(Length::zero),
+ },
+ AbsoluteBoxOffsets::Start { start } => AxisResult {
+ anchor: Anchor::Start(start.percentage_relative_to(self.containing_size)),
+ size: computed_size,
+ margin_start: self.computed_margin_start.auto_is(Length::zero),
+ margin_end: self.computed_margin_end.auto_is(Length::zero),
+ },
+ AbsoluteBoxOffsets::End { end } => AxisResult {
+ anchor: Anchor::End(end.percentage_relative_to(self.containing_size)),
+ size: computed_size,
+ margin_start: self.computed_margin_start.auto_is(Length::zero),
+ margin_end: self.computed_margin_end.auto_is(Length::zero),
+ },
+ AbsoluteBoxOffsets::Both { start, end } => {
+ let start = start.percentage_relative_to(self.containing_size);
+ let end = end.percentage_relative_to(self.containing_size);
+
+ let margin_start;
+ let margin_end;
+ let used_size;
+ if let LengthOrAuto::LengthPercentage(s) = computed_size {
+ used_size = s;
+ let margins = self.containing_size - start - end - self.padding_border_sum - s;
+ match (self.computed_margin_start, self.computed_margin_end) {
+ (LengthOrAuto::Auto, LengthOrAuto::Auto) => {
+ if self.avoid_negative_margin_start && margins < Length::zero() {
+ margin_start = Length::zero();
+ margin_end = margins;
+ } else {
+ margin_start = margins / 2.;
+ margin_end = margins / 2.;
+ }
+ },
+ (LengthOrAuto::Auto, LengthOrAuto::LengthPercentage(end)) => {
+ margin_start = margins - end;
+ margin_end = end;
+ },
+ (LengthOrAuto::LengthPercentage(start), LengthOrAuto::Auto) => {
+ margin_start = start;
+ margin_end = margins - start;
+ },
+ (
+ LengthOrAuto::LengthPercentage(start),
+ LengthOrAuto::LengthPercentage(end),
+ ) => {
+ margin_start = start;
+ margin_end = end;
+ },
+ }
+ } else {
+ margin_start = self.computed_margin_start.auto_is(Length::zero);
+ margin_end = self.computed_margin_end.auto_is(Length::zero);
+
+ // This may be negative, but the caller will later effectively
+ // clamp it to ‘min-inline-size’ or ‘min-block-size’.
+ used_size = self.containing_size -
+ start -
+ end -
+ self.padding_border_sum -
+ margin_start -
+ margin_end;
+ };
+ AxisResult {
+ anchor: Anchor::Start(start),
+ size: LengthOrAuto::LengthPercentage(used_size),
+ margin_start,
+ margin_end,
}
- } else {
- margin_start = computed_margin_start.auto_is(Length::zero);
- margin_end = computed_margin_end.auto_is(Length::zero);
+ },
+ }
+ }
- // This may be negative, but the caller will later effectively
- // clamp it to ‘min-inline-size’ or ‘min-block-size’.
- used_size =
- containing_size - start - end - padding_border_sum - margin_start - margin_end
- };
- AxisResult {
- anchor: Anchor::Start(start),
- size: LengthOrAuto::LengthPercentage(used_size),
- margin_start,
- margin_end,
- }
- },
+ fn is_overconstrained_for_size(&self, computed_size: LengthOrAuto) -> bool {
+ !computed_size.is_auto() &&
+ self.box_offsets.both_specified() &&
+ !self.computed_margin_start.is_auto() &&
+ !self.computed_margin_end.is_auto()
}
}
@@ -796,6 +821,10 @@ pub(crate) fn relative_adjustement(
style: &ComputedValues,
containing_block: &ContainingBlock,
) -> Vec2<Length> {
+ // "If the height of the containing block is not specified explicitly (i.e.,
+ // it depends on content height), and this element is not absolutely
+ // positioned, the value computes to 'auto'.""
+ // https://www.w3.org/TR/CSS2/visudet.html#the-height-property
let cbis = containing_block.inline_size;
let cbbs = containing_block.block_size.auto_is(Length::zero);
let box_offsets = style
diff --git a/components/layout_2020/query.rs b/components/layout_2020/query.rs
index 769bb9641d8..74420ae2bb5 100644
--- a/components/layout_2020/query.rs
+++ b/components/layout_2020/query.rs
@@ -306,7 +306,18 @@ pub fn process_resolved_style_request<'dom>(
_ => return None,
};
- let positioned = style.get_box().position != Position::Static;
+ if style.get_box().position != Position::Static {
+ let resolved_insets =
+ || box_fragment.calculate_resolved_insets_if_positioned(containing_block);
+ match longhand_id {
+ LonghandId::Top => return Some(resolved_insets().top.to_css_string()),
+ LonghandId::Right => return Some(resolved_insets().right.to_css_string()),
+ LonghandId::Bottom => return Some(resolved_insets().bottom.to_css_string()),
+ LonghandId::Left => return Some(resolved_insets().left.to_css_string()),
+ _ => {},
+ }
+ }
+
let content_rect = box_fragment
.content_rect
.to_physical(box_fragment.style.writing_mode, &containing_block);
@@ -327,13 +338,6 @@ pub fn process_resolved_style_request<'dom>(
LonghandId::PaddingTop => Some(padding.top),
LonghandId::PaddingLeft => Some(padding.left),
LonghandId::PaddingRight => Some(padding.right),
- // TODO(mrobinson): These following values are often wrong, because these are not
- // exactly the "used value" for the positional properties. The real used values are
- // lost by the time the Fragment tree is constructed, so we may need to record them in
- // the tree to properly answer this query. That said, we can return an okayish value
- // sometimes simply by using the calculated position in the containing block.
- LonghandId::Top if positioned => Some(content_rect.origin.y),
- LonghandId::Left if positioned => Some(content_rect.origin.x),
_ => None,
}
.map(|value| value.to_css_string())
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html.ini
index 9f15e63c8d9..251c8f6c5f5 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html.ini
@@ -34,3 +34,39 @@
[.container > div 24]
expected: FAIL
+
+ [.container > div 2]
+ expected: FAIL
+
+ [.container > div 3]
+ expected: FAIL
+
+ [.container > div 4]
+ expected: FAIL
+
+ [.container > div 7]
+ expected: FAIL
+
+ [.container > div 9]
+ expected: FAIL
+
+ [.container > div 11]
+ expected: FAIL
+
+ [.container > div 14]
+ expected: FAIL
+
+ [.container > div 15]
+ expected: FAIL
+
+ [.container > div 16]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 21]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html.ini
index 6de34f368f1..00a3689c467 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html.ini
@@ -46,3 +46,27 @@
[.container > div 23]
expected: FAIL
+
+ [.container > div 4]
+ expected: FAIL
+
+ [.container > div 7]
+ expected: FAIL
+
+ [.container > div 9]
+ expected: FAIL
+
+ [.container > div 12]
+ expected: FAIL
+
+ [.container > div 16]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 21]
+ expected: FAIL
+
+ [.container > div 24]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html.ini
index f23bdda21e3..bff7f467a85 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html.ini
@@ -34,3 +34,39 @@
[.container > div 24]
expected: FAIL
+
+ [.container > div 2]
+ expected: FAIL
+
+ [.container > div 3]
+ expected: FAIL
+
+ [.container > div 4]
+ expected: FAIL
+
+ [.container > div 7]
+ expected: FAIL
+
+ [.container > div 9]
+ expected: FAIL
+
+ [.container > div 11]
+ expected: FAIL
+
+ [.container > div 14]
+ expected: FAIL
+
+ [.container > div 15]
+ expected: FAIL
+
+ [.container > div 16]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 21]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html.ini
index 4f09d72fc23..33a95e61976 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html.ini
@@ -46,3 +46,27 @@
[.container > div 23]
expected: FAIL
+
+ [.container > div 4]
+ expected: FAIL
+
+ [.container > div 7]
+ expected: FAIL
+
+ [.container > div 9]
+ expected: FAIL
+
+ [.container > div 12]
+ expected: FAIL
+
+ [.container > div 16]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 21]
+ expected: FAIL
+
+ [.container > div 24]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html.ini
index 0fcdd177ed0..cbb682aa9ca 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html.ini
@@ -46,3 +46,27 @@
[.container > div 23]
expected: FAIL
+
+ [.container > div 5]
+ expected: FAIL
+
+ [.container > div 8]
+ expected: FAIL
+
+ [.container > div 10]
+ expected: FAIL
+
+ [.container > div 12]
+ expected: FAIL
+
+ [.container > div 17]
+ expected: FAIL
+
+ [.container > div 20]
+ expected: FAIL
+
+ [.container > div 22]
+ expected: FAIL
+
+ [.container > div 24]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html.ini
index 1e0f35df40f..20e9970b2b5 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html.ini
@@ -46,3 +46,27 @@
[.container > div 23]
expected: FAIL
+
+ [.container > div 5]
+ expected: FAIL
+
+ [.container > div 8]
+ expected: FAIL
+
+ [.container > div 9]
+ expected: FAIL
+
+ [.container > div 12]
+ expected: FAIL
+
+ [.container > div 17]
+ expected: FAIL
+
+ [.container > div 20]
+ expected: FAIL
+
+ [.container > div 21]
+ expected: FAIL
+
+ [.container > div 24]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html.ini
index 5e9407d901d..f1042ded7b6 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html.ini
@@ -58,3 +58,27 @@
[.container > div 28]
expected: FAIL
+
+ [.container > div 5]
+ expected: FAIL
+
+ [.container > div 8]
+ expected: FAIL
+
+ [.container > div 10]
+ expected: FAIL
+
+ [.container > div 12]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 22]
+ expected: FAIL
+
+ [.container > div 24]
+ expected: FAIL
+
+ [.container > div 26]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html.ini
index 23d4519fbcc..40572dbccfc 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html.ini
@@ -58,3 +58,27 @@
[.container > div 28]
expected: FAIL
+
+ [.container > div 5]
+ expected: FAIL
+
+ [.container > div 8]
+ expected: FAIL
+
+ [.container > div 9]
+ expected: FAIL
+
+ [.container > div 12]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 22]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
+
+ [.container > div 26]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html.ini
index a8b41b96e70..7bdf31edac6 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html.ini
@@ -34,3 +34,39 @@
[.container > div 24]
expected: FAIL
+
+ [.container > div 1]
+ expected: FAIL
+
+ [.container > div 2]
+ expected: FAIL
+
+ [.container > div 5]
+ expected: FAIL
+
+ [.container > div 7]
+ expected: FAIL
+
+ [.container > div 9]
+ expected: FAIL
+
+ [.container > div 11]
+ expected: FAIL
+
+ [.container > div 13]
+ expected: FAIL
+
+ [.container > div 14]
+ expected: FAIL
+
+ [.container > div 17]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 21]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html.ini
index 04e162cafaf..325cd7b8c33 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html.ini
@@ -52,3 +52,21 @@
[.container > div 24]
expected: FAIL
+
+ [.container > div 7]
+ expected: FAIL
+
+ [.container > div 10]
+ expected: FAIL
+
+ [.container > div 11]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 22]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html.ini
index 46ba3268235..25e32718ee3 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html.ini
@@ -28,3 +28,45 @@
[.container > div 22]
expected: FAIL
+
+ [.container > div 1]
+ expected: FAIL
+
+ [.container > div 2]
+ expected: FAIL
+
+ [.container > div 5]
+ expected: FAIL
+
+ [.container > div 7]
+ expected: FAIL
+
+ [.container > div 9]
+ expected: FAIL
+
+ [.container > div 11]
+ expected: FAIL
+
+ [.container > div 12]
+ expected: FAIL
+
+ [.container > div 13]
+ expected: FAIL
+
+ [.container > div 14]
+ expected: FAIL
+
+ [.container > div 17]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 21]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
+
+ [.container > div 24]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html.ini
index 0c925cc8c38..42a8cdeaff2 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html.ini
@@ -46,3 +46,27 @@
[.container > div 21]
expected: FAIL
+
+ [.container > div 7]
+ expected: FAIL
+
+ [.container > div 10]
+ expected: FAIL
+
+ [.container > div 11]
+ expected: FAIL
+
+ [.container > div 12]
+ expected: FAIL
+
+ [.container > div 19]
+ expected: FAIL
+
+ [.container > div 22]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
+
+ [.container > div 24]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html.ini
index 5e0efe959a6..0dbbe7112d3 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html.ini
@@ -52,3 +52,21 @@
[.container > div 24]
expected: FAIL
+
+ [.container > div 8]
+ expected: FAIL
+
+ [.container > div 10]
+ expected: FAIL
+
+ [.container > div 11]
+ expected: FAIL
+
+ [.container > div 20]
+ expected: FAIL
+
+ [.container > div 22]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html.ini
index cf325fab510..0d4a746af2f 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html.ini
@@ -52,3 +52,21 @@
[.container > div 24]
expected: FAIL
+
+ [.container > div 8]
+ expected: FAIL
+
+ [.container > div 10]
+ expected: FAIL
+
+ [.container > div 11]
+ expected: FAIL
+
+ [.container > div 20]
+ expected: FAIL
+
+ [.container > div 22]
+ expected: FAIL
+
+ [.container > div 23]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/position-absolute-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/position-absolute-003.html.ini
index 1d51f307e09..514a578845e 100644
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/position-absolute-003.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos/position-absolute-003.html.ini
@@ -22,3 +22,15 @@
[.rect 16]
expected: FAIL
+
+ [.rect 1]
+ expected: FAIL
+
+ [.rect 2]
+ expected: FAIL
+
+ [.rect 3]
+ expected: FAIL
+
+ [.rect 4]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom/computed-style-005.html.ini b/tests/wpt/metadata-layout-2020/css/cssom/computed-style-005.html.ini
index eb59a9cdab5..1da4114a01c 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom/computed-style-005.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom/computed-style-005.html.ini
@@ -1,7 +1,3 @@
[computed-style-005.html]
- [relative_computed_left_and_right]
- expected: FAIL
-
[absolute_computed_left_and_right]
expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-absolute.html.ini b/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-absolute.html.ini
index 7b5b8af0734..4831f60d4bd 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-absolute.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-absolute.html.ini
@@ -2,75 +2,18 @@
[vertical-lr ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
@@ -83,222 +26,90 @@
[vertical-lr rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[horizontal-tb rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[horizontal-tb rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-lr rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-lr ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-rl ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-rl ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
[horizontal-tb rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
@@ -308,66 +119,27 @@
[vertical-lr ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-rl rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
[horizontal-tb rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-lr ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
@@ -377,42 +149,21 @@
[horizontal-tb rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-lr ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
@@ -422,42 +173,21 @@
[vertical-lr ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-lr rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[horizontal-tb rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
@@ -467,74 +197,20 @@
[horizontal-tb rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
[horizontal-tb rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[horizontal-tb ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-fixed.html.ini b/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-fixed.html.ini
index 6accdda38d8..9498584170e 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-fixed.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-fixed.html.ini
@@ -2,75 +2,18 @@
[vertical-lr ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
@@ -83,222 +26,90 @@
[vertical-lr rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[horizontal-tb rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[horizontal-tb rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-lr rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-lr ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-rl ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-rl ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
[horizontal-tb rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
@@ -308,66 +119,27 @@
[vertical-lr ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-rl rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
[horizontal-tb rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-lr ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-lr rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[vertical-rl ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
@@ -377,42 +149,21 @@
[horizontal-tb rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-lr ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-rl ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
@@ -422,42 +173,21 @@
[vertical-lr ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[vertical-lr rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-rl ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [horizontal-tb ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[vertical-lr rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[horizontal-tb rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
[horizontal-tb ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
@@ -467,74 +197,20 @@
[horizontal-tb rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [horizontal-tb rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-rl ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
[vertical-rl rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
- [vertical-lr ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained]
expected: FAIL
[horizontal-tb rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
- [vertical-lr ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
[horizontal-tb rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
expected: FAIL
[horizontal-tb ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained]
expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-relative.html.ini b/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-relative.html.ini
deleted file mode 100644
index 5fbcc1e89ee..00000000000
--- a/tests/wpt/metadata-layout-2020/css/cssom/getComputedStyle-insets-relative.html.ini
+++ /dev/null
@@ -1,432 +0,0 @@
-[getComputedStyle-insets-relative.html]
- [vertical-lr ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl ltr inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-rl rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl rtl - Percentages are absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl ltr inside vertical-rl ltr - Percentages are absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside vertical-lr rtl - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-rl rtl inside vertical-rl ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [horizontal-tb rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value]
- expected: FAIL
-
- [vertical-lr ltr inside vertical-lr ltr - calc() is absolutized into pixels]
- expected: FAIL
-
- [vertical-lr rtl inside horizontal-tb ltr - Percentages are absolutized into pixels]
- expected: FAIL