aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout_2020/display_list/stacking_context.rs32
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/css1/c414-flt-wrap-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/clear-clearance-calculation-003.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-001.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-002.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-003.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-008.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-001.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-002.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-004.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-center.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-end.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-around.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-between.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-start.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/flexbox_flex-formatting-interop.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-position/position-absolute-dynamic-static-position-floats-004.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-004.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-009.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-010.html.ini2
21 files changed, 35 insertions, 38 deletions
diff --git a/components/layout_2020/display_list/stacking_context.rs b/components/layout_2020/display_list/stacking_context.rs
index 63fefd0c4f4..a231ab088a7 100644
--- a/components/layout_2020/display_list/stacking_context.rs
+++ b/components/layout_2020/display_list/stacking_context.rs
@@ -200,6 +200,11 @@ pub(crate) enum StackingContextType {
PseudoAtomicInline,
}
+/// A [StackingContext] represents either a stacking context or a stacking
+/// container according to the definitions outlined in
+/// <https://drafts.csswg.org/css-position-4/#painting-order>
+/// Stacking containers are sometimes called "pseudo-stacking contexts"
+/// in the Servo source.
pub struct StackingContext {
/// The spatial id of this fragment. This is used to properly handle
/// things like preserve-3d.
@@ -218,7 +223,19 @@ pub struct StackingContext {
/// of this stacking context.
stacking_contexts: Vec<StackingContext>,
- /// All float pseudo stacking context children of this stacking context.
+ /// All float stacking container children of this stacking context.
+ /// These are stored separately because they should not be passed up to
+ /// their real stacking context ancestors. From the definition of stacking
+ /// containers from <https://drafts.csswg.org/css-position-4#painting-order>:
+ ///
+ /// > To paint a stacking container, given a box root and a canvas canvas:
+ /// > 1. Paint a stacking context given root and canvas, treating root as
+ /// > if it created a new stacking context, but omitting any positioned
+ /// > descendants or descendants that actually create a stacking context
+ /// > (letting the parent stacking context paint them, instead).
+ ///
+ /// Note that all stacking containers / pseudo stacking contexts are passed up
+ /// to parent stacking contexts, except in the case of floats.
float_stacking_contexts: Vec<StackingContext>,
}
@@ -249,6 +266,15 @@ impl StackingContext {
}
}
+ /// Add a child stacking context to this stacking context.
+ fn add_stacking_context(&mut self, stacking_context: StackingContext) {
+ if stacking_context.context_type == StackingContextType::PseudoFloat {
+ self.float_stacking_contexts.push(stacking_context);
+ } else {
+ self.stacking_contexts.push(stacking_context);
+ }
+ }
+
fn z_index(&self) -> i32 {
self.initializing_fragment_style
.as_ref()
@@ -754,9 +780,7 @@ impl BoxFragment {
}
child_stacking_context.sort();
- parent_stacking_context
- .stacking_contexts
- .push(child_stacking_context);
+ parent_stacking_context.add_stacking_context(child_stacking_context);
parent_stacking_context
.stacking_contexts
.append(&mut stolen_children);
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/css1/c414-flt-wrap-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/css1/c414-flt-wrap-001.xht.ini
new file mode 100644
index 00000000000..b07643272b6
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/css1/c414-flt-wrap-001.xht.ini
@@ -0,0 +1,2 @@
+[c414-flt-wrap-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/clear-clearance-calculation-003.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/clear-clearance-calculation-003.xht.ini
deleted file mode 100644
index 73ce7f8a1eb..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/clear-clearance-calculation-003.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clear-clearance-calculation-003.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-001.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-001.html.ini
deleted file mode 100644
index 17aa43d18b1..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[floats-placement-001.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-002.html.ini
deleted file mode 100644
index 4e00856c08e..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[floats-placement-002.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-003.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-003.html.ini
deleted file mode 100644
index 90225d8f4d4..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[floats-placement-003.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-008.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-008.html.ini
deleted file mode 100644
index 5a1e705388f..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-008.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[floats-placement-008.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-001.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-001.html.ini
new file mode 100644
index 00000000000..0842d0b5727
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-001.html.ini
@@ -0,0 +1,3 @@
+[hit-test-floats-001.html]
+ [hit-test-floats-001]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-001.xht.ini
deleted file mode 100644
index 51b3c04a7f4..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[stack-floats-001.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-002.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-002.xht.ini
deleted file mode 100644
index 413e005eeda..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-002.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[stack-floats-002.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-004.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-004.xht.ini
deleted file mode 100644
index 0e8029cf3cb..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/zindex/stack-floats-004.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[stack-floats-004.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-center.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-center.html.ini
deleted file mode 100644
index dcb5578932d..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-center.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-align-content-center.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-end.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-end.html.ini
deleted file mode 100644
index d813a3dbc90..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-end.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-align-content-end.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-around.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-around.html.ini
deleted file mode 100644
index 0df689e3f18..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-around.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-align-content-space-around.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-between.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-between.html.ini
deleted file mode 100644
index e10b2f33ae2..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-space-between.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-align-content-space-between.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-start.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-start.html.ini
deleted file mode 100644
index 19e606aada8..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-align-content-start.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-align-content-start.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flexbox_flex-formatting-interop.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flexbox_flex-formatting-interop.html.ini
new file mode 100644
index 00000000000..0a5916356e7
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/flexbox_flex-formatting-interop.html.ini
@@ -0,0 +1,2 @@
+[flexbox_flex-formatting-interop.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-dynamic-static-position-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-dynamic-static-position-floats-004.html.ini
deleted file mode 100644
index e488c064bb1..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-dynamic-static-position-floats-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-absolute-dynamic-static-position-floats-004.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-004.html.ini
deleted file mode 100644
index 972f6697b03..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-level-absolute-in-block-level-context-004.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-009.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-009.html.ini
deleted file mode 100644
index 0653a572396..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-009.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-level-absolute-in-block-level-context-009.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-010.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-010.html.ini
deleted file mode 100644
index 2035850bdc8..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-position/static-position/inline-level-absolute-in-block-level-context-010.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-level-absolute-in-block-level-context-010.html]
- expected: FAIL