aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2020-05-06 00:51:59 -0400
committerJosh Matthews <josh@joshmatthews.net>2020-07-27 20:06:53 -0400
commitd8b4dab4e38c2928f034248e158e8bf9b5ad60d6 (patch)
tree59f48ba368a55b7c37f147d9334ba525e7d2cb1e
parentc7bdb1bcc0cd4985277579b7585d1abbbe489287 (diff)
downloadservo-d8b4dab4e38c2928f034248e158e8bf9b5ad60d6.tar.gz
servo-d8b4dab4e38c2928f034248e158e8bf9b5ad60d6.zip
Implement basic white-space: pre support for layout 2020.
-rw-r--r--components/layout_2020/flow/construct.rs51
-rw-r--r--components/layout_2020/flow/inline.rs22
-rw-r--r--components/style/properties/longhands/inherited_text.mako.rs1
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/abspos/hypothetical-inline-alone-on-second-line.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/colors/color-applies-to-008.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/colors/color-applies-to-015.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/css1/c562-white-sp-000.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/float-003.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/float-no-content-beside-001.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-vertical-004.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-171.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-173.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-newline-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-white-space-002.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/margin-padding-clear/padding-percentage-inherit-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-replaced-width-006.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inline-replaced-width-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inline-replaced-width-006.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inlines-016.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/positioning/absolute-non-replaced-height-008.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/positioning/position-static-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/tables/table-anonymous-objects-009.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/tables/table-anonymous-objects-010.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-004.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-applies-to-003.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-013.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-016.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-017.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-018.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-046.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-047.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-052.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/visuren/anonymous-boxes-001b.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-027.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-028.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-030.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-031.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-004.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-005.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-006.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-text-decor/text-decoration-subelements-001.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/offsetTopLeft-border-box.html.ini85
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom/serialize-values.html.ini17
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/br.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/input_whitespace.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/line_breaking_whitespace_collapse_a.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/many_brs_a.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/white-space-pre-line.htm.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/white_space_intrinsic_sizes_a.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/whitespace_pre.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-005.htm.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-006.htm.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-007.htm.ini2
-rw-r--r--tests/wpt/mozilla/meta-layout-2020/mozilla/hit_test_multiple_sc.html.ini4
55 files changed, 167 insertions, 113 deletions
diff --git a/components/layout_2020/flow/construct.rs b/components/layout_2020/flow/construct.rs
index 00bcfdd2586..73aa0c151b5 100644
--- a/components/layout_2020/flow/construct.rs
+++ b/components/layout_2020/flow/construct.rs
@@ -20,6 +20,7 @@ use rayon_croissant::ParallelIteratorExt;
use servo_arc::Arc;
use std::borrow::Cow;
use std::convert::{TryFrom, TryInto};
+use style::computed_values::white_space::T as WhiteSpace;
use style::properties::longhands::list_style_position::computed_value::T as ListStylePosition;
use style::properties::ComputedValues;
use style::selector_parser::PseudoElement;
@@ -293,7 +294,8 @@ where
}
fn handle_text(&mut self, info: &NodeAndStyleInfo<Node>, input: Cow<'dom, str>) {
- let (leading_whitespace, mut input) = self.handle_leading_whitespace(&input);
+ let white_space = info.style.get_inherited_text().white_space;
+ let (leading_whitespace, mut input) = self.handle_leading_whitespace(&input, white_space);
if leading_whitespace || !input.is_empty() {
// This text node should be pushed either to the next ongoing
// inline level box with the parent style of that inline level box
@@ -323,20 +325,37 @@ where
if leading_whitespace {
output.push(' ')
}
- loop {
- if let Some(i) = input.bytes().position(|b| b.is_ascii_whitespace()) {
- let (non_whitespace, rest) = input.split_at(i);
- output.push_str(non_whitespace);
- output.push(' ');
- if let Some(i) = rest.bytes().position(|b| !b.is_ascii_whitespace()) {
- input = &rest[i..];
+
+ match (
+ white_space.preserve_spaces(),
+ white_space.preserve_newlines(),
+ ) {
+ (true, true) => {
+ output.push_str(input);
+ },
+
+ (true, false) => unreachable!(),
+
+ (false, preserve_newlines) => loop {
+ if let Some(i) = input.bytes().position(|b| {
+ b.is_ascii_whitespace() && (!preserve_newlines || b != b'\n')
+ }) {
+ let (non_whitespace, rest) = input.split_at(i);
+ output.push_str(non_whitespace);
+ output.push(' ');
+
+ if let Some(i) = rest.bytes().position(|b| {
+ !b.is_ascii_whitespace() || (preserve_newlines && b == b'\n')
+ }) {
+ input = &rest[i..];
+ } else {
+ break;
+ }
} else {
+ output.push_str(input);
break;
}
- } else {
- output.push_str(input);
- break;
- }
+ },
}
}
@@ -359,10 +378,14 @@ where
///
/// * Whether this text run has preserved (non-collapsible) leading whitespace
/// * The contents starting at the first non-whitespace character (or the empty string)
- fn handle_leading_whitespace<'text>(&mut self, text: &'text str) -> (bool, &'text str) {
+ fn handle_leading_whitespace<'text>(
+ &mut self,
+ text: &'text str,
+ white_space: WhiteSpace,
+ ) -> (bool, &'text str) {
// FIXME: this is only an approximation of
// https://drafts.csswg.org/css2/text.html#white-space-model
- if !text.starts_with(|c: char| c.is_ascii_whitespace()) {
+ if !text.starts_with(|c: char| c.is_ascii_whitespace()) || white_space.preserve_spaces() {
return (false, text);
}
diff --git a/components/layout_2020/flow/inline.rs b/components/layout_2020/flow/inline.rs
index f0d0f51ba50..d0b91aef506 100644
--- a/components/layout_2020/flow/inline.rs
+++ b/components/layout_2020/flow/inline.rs
@@ -756,13 +756,15 @@ impl TextRun {
let mut glyphs = vec![];
let mut advance_width = Length::zero();
let mut last_break_opportunity = None;
+ let mut force_line_break = false;
loop {
let next = runs.next();
- if next
- .as_ref()
- .map_or(true, |run| run.glyph_store.is_whitespace())
- {
- if advance_width > ifc.containing_block.inline_size - ifc.inline_position {
+ if next.as_ref().map_or(true, |run| {
+ run.glyph_store.is_whitespace() || force_line_break
+ }) {
+ if advance_width > ifc.containing_block.inline_size - ifc.inline_position ||
+ force_line_break
+ {
if let Some((len, width, iter)) = last_break_opportunity.take() {
glyphs.truncate(len);
advance_width = width;
@@ -774,6 +776,14 @@ impl TextRun {
if let Some(run) = next {
if run.glyph_store.is_whitespace() {
last_break_opportunity = Some((glyphs.len(), advance_width, runs.clone()));
+ if self.text.as_bytes().get(run.range.end().to_usize() - 1) == Some(&b'\n')
+ {
+ force_line_break = self
+ .parent_style
+ .get_inherited_text()
+ .white_space
+ .preserve_newlines();
+ }
}
glyphs.push(run.glyph_store.clone());
advance_width += Length::from(run.glyph_store.total_advance());
@@ -812,7 +822,7 @@ impl TextRun {
glyphs,
text_decoration_line: ifc.current_nesting_level.text_decoration_line,
}));
- if runs.as_slice().is_empty() {
+ if runs.as_slice().is_empty() && !force_line_break {
break;
} else {
// New line
diff --git a/components/style/properties/longhands/inherited_text.mako.rs b/components/style/properties/longhands/inherited_text.mako.rs
index 41614a04d92..6587627a58f 100644
--- a/components/style/properties/longhands/inherited_text.mako.rs
+++ b/components/style/properties/longhands/inherited_text.mako.rs
@@ -186,7 +186,6 @@ ${helpers.predefined_type(
name="white-space"
values="normal pre nowrap pre-wrap pre-line"
engines="gecko servo-2013 servo-2020",
- servo_2020_pref="layout.2020.unimplemented",
extra_gecko_values="break-spaces -moz-pre-space"
gecko_enum_prefix="StyleWhiteSpace"
needs_conversion="True"
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/abspos/hypothetical-inline-alone-on-second-line.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/abspos/hypothetical-inline-alone-on-second-line.html.ini
deleted file mode 100644
index df17fc5f182..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/abspos/hypothetical-inline-alone-on-second-line.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[hypothetical-inline-alone-on-second-line.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/colors/color-applies-to-008.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/colors/color-applies-to-008.xht.ini
deleted file mode 100644
index 09b26767921..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/colors/color-applies-to-008.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[color-applies-to-008.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/colors/color-applies-to-015.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/colors/color-applies-to-015.xht.ini
deleted file mode 100644
index c5be6b4fcad..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/colors/color-applies-to-015.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[color-applies-to-015.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/css1/c562-white-sp-000.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/css1/c562-white-sp-000.xht.ini
deleted file mode 100644
index f256b9fa665..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/css1/c562-white-sp-000.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[c562-white-sp-000.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/float-003.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/float-003.xht.ini
deleted file mode 100644
index d7b0c2ca89d..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats-clear/float-003.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[float-003.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/float-no-content-beside-001.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/float-no-content-beside-001.html.ini
new file mode 100644
index 00000000000..7b131324eca
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/float-no-content-beside-001.html.ini
@@ -0,0 +1,2 @@
+[float-no-content-beside-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-vertical-004.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-vertical-004.xht.ini
new file mode 100644
index 00000000000..6036454a24a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/floats-placement-vertical-004.xht.ini
@@ -0,0 +1,2 @@
+[floats-placement-vertical-004.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini
new file mode 100644
index 00000000000..4bfb0c2053a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-004.html]
+ [Miss float below something else]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-171.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-171.xht.ini
deleted file mode 100644
index 17841b6e37d..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-171.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[content-171.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-173.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-173.xht.ini
new file mode 100644
index 00000000000..27d146b4f76
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-173.xht.ini
@@ -0,0 +1,2 @@
+[content-173.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-newline-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-newline-001.xht.ini
deleted file mode 100644
index 898b224f106..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-newline-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[content-newline-001.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-white-space-002.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-white-space-002.xht.ini
new file mode 100644
index 00000000000..d9895725434
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/generated-content/content-white-space-002.xht.ini
@@ -0,0 +1,2 @@
+[content-white-space-002.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/margin-padding-clear/padding-percentage-inherit-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/margin-padding-clear/padding-percentage-inherit-001.xht.ini
deleted file mode 100644
index f3c8ca13fcc..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/margin-padding-clear/padding-percentage-inherit-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[padding-percentage-inherit-001.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-replaced-width-006.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-replaced-width-006.xht.ini
deleted file mode 100644
index 6b28c0a7732..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-replaced-width-006.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[block-replaced-width-006.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inline-replaced-width-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inline-replaced-width-001.xht.ini
deleted file mode 100644
index f90e509741a..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inline-replaced-width-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-replaced-width-001.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inline-replaced-width-006.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inline-replaced-width-006.xht.ini
deleted file mode 100644
index 3b1738d27e4..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inline-replaced-width-006.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-replaced-width-006.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inlines-016.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inlines-016.xht.ini
deleted file mode 100644
index 08323ae34d3..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/inlines-016.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inlines-016.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/positioning/absolute-non-replaced-height-008.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/positioning/absolute-non-replaced-height-008.xht.ini
deleted file mode 100644
index a8181f873e1..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/positioning/absolute-non-replaced-height-008.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[absolute-non-replaced-height-008.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/positioning/position-static-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/positioning/position-static-001.xht.ini
deleted file mode 100644
index b8665fc1939..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/positioning/position-static-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-static-001.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/tables/table-anonymous-objects-009.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/tables/table-anonymous-objects-009.xht.ini
new file mode 100644
index 00000000000..91d95f9df47
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/tables/table-anonymous-objects-009.xht.ini
@@ -0,0 +1,2 @@
+[table-anonymous-objects-009.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/tables/table-anonymous-objects-010.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/tables/table-anonymous-objects-010.xht.ini
new file mode 100644
index 00000000000..12c3a9c74b3
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/tables/table-anonymous-objects-010.xht.ini
@@ -0,0 +1,2 @@
+[table-anonymous-objects-010.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-004.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-004.xht.ini
deleted file mode 100644
index d2813834d88..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-004.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-004.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-applies-to-003.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-applies-to-003.xht.ini
deleted file mode 100644
index a577c292396..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-applies-to-003.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-applies-to-003.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-013.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-013.xht.ini
deleted file mode 100644
index d4163fc0bd8..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-013.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-processing-013.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-016.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-016.xht.ini
deleted file mode 100644
index 8ce343d746f..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-016.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-processing-016.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-017.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-017.xht.ini
deleted file mode 100644
index df0a0b0c0a4..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-017.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-processing-017.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-018.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-018.xht.ini
deleted file mode 100644
index f6ed836f1da..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-018.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-processing-018.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-046.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-046.xht.ini
deleted file mode 100644
index a4fb2e4fe18..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-046.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-processing-046.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-047.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-047.xht.ini
deleted file mode 100644
index 8046ab670c7..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-047.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-processing-047.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-052.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-052.xht.ini
deleted file mode 100644
index f981ec7b5d5..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/text/white-space-processing-052.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-processing-052.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/visuren/anonymous-boxes-001b.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/visuren/anonymous-boxes-001b.xht.ini
deleted file mode 100644
index 67b06807a43..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/visuren/anonymous-boxes-001b.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[anonymous-boxes-001b.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-027.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-027.html.ini
deleted file mode 100644
index 5c1f927e20e..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-027.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[background-size-027.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-028.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-028.html.ini
deleted file mode 100644
index baa377e6a97..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-028.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[background-size-028.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-030.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-030.html.ini
deleted file mode 100644
index 8f67471d49f..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-030.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[background-size-030.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-031.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-031.html.ini
deleted file mode 100644
index 227740a1cbb..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-size-031.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[background-size-031.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-004.html.ini
new file mode 100644
index 00000000000..7df62ee8875
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-004.html.ini
@@ -0,0 +1,2 @@
+[anonymous-flex-item-004.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-005.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-005.html.ini
new file mode 100644
index 00000000000..f5db1aa1610
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-005.html.ini
@@ -0,0 +1,2 @@
+[anonymous-flex-item-005.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-006.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-006.html.ini
new file mode 100644
index 00000000000..5865ea15bc8
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/anonymous-flex-item-006.html.ini
@@ -0,0 +1,2 @@
+[anonymous-flex-item-006.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-text-decor/text-decoration-subelements-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-text-decor/text-decoration-subelements-001.html.ini
deleted file mode 100644
index e1bbdb7fc9d..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-text-decor/text-decoration-subelements-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[text-decoration-subelements-001.html]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/offsetTopLeft-border-box.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/offsetTopLeft-border-box.html.ini
new file mode 100644
index 00000000000..3bd0a5266dd
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/offsetTopLeft-border-box.html.ini
@@ -0,0 +1,85 @@
+[offsetTopLeft-border-box.html]
+ [container: 11]
+ expected: FAIL
+
+ [container: 10]
+ expected: FAIL
+
+ [container: 13]
+ expected: FAIL
+
+ [container: 12]
+ expected: FAIL
+
+ [container: 15]
+ expected: FAIL
+
+ [container: 14]
+ expected: FAIL
+
+ [container: 17]
+ expected: FAIL
+
+ [container: 16]
+ expected: FAIL
+
+ [container: 19]
+ expected: FAIL
+
+ [container: 18]
+ expected: FAIL
+
+ [container: 9]
+ expected: FAIL
+
+ [container: 8]
+ expected: FAIL
+
+ [container: 1]
+ expected: FAIL
+
+ [container: 0]
+ expected: FAIL
+
+ [container: 3]
+ expected: FAIL
+
+ [container: 2]
+ expected: FAIL
+
+ [container: 5]
+ expected: FAIL
+
+ [container: 4]
+ expected: FAIL
+
+ [container: 7]
+ expected: FAIL
+
+ [container: 6]
+ expected: FAIL
+
+ [container: 20]
+ expected: FAIL
+
+ [container: 21]
+ expected: FAIL
+
+ [container: 22]
+ expected: FAIL
+
+ [container: 23]
+ expected: FAIL
+
+ [container: 24]
+ expected: FAIL
+
+ [container: 25]
+ expected: FAIL
+
+ [container: 26]
+ expected: FAIL
+
+ [container: 27]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/cssom/serialize-values.html.ini b/tests/wpt/metadata-layout-2020/css/cssom/serialize-values.html.ini
index 0f09476f884..21832fe8ef4 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom/serialize-values.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom/serialize-values.html.ini
@@ -23,15 +23,9 @@
[page-break-before: always]
expected: FAIL
- [white-space: inherit]
- expected: FAIL
-
[page-break-after: inherit]
expected: FAIL
- [white-space: nowrap]
- expected: FAIL
-
[page-break-before: left]
expected: FAIL
@@ -218,9 +212,6 @@
[display: table-cell]
expected: FAIL
- [white-space: pre]
- expected: FAIL
-
[text-indent: 5%]
expected: FAIL
@@ -263,7 +254,7 @@
[clear: both]
expected: FAIL
- [white-space: pre-wrap]
+ [list-style-image: url(http://localhost/)]
expected: FAIL
[outline-width: 0px]
@@ -332,9 +323,6 @@
[vertical-align: 1px]
expected: FAIL
- [white-space: pre-line]
- expected: FAIL
-
[display: table-column]
expected: FAIL
@@ -395,9 +383,6 @@
[float: none]
expected: FAIL
- [white-space: normal]
- expected: FAIL
-
[list-style-type: lower-roman]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/br.html.ini b/tests/wpt/mozilla/meta-layout-2020/css/br.html.ini
deleted file mode 100644
index d4cc92b6bf0..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/br.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[br.html]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/input_whitespace.html.ini b/tests/wpt/mozilla/meta-layout-2020/css/input_whitespace.html.ini
deleted file mode 100644
index d4d47c4946b..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/input_whitespace.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[input_whitespace.html]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/line_breaking_whitespace_collapse_a.html.ini b/tests/wpt/mozilla/meta-layout-2020/css/line_breaking_whitespace_collapse_a.html.ini
deleted file mode 100644
index b4de5d5d47d..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/line_breaking_whitespace_collapse_a.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line_breaking_whitespace_collapse_a.html]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/many_brs_a.html.ini b/tests/wpt/mozilla/meta-layout-2020/css/many_brs_a.html.ini
deleted file mode 100644
index cc004c9dffe..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/many_brs_a.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[many_brs_a.html]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/white-space-pre-line.htm.ini b/tests/wpt/mozilla/meta-layout-2020/css/white-space-pre-line.htm.ini
new file mode 100644
index 00000000000..b549416814c
--- /dev/null
+++ b/tests/wpt/mozilla/meta-layout-2020/css/white-space-pre-line.htm.ini
@@ -0,0 +1,2 @@
+[white-space-pre-line.htm]
+ expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/white_space_intrinsic_sizes_a.html.ini b/tests/wpt/mozilla/meta-layout-2020/css/white_space_intrinsic_sizes_a.html.ini
deleted file mode 100644
index 1330b71867f..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/white_space_intrinsic_sizes_a.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white_space_intrinsic_sizes_a.html]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/whitespace_pre.html.ini b/tests/wpt/mozilla/meta-layout-2020/css/whitespace_pre.html.ini
deleted file mode 100644
index 891465ffedf..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/whitespace_pre.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[whitespace_pre.html]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-005.htm.ini b/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-005.htm.ini
deleted file mode 100644
index 7f36a3f3fd4..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-005.htm.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[word-break-keep-all-005.htm]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-006.htm.ini b/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-006.htm.ini
deleted file mode 100644
index 65ad4524b55..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-006.htm.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[word-break-keep-all-006.htm]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-007.htm.ini b/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-007.htm.ini
deleted file mode 100644
index 48e6b6c94b5..00000000000
--- a/tests/wpt/mozilla/meta-layout-2020/css/word-break-keep-all-007.htm.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[word-break-keep-all-007.htm]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta-layout-2020/mozilla/hit_test_multiple_sc.html.ini b/tests/wpt/mozilla/meta-layout-2020/mozilla/hit_test_multiple_sc.html.ini
new file mode 100644
index 00000000000..8ed8088a59f
--- /dev/null
+++ b/tests/wpt/mozilla/meta-layout-2020/mozilla/hit_test_multiple_sc.html.ini
@@ -0,0 +1,4 @@
+[hit_test_multiple_sc.html]
+ [Hit testing works for following stacking contexts]
+ expected: FAIL
+