diff options
author | Martin Robinson <mrobinson@igalia.com> | 2023-05-03 17:53:27 +0200 |
---|---|---|
committer | Martin Robinson <mrobinson@igalia.com> | 2023-05-05 06:36:12 +0200 |
commit | 932dc72402905cf9597b864199fd85fdb491c287 (patch) | |
tree | 4b93a5172ffc5f8783b1e3e8a53654c484591202 | |
parent | 4e37d07ea4f2bba124f78f17873fbb02c66d1cdb (diff) | |
download | servo-932dc72402905cf9597b864199fd85fdb491c287.tar.gz servo-932dc72402905cf9597b864199fd85fdb491c287.zip |
Fix an assertion failure in Layout 2020
The recent changes to containing blocks, exposed an issue in the
StyleExt trait:
- When deciding whether an element creates a reference frame, whether
or not it is a non-replaced inline is taken into account when
determining if it has a transform.
- When deciding whether an element creates a stacking context for all
descendants, whether or not it is a non-replaced inline is *not*
taken into account when determining if it has a transform.
In both cases, elements that are inline should not be considered to have
transforms. This commit fixes that issue as well as making it so that
inlines cannot be transformed. Note that is also breaks transforms on
replaced elements, but that functionality was fairly half-baked due to
the inconsistent determination of transforms.
13 files changed, 28 insertions, 17 deletions
diff --git a/components/layout_2020/style_ext.rs b/components/layout_2020/style_ext.rs index c1d2f47e2fa..56a1be3eca5 100644 --- a/components/layout_2020/style_ext.rs +++ b/components/layout_2020/style_ext.rs @@ -336,8 +336,22 @@ impl ComputedValuesExt for ComputedValues { ) } - /// Returns true if this style has a transform, or perspective property set. + /// Returns true if this style has a transform, or perspective property set and + /// it applies to this element. fn has_transform_or_perspective(&self) -> bool { + // "A transformable element is an element in one of these categories: + // * all elements whose layout is governed by the CSS box model except for + // non-replaced inline boxes, table-column boxes, and table-column-group + // boxes, + // * all SVG paint server elements, the clipPath element and SVG renderable + // elements with the exception of any descendant element of text content + // elements." + // https://drafts.csswg.org/css-transforms/#transformable-element + // FIXME(mrobinson): Properly handle tables and replaced elements here. + if self.get_box().display.is_inline_flow() { + return false; + } + !self.get_box().transform.0.is_empty() || self.get_box().perspective != Perspective::None } @@ -414,9 +428,7 @@ impl ComputedValuesExt for ComputedValues { /// Note that this also implies that it establishes a containing block /// for absolute descendants (`position: absolute`). fn establishes_containing_block_for_all_descendants(&self) -> bool { - if self.get_box().display.outside() != stylo::DisplayOutside::Inline && - self.has_transform_or_perspective() - { + if self.has_transform_or_perspective() { return true; } diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini deleted file mode 100644 index bbb2e5f171e..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[css-transforms-3d-on-anonymous-block-001.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/perspective-untransformable-no-stacking-context.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/perspective-untransformable-no-stacking-context.html.ini deleted file mode 100644 index f7dd637e965..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-transforms/perspective-untransformable-no-stacking-context.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[perspective-untransformable-no-stacking-context.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-applies-to-002.xht.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-applies-to-002.xht.ini deleted file mode 100644 index 27a2c3c0916..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-applies-to-002.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[transform-applies-to-002.xht] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-inline-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-inline-001.html.ini deleted file mode 100644 index 677683d5adb..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-inline-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[transform-inline-001.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-001.html.ini new file mode 100644 index 00000000000..2d6426ebe5a --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-001.html.ini @@ -0,0 +1,2 @@ +[transform-table-001.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-002.html.ini new file mode 100644 index 00000000000..dcbba9fdd2b --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-002.html.ini @@ -0,0 +1,2 @@ +[transform-table-002.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-003.html.ini new file mode 100644 index 00000000000..8a99504ae7e --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-003.html.ini @@ -0,0 +1,2 @@ +[transform-table-003.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-004.html.ini new file mode 100644 index 00000000000..e0dc22c67a7 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-004.html.ini @@ -0,0 +1,2 @@ +[transform-table-004.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-005.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-005.html.ini new file mode 100644 index 00000000000..8c65ab23535 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-table-005.html.ini @@ -0,0 +1,2 @@ +[transform-table-005.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform3d-image-scale-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform3d-image-scale-001.html.ini new file mode 100644 index 00000000000..11da067d959 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform3d-image-scale-001.html.ini @@ -0,0 +1,2 @@ +[transform3d-image-scale-001.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/filter-cb-abspos-inline-002.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/filter-cb-abspos-inline-002.html.ini deleted file mode 100644 index 83748f6b1c5..00000000000 --- a/tests/wpt/metadata-layout-2020/css/filter-effects/filter-cb-abspos-inline-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[filter-cb-abspos-inline-002.html] - expected: FAIL diff --git a/tests/wpt/mozilla/meta-layout-2020/mozilla/element_parentOffset.html.ini b/tests/wpt/mozilla/meta-layout-2020/mozilla/element_parentOffset.html.ini deleted file mode 100644 index 0db83ebfda4..00000000000 --- a/tests/wpt/mozilla/meta-layout-2020/mozilla/element_parentOffset.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[element_parentOffset.html] - [element_parentOffset] - expected: FAIL |