summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-content
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /testing/web-platform/tests/css/css-content
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/css/css-content')
-rw-r--r--testing/web-platform/tests/css/css-content/META.yml3
-rw-r--r--testing/web-platform/tests/css/css-content/attr-case-sensitivity-001.html15
-rw-r--r--testing/web-platform/tests/css/css-content/attr-case-sensitivity-002.html18
-rw-r--r--testing/web-platform/tests/css/css-content/attr-case-sensitivity-003.html14
-rw-r--r--testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-001.html4
-rw-r--r--testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-002.html4
-rw-r--r--testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-003.html7
-rw-r--r--testing/web-platform/tests/css/css-content/computed-value.html15
-rw-r--r--testing/web-platform/tests/css/css-content/content-animation.html51
-rw-r--r--testing/web-platform/tests/css/css-content/content-no-interpolation.html15
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-details-ref.html72
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-details.html78
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-fieldset-ref.html68
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-fieldset.html77
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-input-ref.html68
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-input.html73
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-math-ref.html68
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-math.html76
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-option-ref.html75
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-option.html83
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-block-ref.html17
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-block.html25
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-columns-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-columns.html26
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-flex-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-flex.html27
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-grid-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-grid.html28
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-ruby-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-ruby.html34
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-table-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-root-table.html28
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-select-1-ref.html72
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-select-1.html81
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-select-2-ref.html70
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-select-2.html81
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-span-dynamic.html81
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-span-ref.html68
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-span.html75
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-table-ref.html49
-rw-r--r--testing/web-platform/tests/css/css-content/content-none-table.html54
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-alt-ref.html4
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-alt.html6
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-display-contents.html12
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-display-none.html12
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-dynamic.html24
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-gradient-ref.html11
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-gradient.html15
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-image-alt.html12
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-image-no-src-ref.html2
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-image-no-src.tentative.html9
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-image-src.tentative.html9
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-on-replaced-element-ref.html3
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-on-replaced-element.tentative.html8
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement-ref.html4
-rw-r--r--testing/web-platform/tests/css/css-content/element-replacement.html14
-rw-r--r--testing/web-platform/tests/css/css-content/inheritance.html24
-rw-r--r--testing/web-platform/tests/css/css-content/pseudo-element-inline-box-ref.html8
-rw-r--r--testing/web-platform/tests/css/css-content/pseudo-element-inline-box.html15
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-001.html15
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-002.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-003.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-004.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-005.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-006.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-007.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-008.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-009.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-010.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-011.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-012.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-013.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-014.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-015.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-016.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-017.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-018.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-019.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-020.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-021.html17
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-022.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-023.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-024.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-025.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-026.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-027.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-028.html15
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-029.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-030.html17
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-031.html15
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-032.html15
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-033.html16
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-034.html34
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-first-letter-001.html19
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-first-letter-002.html25
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-first-letter-003.html19
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-first-letter-004.html19
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-first-letter-005.html25
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-slot-scoping-ref.html18
-rw-r--r--testing/web-platform/tests/css/css-content/quotes-slot-scoping.html38
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-001-ref.html11
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-002-ref.html11
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-003-ref.html11
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-004-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-005-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-006-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-007-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-008-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-009-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-010-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-011-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-012-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-013-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-014-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-015-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-016-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-017-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-018-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-019-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-020-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-021-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-022-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-023-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-024-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-025-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-026-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-027-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-028-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-029-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-030-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-031-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-032-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-033-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-034-ref.html31
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-first-letter-001-ref.html6
-rw-r--r--testing/web-platform/tests/css/css-content/reference/quotes-first-letter-002-ref.html13
-rw-r--r--testing/web-platform/tests/css/css-content/resources/rect.svg3
137 files changed, 3171 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-content/META.yml b/testing/web-platform/tests/css/css-content/META.yml
new file mode 100644
index 0000000000..848b42b955
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/META.yml
@@ -0,0 +1,3 @@
+spec: https://drafts.csswg.org/css-content/
+suggested_reviewers:
+ - dauwhe
diff --git a/testing/web-platform/tests/css/css-content/attr-case-sensitivity-001.html b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-001.html
new file mode 100644
index 0000000000..03fcc3bc98
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-001.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>attr() with HTML attributes</title>
+<link rel="help" href="https://www.w3.org/TR/css-values-4/#attr-notation">
+<link rel="help" href="https://www.w3.org/TR/css-content-3/#content-property">
+<link rel=match href="/css/css-content/attr-case-sensitivity-ref-001.html">
+<meta name="assert" content="This test checks that names specified in attr() for a content property are case-insensitive in HTML documents.">
+<style type="text/css">
+div#gencon:before { content: attr(foo) attr(Foo) attr(fOO)
+ attr(bar) attr(Bar) attr(bAR)
+ attr(baz) attr(Baz) attr(BAZ) }
+</style>
+<body>
+<div id="gencon" foo="a" Bar="b" bAZ="c"></div>
+</body>
diff --git a/testing/web-platform/tests/css/css-content/attr-case-sensitivity-002.html b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-002.html
new file mode 100644
index 0000000000..a1c4e88b8b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-002.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>attr() with attributes containing uppercase letters</title>
+<link rel="help" href="https://www.w3.org/TR/css-values-4/#attr-notation">
+<link rel="match" href="/css/css-content/attr-case-sensitivity-ref-002.html">
+<link rel="mismatch" href="/css/css-content/attr-case-sensitivity-ref-003.html">
+<meta name="assert" content="This test checks that attribute names specified in the attr() function without a namespace are case-insensitive.">
+<style>
+ #casematch:before { content: attr(RESULT); }
+ #lowercase:before { content: attr(RESULT); }
+</style>
+<p id="casematch"></p>
+<p id="lowercase"></p>
+<script>
+ // Test uses the Element.setAttributeNS() to create an attribute in the HTML document with capital letters
+ casematch.setAttributeNS('', 'RESULT', 'casematch');
+ lowercase.setAttributeNS('', 'result', 'lowercase');
+</script> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-content/attr-case-sensitivity-003.html b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-003.html
new file mode 100644
index 0000000000..d62a68f889
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-003.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>attr() with MathML attributes</title>
+<link rel="help" href="https://www.w3.org/TR/css-values-4/#attr-notation">
+<link rel="match" href="/css/css-content/attr-case-sensitivity-ref-003.html">
+<link rel="mismatch" href="/css/css-content/attr-case-sensitivity-ref-002.html">
+<meta name="assert" content="This test checks that MathML attribute names specified in the attr() function are case-sensitive.">
+<style>
+ #casematch:before { content: attr(definitionURL); }
+ #lowercase:before { content: attr(definitionurl); }
+</style>
+<!-- Test uses the fact that MathML attributes have a namespace -->
+<math id="casematch" definitionURL="casematch"></math>
+<math id="lowercase" definitionURL="lowercase"></math> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-001.html b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-001.html
new file mode 100644
index 0000000000..3a7fe169c3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-001.html
@@ -0,0 +1,4 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>attr case-sensitivity reference 001</title>
+<div>aaabbbccc</div>
diff --git a/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-002.html b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-002.html
new file mode 100644
index 0000000000..d9ef3edc31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-002.html
@@ -0,0 +1,4 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>attr case-sensitivity reference 002</title>
+<p>lowercase</p> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-003.html b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-003.html
new file mode 100644
index 0000000000..b6c86aa684
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/attr-case-sensitivity-ref-003.html
@@ -0,0 +1,7 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>attr case-sensitivity reference 003</title>
+<style>
+ #casematch:before { content: "casematch"; }
+</style>
+<math id="casematch"></math> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-content/computed-value.html b/testing/web-platform/tests/css/css-content/computed-value.html
new file mode 100644
index 0000000000..505d4b4d00
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/computed-value.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: initial computed value of content for elements is not none</title>
+<link rel="help" href="https://drafts.csswg.org/css-content/#content-property">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1605803">
+<link rel="author" href="https://mozilla.org" title="Mozilla">
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(function() {
+ assert_equals(getComputedStyle(document.documentElement, "::before").content, "none");
+ assert_not_equals(getComputedStyle(document.documentElement).content, "none");
+}, "initial computed value of content for elements is not none");
+</script>
diff --git a/testing/web-platform/tests/css/css-content/content-animation.html b/testing/web-platform/tests/css/css-content/content-animation.html
new file mode 100644
index 0000000000..396af94e49
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-animation.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>content animation</title>
+<link rel="help" href="https://drafts.csswg.org/css-content/#content-property">
+<meta name="test" content="box-shadow supports animation">
+<link rel="author" href="mailto:graouts@apple.com" title="Antoine Quint">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+
+.target::after {
+ content: "default";
+}
+
+@keyframes content-animation {
+ from { content: "from" }
+ to { content: "to" }
+}
+
+.target.animated::after {
+ animation: content-animation 1s paused linear forwards;
+}
+
+</style>
+<body>
+<div class="target"></div>
+<script>
+
+test(function() {
+ const target = document.querySelector(".target");
+ const style = getComputedStyle(target, "::after");
+
+ assert_equals(style.content, '"default"', "Before the animation is applied.");
+
+ target.classList.add("animated");
+ const animation = target.getAnimations({ subtree: true })[0];
+
+ const testContentAtTime = (time, expected) => {
+ animation.currentTime = time;
+ assert_equals(style.content, `"${expected}"`, `Check the animated value at time = ${time}ms`);
+ };
+
+ testContentAtTime(0, 'from');
+ testContentAtTime(499, 'from');
+ testContentAtTime(500, 'to');
+ testContentAtTime(999, 'to');
+ testContentAtTime(1000, 'to');
+}, "The content property can be animated with a discrete animation type.");
+
+</script>
+</body>
diff --git a/testing/web-platform/tests/css/css-content/content-no-interpolation.html b/testing/web-platform/tests/css/css-content/content-no-interpolation.html
new file mode 100644
index 0000000000..89ca47afca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-no-interpolation.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://github.com/w3c/csswg-drafts/issues/4441">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<body>
+<script>
+test_no_interpolation({
+ property: 'content',
+ from: 'initial',
+ to: '"b"'
+});
+</script>
diff --git a/testing/web-platform/tests/css/css-content/content-none-details-ref.html b/testing/web-platform/tests/css/css-content/content-none-details-ref.html
new file mode 100644
index 0000000000..ea844dc030
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-details-ref.html
@@ -0,0 +1,72 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on DETAILS</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+summary { display:none; }
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "details",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ elem.setAttribute("open", "true");
+ let summary = document.createElement("summary"); // we need a summary child to avoid details creating an anonymous child
+ elem.append(summary);
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-details.html b/testing/web-platform/tests/css/css-content/content-none-details.html
new file mode 100644
index 0000000000..6ac94c3e86
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-details.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on DETAILS</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit the <details> children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-details-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "details",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ elem.setAttribute("open", "true");
+ let summary = document.createElement("summary");
+ summary.append(document.createTextNode("FAIL"));
+ elem.append(summary);
+ elem.append(document.createTextNode("FAIL"));
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-fieldset-ref.html b/testing/web-platform/tests/css/css-content/content-none-fieldset-ref.html
new file mode 100644
index 0000000000..49a86e7a0f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-fieldset-ref.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on FIELDSET</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "fieldset"
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';';
+ elem.className = c;
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-fieldset.html b/testing/web-platform/tests/css/css-content/content-none-fieldset.html
new file mode 100644
index 0000000000..4ada3b7b01
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-fieldset.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on FIELDSET</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit the <fieldset> children, including rendered legends, from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-fieldset-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "fieldset"
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';';
+ elem.className = c;
+ elem.append(document.createTextNode("FAIL"));
+ let legend = document.createElement("legend");
+ legend.append(document.createTextNode("FAIL"));
+ elem.append(legend);
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-input-ref.html b/testing/web-platform/tests/css/css-content/content-none-input-ref.html
new file mode 100644
index 0000000000..faa3ba3734
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-input-ref.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on INPUT</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <style>
+html,body, input {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ padding:0; margin:0; border:none;
+}
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ ""
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "input"
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ elem.value = "PASS";
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-input.html b/testing/web-platform/tests/css/css-content/content-none-input.html
new file mode 100644
index 0000000000..5cc76ba11d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-input.html
@@ -0,0 +1,73 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on INPUT</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none has no effect on <input> as it has no children">
+ <link rel="match" href="content-none-input-ref.html">
+ <style>
+html,body, input {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+}
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ ""
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "input"
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ elem.value = "PASS";
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-math-ref.html b/testing/web-platform/tests/css/css-content/content-none-math-ref.html
new file mode 100644
index 0000000000..5e43f2ece4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-math-ref.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on MATH</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "math",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-math.html b/testing/web-platform/tests/css/css-content/content-none-math.html
new file mode 100644
index 0000000000..2d5e78f678
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-math.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on MATH</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit the <math> children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-math-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "math",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ let ms = document.createElementNS("http://www.w3.org/1998/Math/MathML", "ms");
+ ms.append(document.createTextNode("FAIL"));
+ elem.append(ms);
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-option-ref.html b/testing/web-platform/tests/css/css-content/content-none-option-ref.html
new file mode 100644
index 0000000000..336c5bfb94
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-option-ref.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on OPTION</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <style>
+html,body {
+ color:black; background-color:white; xfont:5px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+option {
+ padding:0; margin:0; border:none;
+ font:5px/1 Ahem;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "option",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let select = document.createElement("select");
+ select.setAttribute("size", "2");
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ select.append(elem);
+ let option = document.createElement("option");
+ option.append(document.createTextNode("pass"));
+ select.append(option);
+ body.append(select);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-option.html b/testing/web-platform/tests/css/css-content/content-none-option.html
new file mode 100644
index 0000000000..5eff477761
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-option.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on OPTION</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit the <option> children from having boxes.">
+ <link rel="match" href="content-none-option-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; xfont:5px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+option:nth-child(1) {
+ content:none;
+}
+option {
+ padding:0; margin:0; border:none;
+ font:5px/1 Ahem;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "option",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let select = document.createElement("select");
+ select.setAttribute("size", "2");
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ elem.append(document.createTextNode("FAIL"));
+ select.append(elem);
+ let option = document.createElement("option");
+ option.append(document.createTextNode("pass"));
+ select.append(option);
+ body.append(select);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-block-ref.html b/testing/web-platform/tests/css/css-content/content-none-root-block-ref.html
new file mode 100644
index 0000000000..e3c2adb417
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-block-ref.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on a :root block</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+<style>
+html,body {
+ padding:0; margin:0;
+}
+</style>
+</head>
+<body><span>B</span><span>A</span></body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-block.html b/testing/web-platform/tests/css/css-content/content-none-root-block.html
new file mode 100644
index 0000000000..c8d15df3ea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-block.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on a :root block</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <meta name="assert" content="content:none should inhibit the :root's children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-root-block-ref.html">
+ <style>
+:root {
+ content: none;
+ display: block;
+}
+*::after { content: 'A'; }
+*::before { content: 'B'; }
+
+ </style>
+</head>
+FAIL
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-columns-ref.html b/testing/web-platform/tests/css/css-content/content-none-root-columns-ref.html
new file mode 100644
index 0000000000..661c064ad3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-columns-ref.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on a :root columns layout</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <style>
+html,body {
+ padding:0; margin:0;
+}
+body {
+ column-width: 1px;
+ column-gap: 100px;
+}
+
+ </style>
+</head>
+<body><span>B</span> <span>A</span></body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-columns.html b/testing/web-platform/tests/css/css-content/content-none-root-columns.html
new file mode 100644
index 0000000000..b3fceb1c4f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-columns.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on a :root columns layout</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <meta name="assert" content="content:none should inhibit the :root's children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-root-columns-ref.html">
+ <style>
+:root {
+ content: none;
+ column-width: 1px;
+ column-gap: 100px;
+}
+*::after { content: 'A'; }
+*::before { content: 'B '; }
+
+ </style>
+</head>
+FAIL
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-flex-ref.html b/testing/web-platform/tests/css/css-content/content-none-root-flex-ref.html
new file mode 100644
index 0000000000..b14e9f14f9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-flex-ref.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on a :root flex</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <style>
+html,body {
+ padding:0; margin:0;
+}
+body {
+ display: flex;
+ border: 1px solid;
+ gap: 10px;
+}
+ </style>
+</head>
+<body><x>B</x><x>A</x></body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-flex.html b/testing/web-platform/tests/css/css-content/content-none-root-flex.html
new file mode 100644
index 0000000000..0b6c6cab14
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-flex.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on a :root flex</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <meta name="assert" content="content:none should inhibit the :root's children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-root-flex-ref.html">
+ <style>
+:root {
+ content: none;
+ display: flex;
+ border: 1px solid;
+ gap: 10px;
+}
+*::after { content: 'A'; }
+*::before { content: 'B'; }
+
+ </style>
+</head>
+FAIL
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-grid-ref.html b/testing/web-platform/tests/css/css-content/content-none-root-grid-ref.html
new file mode 100644
index 0000000000..9b092c664b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-grid-ref.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on a :root grid</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <style>
+html,body {
+ padding:0; margin:0;
+}
+body {
+ display: grid;
+ border: 1px solid;
+ grid-template-columns: 50px 50px;
+ gap: 10px;
+}
+ </style>
+</head>
+<body><x>B</x><x>A</x></body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-grid.html b/testing/web-platform/tests/css/css-content/content-none-root-grid.html
new file mode 100644
index 0000000000..e97f7848ac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-grid.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on a :root grid</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <meta name="assert" content="content:none should inhibit the :root's children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-root-grid-ref.html">
+ <style>
+:root {
+ content: none;
+ display: grid;
+ border: 1px solid;
+ grid-template-columns: 50px 50px;
+ gap: 10px;
+}
+*::after { content: 'A'; }
+*::before { content: 'B'; }
+
+ </style>
+</head>
+FAIL
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-ruby-ref.html b/testing/web-platform/tests/css/css-content/content-none-root-ruby-ref.html
new file mode 100644
index 0000000000..cfb0ecd866
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-ruby-ref.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on a :root ruby (blockified) box</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <style>
+html,body {
+ padding:0; margin:0;
+}
+body {
+ border: 1px solid;
+ margin: 50px;
+}
+ </style>
+</head>
+<body><x>B</x><x>A</x></body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-ruby.html b/testing/web-platform/tests/css/css-content/content-none-root-ruby.html
new file mode 100644
index 0000000000..8434d96190
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-ruby.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on a :root ruby (blockified) box</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <meta name="assert" content="content:none should inhibit the :root's children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-root-ruby-ref.html">
+ <style>
+:root {
+ content: none;
+ display: ruby;
+ border: 1px solid;
+ margin: 50px;
+}
+*::after { content: 'A'; }
+*::before { content: 'B'; }
+
+ </style>
+</head>
+べ
+<rtc>
+ <rt>る</rt>
+</rtc>
+<rbc>
+ <rb>FAIL</rb>
+ <rb>FAIL</rb>
+</rbc>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-table-ref.html b/testing/web-platform/tests/css/css-content/content-none-root-table-ref.html
new file mode 100644
index 0000000000..d32fdf0525
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-table-ref.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on a :root table</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <style>
+html,body {
+ padding:0; margin:0;
+}
+body {
+ display: table;
+ border: 1px solid;
+ border-spacing: 10px;
+}
+ </style>
+</head>
+<body><x>B</x><x>A</x></body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-root-table.html b/testing/web-platform/tests/css/css-content/content-none-root-table.html
new file mode 100644
index 0000000000..92e4a7730b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-root-table.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on a :root table</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <meta name="assert" content="content:none should inhibit the :root's children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-root-table-ref.html">
+ <style>
+:root {
+ content: none;
+ display: table;
+ border: 1px solid;
+ border-spacing: 10px;
+}
+*::after { content: 'A'; }
+*::before { content: 'B'; }
+
+ </style>
+</head>
+<x style="display:table-cell">FAIL</x>
+</html>
+
diff --git a/testing/web-platform/tests/css/css-content/content-none-select-1-ref.html b/testing/web-platform/tests/css/css-content/content-none-select-1-ref.html
new file mode 100644
index 0000000000..5fef3a498c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-select-1-ref.html
@@ -0,0 +1,72 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on SELECT size=1</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="timeout" content="long">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ padding:0; margin:0; border:none;
+ font:5px/1 Ahem;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "select",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ let option = document.createElement("option"); // need an empty option to get same line-height
+ elem.append(option);
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-select-1.html b/testing/web-platform/tests/css/css-content/content-none-select-1.html
new file mode 100644
index 0000000000..450dd66e21
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-select-1.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on SELECT size=1</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit the <select> children from having boxes.">
+ <meta name="timeout" content="long">
+ <link rel="match" href="content-none-select-1-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+ font:5px/1 Ahem;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "select",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ let option = document.createElement("option");
+ option.append(document.createTextNode("FAIL"));
+ elem.append(option);
+ option = document.createElement("option");
+ option.append(document.createTextNode("FAIL"));
+ elem.append(option);
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-select-2-ref.html b/testing/web-platform/tests/css/css-content/content-none-select-2-ref.html
new file mode 100644
index 0000000000..4848b57d95
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-select-2-ref.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on SELECT size=2</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ padding:0; margin:0; border:none;
+ font:5px/1 Ahem;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "select",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ elem.setAttribute("size", "2");
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-select-2.html b/testing/web-platform/tests/css/css-content/content-none-select-2.html
new file mode 100644
index 0000000000..4b8f0f5c32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-select-2.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on SELECT size=2</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit the <select> children from having boxes.">
+ <link rel="match" href="content-none-select-2-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+ font:5px/1 Ahem;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute",
+ ];
+ const tags = [
+ "select",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ elem.setAttribute("size", "2");
+ let option = document.createElement("option");
+ option.append(document.createTextNode("FAIL"));
+ elem.append(option);
+ option = document.createElement("option");
+ option.append(document.createTextNode("FAIL"));
+ elem.append(option);
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-span-dynamic.html b/testing/web-platform/tests/css/css-content/content-none-span-dynamic.html
new file mode 100644
index 0000000000..078be9928a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-span-dynamic.html
@@ -0,0 +1,81 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on SPAN with dynamically inserted children</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit the <span> children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-span-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute", "position:relative",
+ ];
+ const tags = [
+ "span",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c + " test";
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+ document.body.offsetHeight;
+
+ for (let elem of Array.from(document.querySelectorAll(".test"))) {
+ elem.append(document.createTextNode("FAIL"))
+ elem.append(document.createElement("div"));
+ }
+
+ document.body.offsetHeight;
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-span-ref.html b/testing/web-platform/tests/css/css-content/content-none-span-ref.html
new file mode 100644
index 0000000000..cec124a3d4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-span-ref.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on SPAN</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute", "position:relative",
+ ];
+ const tags = [
+ "span",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-span.html b/testing/web-platform/tests/css/css-content/content-none-span.html
new file mode 100644
index 0000000000..b963869cfe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-span.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on SPAN</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit the <span> children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-span-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body > * {
+ content:none;
+ padding:0; margin:0; border:none;
+}
+::marker { content: 'M'; }
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+
+ </style>
+</head>
+<body>
+
+<script>
+ document.body.style.display = 'none';
+
+ const display = [
+ "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
+ "display:flex", "display:table", "display:list-item", "display:contents",
+ "columns:2",
+ ];
+ const overflow = [
+ "", "overflow:scroll", "overflow:clip",
+ ];
+ const position = [
+ "", "position:absolute", "position:relative",
+ ];
+ const tags = [
+ "span",
+ ];
+ const classes = [
+ "", "after", "before",
+ ];
+ const body = document.body;
+ for (var d of display) {
+ for (var o of overflow) {
+ for (var p of position) {
+ for (var c of classes) {
+ for (var t of tags) {
+ let elem = document.createElement(t);
+ elem.style = d + ';' + o + ';' + p + ';'
+ elem.className = c;
+ elem.append(document.createTextNode("FAIL"))
+ elem.append(document.createElement("div"));
+ body.append(elem);
+ }
+ }
+ }
+ }
+ }
+
+ document.body.style.display = '';
+</script>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-table-ref.html b/testing/web-platform/tests/css/css-content/content-none-table-ref.html
new file mode 100644
index 0000000000..ec5d167210
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-table-ref.html
@@ -0,0 +1,49 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: content:none on various table boxes</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body * {
+ border:3px solid;
+}
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+x-table { display:table }
+x-thead { display:table-row-group }
+x-tr { display:table-row }
+x-td { display:table-cell }
+ </style>
+</head>
+<body>
+
+<table><thead><tr><td class="c"></td></tr></thead></table>
+<table><thead><tr class="c"></tr></thead></table>
+<table><thead class="c"></thead></table>
+<table class="c"></thead></table>
+
+<table><thead><tr><td class="c"></td><td>PASS</td></tr></thead></table>
+<table><thead><tr class="c"></tr><tr><td>PASS</td></tr></thead></table>
+<table><thead class="c"></thead><thead><tr><td>PASS</td></tr></thead></table>
+
+<x-table><x-thead><x-tr><x-td class="c"></x-td></x-tr></x-thead></x-table>
+<x-table><x-thead><x-tr class="c"></x-tr></x-thead></x-table>
+<x-table><x-thead class="c"></x-thead></x-table>
+<x-table class="c"></x-table>
+
+<x-table><x-thead><x-tr><x-td class="c"></x-td><x-td>PASS</x-td></x-tr></x-thead></x-table>
+<x-table><x-thead><x-tr class="c"></x-tr><x-tr><x-td>PASS</x-td></x-tr></x-thead></x-table>
+<x-table><x-thead class="c"></x-thead><x-thead><x-tr><x-td>PASS</x-td></x-tr></x-thead></x-table>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/content-none-table.html b/testing/web-platform/tests/css/css-content/content-none-table.html
new file mode 100644
index 0000000000..723e2e4146
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/content-none-table.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Content: content:none on various table boxes</title>
+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="help" href="https://drafts.csswg.org/css-content/#valdef-content-none">
+ <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+ <meta name="flags" content="ahem">
+ <meta name="assert" content="content:none should inhibit table children from having boxes. Its pseudos should not be affected though.">
+ <link rel="match" href="content-none-table-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 Ahem; padding:0; margin:0;
+}
+body { margin-left: 3ch; }
+body * {
+ border:3px solid;
+}
+.after::after { content: 'A'; }
+.before::before { content: 'B'; }
+.c { content:none; }
+x-table { display:table }
+x-thead { display:table-row-group }
+x-tr { display:table-row }
+x-td { display:table-cell }
+ </style>
+</head>
+<body>
+
+<table><thead><tr><td class="c">FAIL<x>FAIL</x></td></tr></thead></table>
+<table><thead><tr class="c"><td>FAIL<x>FAIL</x></td></tr></thead></table>
+<table><thead class="c"><tr><td>FAIL<x>FAIL</x></td></tr></thead></table>
+<table class="c"><thead><tr><td>FAIL<x>FAIL</x></td></tr></thead></table>
+
+<table><thead><tr><td class="c">FAIL<x>FAIL</x></td><td>PASS</td></tr></thead></table>
+<table><thead><tr class="c"><td>FAIL<x>FAIL</x></td></tr><tr><td>PASS</td></tr></thead></table>
+<table><thead class="c"><tr><td>FAIL<x>FAIL</x></td></tr></thead><thead><tr><td>PASS</td></tr></thead></table>
+
+<x-table><x-thead><x-tr><x-td class="c">FAIL<x>FAIL</x></x-td></x-tr></x-thead></x-table>
+<x-table><x-thead><x-tr class="c"><x-td>FAIL<x>FAIL</x></x-td></x-tr></x-thead></x-table>
+<x-table><x-thead class="c"><x-tr><x-td>FAIL<x>FAIL</x></x-td></x-tr></x-thead></x-table>
+<x-table class="c"><x-thead><x-tr><x-td>FAIL<x>FAIL</x></x-td></x-tr></x-thead></x-table>
+
+<x-table><x-thead><x-tr><x-td class="c">FAIL<x>FAIL</x></x-td><x-td>PASS</x-td></x-tr></x-thead></x-table>
+<x-table><x-thead><x-tr class="c"><x-td>FAIL<x>FAIL</x></x-td></x-tr><x-tr><x-td>PASS</x-td></x-tr></x-thead></x-table>
+<x-table><x-thead class="c"><x-tr><x-td>FAIL<x>FAIL</x></x-td></x-tr></x-thead><x-thead><x-tr><x-td>PASS</x-td></x-tr></x-thead></x-table>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-alt-ref.html b/testing/web-platform/tests/css/css-content/element-replacement-alt-ref.html
new file mode 100644
index 0000000000..ef8a6f3953
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-alt-ref.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<title>CSS Test Reference</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<div style="content: url(broken);"></div>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-alt.html b/testing/web-platform/tests/css/css-content/element-replacement-alt.html
new file mode 100644
index 0000000000..e9ee9344c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-alt.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<title>The content CSS property with a broken image doesn't pull the alt attribute from that element</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="match" href="element-replacement-alt-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property">
+<div style="content: url(broken);" alt="Alt text">FAIL</div>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-display-contents.html b/testing/web-platform/tests/css/css-content/element-replacement-display-contents.html
new file mode 100644
index 0000000000..3782f4c2c7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-display-contents.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>The content CSS property doesn't override display: contents</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="match" href="../reference/blank.html">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property">
+<style>
+ div {
+ display: contents;
+ content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==);
+ }
+</style>
+<div></div>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-display-none.html b/testing/web-platform/tests/css/css-content/element-replacement-display-none.html
new file mode 100644
index 0000000000..6c61da3818
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-display-none.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>The content CSS property doesn't override display: none</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="match" href="../reference/blank.html">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property">
+<style>
+ div {
+ display: none;
+ content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==);
+ }
+</style>
+<div>FAIL</div>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-dynamic.html b/testing/web-platform/tests/css/css-content/element-replacement-dynamic.html
new file mode 100644
index 0000000000..c025759094
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-dynamic.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>The content CSS attribute can replace an element's contents dynamically</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" />
+<link rel="match" href="element-replacement-ref.html" />
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property" />
+<meta name="assert" content"This test checks that the CSS content propertly can replace a normal element's contents when changed dynamically" />
+
+<style>
+#target {
+ content: none;
+}
+#target.replaced {
+ content: url('resources/rect.svg');
+}
+</style>
+
+<div id="target">This text should not be visible</div>
+
+<script>
+const target = document.getElementById("target");
+getComputedStyle(target).width;
+target.className = "replaced";
+</script>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-gradient-ref.html b/testing/web-platform/tests/css/css-content/element-replacement-gradient-ref.html
new file mode 100644
index 0000000000..ecbc1947e4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-gradient-ref.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<style>
+div {
+ width: 100px;
+ height: 100px;
+ background-image: linear-gradient(purple, yellow);
+}
+</style>
+<div></div>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-gradient.html b/testing/web-platform/tests/css/css-content/element-replacement-gradient.html
new file mode 100644
index 0000000000..bb1010b075
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-gradient.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>content: gradient</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="match" href="element-replacement-gradient-ref.html" />
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property" />
+<style>
+div {
+ width: 100px;
+ height: 100px;
+ content: linear-gradient(purple, yellow);
+}
+</style>
+<div></div>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-image-alt.html b/testing/web-platform/tests/css/css-content/element-replacement-image-alt.html
new file mode 100644
index 0000000000..89cd63e5c4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-image-alt.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>Content CSS property on img with alt and no src is honored</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="match" href="element-replacement-ref.html" />
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1625805">
+<style>
+ img {
+ content: url('resources/rect.svg');
+ }
+</style>
+<img alt="Something">
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-image-no-src-ref.html b/testing/web-platform/tests/css/css-content/element-replacement-image-no-src-ref.html
new file mode 100644
index 0000000000..b9ba2e92d7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-image-no-src-ref.html
@@ -0,0 +1,2 @@
+<!doctype html>
+<img src="/images/yellow.png" width=100 height=100>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-image-no-src.tentative.html b/testing/web-platform/tests/css/css-content/element-replacement-image-no-src.tentative.html
new file mode 100644
index 0000000000..0c400ed574
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-image-no-src.tentative.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>content: url() works on image</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2831">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1484928">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1742411">
+<link rel="match" href="element-replacement-image-no-src-ref.html">
+<img style="content: url(/images/yellow.png)" width=100 height=100>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-image-src.tentative.html b/testing/web-platform/tests/css/css-content/element-replacement-image-src.tentative.html
new file mode 100644
index 0000000000..33547e2c24
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-image-src.tentative.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>content: url() works on image</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2831">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1484928">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1742411">
+<link rel="match" href="element-replacement-image-no-src-ref.html">
+<img src="/images/blue.png" style="content: url(/images/yellow.png)" width=100 height=100>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-on-replaced-element-ref.html b/testing/web-platform/tests/css/css-content/element-replacement-on-replaced-element-ref.html
new file mode 100644
index 0000000000..a13d0fdb4b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-on-replaced-element-ref.html
@@ -0,0 +1,3 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<video poster="/images/blue.png" style="object-fit: cover; content: url(/images/yellow.png)" width=100 height=100></video>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-on-replaced-element.tentative.html b/testing/web-platform/tests/css/css-content/element-replacement-on-replaced-element.tentative.html
new file mode 100644
index 0000000000..79a465541f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-on-replaced-element.tentative.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<title>content: url() works (or not) consistently on replaced elements</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2831">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1625805#c6">
+<link rel="match" href="element-replacement-on-replaced-element-ref.html">
+<img src="/images/blue.png" style="content: url(/images/yellow.png)" width=100 height=100>
diff --git a/testing/web-platform/tests/css/css-content/element-replacement-ref.html b/testing/web-platform/tests/css/css-content/element-replacement-ref.html
new file mode 100644
index 0000000000..d301f1d6a1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement-ref.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<title>Reference for the content CSS attribute can replace an element's contents</title>
+
+<img src='resources/rect.svg' />
diff --git a/testing/web-platform/tests/css/css-content/element-replacement.html b/testing/web-platform/tests/css/css-content/element-replacement.html
new file mode 100644
index 0000000000..a78e9f713b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/element-replacement.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<title>The content CSS attribute can replace an element's contents</title>
+<link rel="match" href="element-replacement-ref.html" />
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property" />
+<meta name="assert" content"This test checks that the CSS content propertly can replace a normal element's contents" />
+
+<style>
+p {
+ margin: 0;
+ content: url('resources/rect.svg');
+}
+</style>
+
+<p>This text should not be visible</p>
diff --git a/testing/web-platform/tests/css/css-content/inheritance.html b/testing/web-platform/tests/css/css-content/inheritance.html
new file mode 100644
index 0000000000..a3242556fd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/inheritance.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Inheritance of CSS Contents properties</title>
+<link rel="help" href="https://drafts.csswg.org/css-content/#propdef-quotes">
+<link rel="help" href="https://drafts.csswg.org/css-content/#property-index">
+<meta name="assert" content="Properties inherit or not according to the spec.">
+<meta name="assert" content="Properties have initial values according to the spec.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/inheritance-testcommon.js"></script>
+</head>
+<body>
+<div id="container">
+ <div id="target"></div>
+</div>
+<script>
+assert_inherited('quotes', 'auto', 'none');
+assert_not_inherited('bookmark-level', 'none', '1');
+assert_not_inherited('bookmark-state', 'open', 'closed');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/pseudo-element-inline-box-ref.html b/testing/web-platform/tests/css/css-content/pseudo-element-inline-box-ref.html
new file mode 100644
index 0000000000..8294ae672d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/pseudo-element-inline-box-ref.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<p>Should see a green image with a blue border</p>
+<div>
+ <span style="border: 10px solid blue">
+ <img src="resources/rect.svg">
+ </span>
+</div>
diff --git a/testing/web-platform/tests/css/css-content/pseudo-element-inline-box.html b/testing/web-platform/tests/css/css-content/pseudo-element-inline-box.html
new file mode 100644
index 0000000000..5c1666261e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/pseudo-element-inline-box.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<title>CSS Test: content: url() on pseudo-elements is under a non-replaced box.</title>
+<link rel="match" href="pseudo-element-inline-box-ref.html">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu">
+<link rel="help" href="https://drafts.csswg.org/css-content/#typedef-content-content-list">
+<style>
+ div::before {
+ border: 10px solid blue;
+ content: url(resources/rect.svg);
+ display: inline;
+ }
+</style>
+<p>Should see a green image with a blue border</p>
+<div></div>
diff --git a/testing/web-platform/tests/css/css-content/quotes-001.html b/testing/web-platform/tests/css/css-content/quotes-001.html
new file mode 100644
index 0000000000..26fddec97a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-001.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html>
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Browser uses default quote marks when no lang is specified">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-001-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the <q>outer <q>quote marks</q> are double,
+and the two sets of <q>inner</q> ones</q> are single.
diff --git a/testing/web-platform/tests/css/css-content/quotes-002.html b/testing/web-platform/tests/css/css-content/quotes-002.html
new file mode 100644
index 0000000000..e87938cf98
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-002.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="en-US">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="The quotes property controls quote marks inserted by the q element">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-002-ref.html">
+<style>
+body { font: 32px serif; }
+.test { quotes: "<" ">" ; }
+</style>
+<body>
+Test passes if the word <q>quotes</q> is enclosed in curly quotes,
+and <q class=test>angle brackets</q> in angle brackets.
diff --git a/testing/web-platform/tests/css/css-content/quotes-003.html b/testing/web-platform/tests/css/css-content/quotes-003.html
new file mode 100644
index 0000000000..ed568f2d04
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-003.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="en-US">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="The quotes property can specify different marks for nested quotes">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-003-ref.html">
+<style>
+body { font: 32px serif; }
+.test { quotes: "<" ">" "[" "]"; }
+</style>
+<body>
+<p class=test>Test passes if the <q>outer <q>quote marks</q> are angle brackets,
+and the two sets of <q>inner</q> ones</q> are square brackets.
diff --git a/testing/web-platform/tests/css/css-content/quotes-004.html b/testing/web-platform/tests/css/css-content/quotes-004.html
new file mode 100644
index 0000000000..0fbe91d194
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-004.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="am">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Amharic quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-004-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>አንድ <q>ሁለት</q> ሦስት</q>
+<p>&#xab;አንድ &#x2039;ሁለት&#x203a; ሦስት&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/quotes-005.html b/testing/web-platform/tests/css/css-content/quotes-005.html
new file mode 100644
index 0000000000..d813a589de
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-005.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="ar">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Arabic quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-005-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p dir=rtl><q>واحد <q>اثنينل</q> ثلاثة</q>
+<p dir=rtl>&#x201d;واحد &#x2019;اثنينل&#x2018; ثلاثة&#x201c;
diff --git a/testing/web-platform/tests/css/css-content/quotes-006.html b/testing/web-platform/tests/css/css-content/quotes-006.html
new file mode 100644
index 0000000000..b4f876f446
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-006.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="bn">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Bengali quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-006-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>এক <q>দুই</q> তিন</q>
+<p>&#x201c;এক &#x2018;দুই&#x2019; তিন&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-007.html b/testing/web-platform/tests/css/css-content/quotes-007.html
new file mode 100644
index 0000000000..b6791d42a5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-007.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="chr">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Cherokee quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-007-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>Ꮒꭶꮣ <q>ꭰꮒᏼꮻ</q> ꭴꮎꮥꮕꭲ</q>
+<p>&#x201c;Ꮒꭶꮣ &#x2018;ꭰꮒᏼꮻ&#x2019; ꭴꮎꮥꮕꭲ&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-008.html b/testing/web-platform/tests/css/css-content/quotes-008.html
new file mode 100644
index 0000000000..5369fd0bbf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-008.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="el">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Greek quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-008-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>ένα <q>δύο</q> τρία</q>
+<p>&#xab;ένα &#x201c;δύο&#x201d; τρία&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/quotes-009.html b/testing/web-platform/tests/css/css-content/quotes-009.html
new file mode 100644
index 0000000000..ae1688f5a4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-009.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="fa">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Farsi quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-009-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>یک <q>دو</q> سه</q>
+<p>&#xab;یک &#x2039;دو&#x203a; سه&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/quotes-010.html b/testing/web-platform/tests/css/css-content/quotes-010.html
new file mode 100644
index 0000000000..022bdd561b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-010.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="fr">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="French quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-010-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>un <q>deux</q> trois</q>
+<p>&#xab;un &#xab;deux&#xbb; trois&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/quotes-011.html b/testing/web-platform/tests/css/css-content/quotes-011.html
new file mode 100644
index 0000000000..3a3dc87d16
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-011.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="fr-CH">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Swiss-French quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-011-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>un <q>deux</q> trois</q>
+<p>&#xab;un &#x2039;deux&#x203a; trois&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/quotes-012.html b/testing/web-platform/tests/css/css-content/quotes-012.html
new file mode 100644
index 0000000000..481b73dc77
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-012.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="gu">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Gujarati quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-012-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>એક <q>બે</q> રણ</q>
+<p>&#x201c;એક &#x2018;બે&#x2019; રણ&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-013.html b/testing/web-platform/tests/css/css-content/quotes-013.html
new file mode 100644
index 0000000000..9db9526a8c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-013.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="he">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Hebrew quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-013-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p dir=rtl><q>אחת <q>שתיים</q> שלוש</q>
+<p dir=rtl>&#x201d;אחת &#x2019;שתיים&#x2019; שלוש&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-014.html b/testing/web-platform/tests/css/css-content/quotes-014.html
new file mode 100644
index 0000000000..967510a653
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-014.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="hi">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Hindi quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-014-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>एक <q>दो</q> तीन</q>
+<p>&#x201c;एक &#x2018;दो&#x2019; तीन&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-015.html b/testing/web-platform/tests/css/css-content/quotes-015.html
new file mode 100644
index 0000000000..86a96085f2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-015.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="hu">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Hungarian quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-015-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>egy <q>kettő</q> három</q>
+<p>&#x201e;egy &#xbb;kettő&#xab; három&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-016.html b/testing/web-platform/tests/css/css-content/quotes-016.html
new file mode 100644
index 0000000000..ebb8120244
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-016.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="ja">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Japanese quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-016-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>一 <q>二</q> 三</q>
+<p>&#x300c;一 &#x300e;二&#x300f; 三&#x300d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-017.html b/testing/web-platform/tests/css/css-content/quotes-017.html
new file mode 100644
index 0000000000..f03ec21363
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-017.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="km">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Khmer quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-017-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>មួយ <q>ពីរ</q> បី</q>
+<p>&#x201c;មួយ &#x2018;ពីរ&#x2019; បី&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-018.html b/testing/web-platform/tests/css/css-content/quotes-018.html
new file mode 100644
index 0000000000..48bd318398
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-018.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="ko">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Korean quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-018-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>하나 <q>둘</q> 셋</q>
+<p>&#x201c;하나 &#x2018;둘&#x2019; 셋&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-019.html b/testing/web-platform/tests/css/css-content/quotes-019.html
new file mode 100644
index 0000000000..5bd522ee1a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-019.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="lo">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Lao quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-019-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>ຫນຶ່ງ <q>ສອງ</q> ສາມ</q>
+<p>&#x201c;ຫນຶ່ງ &#x2018;ສອງ&#x2019; ສາມ&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-020.html b/testing/web-platform/tests/css/css-content/quotes-020.html
new file mode 100644
index 0000000000..0c1827d807
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-020.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="my">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Burmese quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-020-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>တစ် <q>နှစ်</q> သုံး</q>
+<p>&#x201c;တစ် &#x2018;နှစ်&#x2019; သုံး&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-021.html b/testing/web-platform/tests/css/css-content/quotes-021.html
new file mode 100644
index 0000000000..bf23f1b033
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-021.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="nl">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Dutch quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel="help" href="https://unicode-org.github.io/cldr-staging/charts/40/summary/nl.html#101c4f8aa144538f">
+<link rel=match href="reference/quotes-021-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>een <q>twee</q> drie</q>
+<p>&#x2018;een &#x2018;twee&#x2019; drie&#x2019;
diff --git a/testing/web-platform/tests/css/css-content/quotes-022.html b/testing/web-platform/tests/css/css-content/quotes-022.html
new file mode 100644
index 0000000000..430b98b2c8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-022.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="pa">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Punjabi quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-022-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>ਇੱਕ <q>ਦੋ</q> ਤਿੰਨ</q>
+<p>&#x201c;ਇੱਕ &#x2018;ਦੋ&#x2019; ਤਿੰਨ&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-023.html b/testing/web-platform/tests/css/css-content/quotes-023.html
new file mode 100644
index 0000000000..e88d6abffc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-023.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="ta">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Tamil quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-023-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>ஒன்று <q>இரண்டு</q> மூன்று</q>
+<p>&#x201c;ஒன்று &#x2018;இரண்டு&#x2019; மூன்று&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-024.html b/testing/web-platform/tests/css/css-content/quotes-024.html
new file mode 100644
index 0000000000..99b29a2d67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-024.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="th">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Thai quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-024-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>หนึ่ง<q>สอง</q>สาม</q>
+<p>&#x201c;หนึ่ง&#x2018;สอง&#x2019;สาม&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-025.html b/testing/web-platform/tests/css/css-content/quotes-025.html
new file mode 100644
index 0000000000..28e1f2904b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-025.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="zh-Hans">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Simplified Chinese quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-025-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>一 <q>二</q> 三</q>
+<p>&#x201c;一 &#x2018;二&#x2019; 三&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-026.html b/testing/web-platform/tests/css/css-content/quotes-026.html
new file mode 100644
index 0000000000..ee1d5c5664
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-026.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="zh-Hant">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Traditional Chinese quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-026-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>一 <q>二</q> 三</q>
+<p>&#x300c;一 &#x300e;二&#x300f; 三&#x300d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-027.html b/testing/web-platform/tests/css/css-content/quotes-027.html
new file mode 100644
index 0000000000..051d308539
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-027.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="zh">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Chinese quotation marks follow CLDR">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#quotes">
+<link rel=match href="reference/quotes-027-ref.html">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p><q>一 <q>二</q> 三</q>
+<p>&#x201c;一 &#x2018;二&#x2019; 三&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/quotes-028.html b/testing/web-platform/tests/css/css-content/quotes-028.html
new file mode 100644
index 0000000000..5ec2ad0f02
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-028.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Nested quotes use successive pairs, then repeat final pair">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel=match href="reference/quotes-028-ref.html">
+<style>
+body { font: 32px serif; quotes: "“" "”" "‘" "’" "«" "»" "‹" "›"; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>One <q>two <q>three <q>four <q>five <q>six</q></q></q></q></q>
+<p>One “two ‘three «four ‹five ‹six››»’”
diff --git a/testing/web-platform/tests/css/css-content/quotes-029.html b/testing/web-platform/tests/css/css-content/quotes-029.html
new file mode 100644
index 0000000000..760605d0e2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-029.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="Nested quotes continue at the correct level when the quotes property is updated">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel=match href="reference/quotes-029-ref.html">
+<style>
+body { font: 32px serif; quotes: none; }
+.q { quotes: "“" "”" "‘" "’" "«" "»" "‹" "›"; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>One <q>two <q>three <q class=q>four <q>five <q>six</q></q></q></q></q>
+<p>One two three «four ‹five ‹six››»
diff --git a/testing/web-platform/tests/css/css-content/quotes-030.html b/testing/web-platform/tests/css/css-content/quotes-030.html
new file mode 100644
index 0000000000..095c37fedb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-030.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="quotes:auto with mixed languages uses appropriate CLDR quotes for each language,
+based on the parent language (not the language of the element itself)">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5478#issuecomment-701507076">
+<link rel=match href="reference/quotes-030-ref.html">
+<style>
+body { font: 32px Arial, Helvetica, Noto Sans, DejaVu Sans, FreeSans, sans-serif; quotes: auto; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>One <q>two <q lang="ja">three <q lang="fr">four</q></q></q>
+<p>One “two <span lang="ja">‘three <span lang="fr">『four』</span>’</span>”
diff --git a/testing/web-platform/tests/css/css-content/quotes-031.html b/testing/web-platform/tests/css/css-content/quotes-031.html
new file mode 100644
index 0000000000..72d2027341
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-031.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="language change does not override explicit quotes:<pair-list>">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel=match href="reference/quotes-031-ref.html">
+<style>
+body { font: 32px serif; quotes: "‹" "›"; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>One <q>two <q lang="ja">three <q lang="fr">four</q></q></q>
+<p>One ‹two <span lang="ja">‹three <span lang="fr">‹four›</span>›</span>›
diff --git a/testing/web-platform/tests/css/css-content/quotes-032.html b/testing/web-platform/tests/css/css-content/quotes-032.html
new file mode 100644
index 0000000000..cb0b36312b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-032.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="lang attribute does not override explicit quotes:none setting">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel=match href="reference/quotes-032-ref.html">
+<style>
+body { font: 32px serif; quotes: none; }
+</style>
+<body>
+<p>Test passes if both lines match, with no quote marks:
+<p>One <q>two <q lang="ja">three <q lang="fr">four</q></q></q>
+<p>One two <span lang="ja">three <span lang="fr">four</span></span>
diff --git a/testing/web-platform/tests/css/css-content/quotes-033.html b/testing/web-platform/tests/css/css-content/quotes-033.html
new file mode 100644
index 0000000000..ca54478864
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-033.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="quotes:auto resets default behavior after quotes:none">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel=match href="reference/quotes-033-ref.html">
+<style>
+body { font: 32px serif; quotes: none; }
+.inner { quotes: auto; }
+</style>
+<body>
+<p>Test passes if quote marks in both lines match:
+<p>One <q>two</q> <span class="inner"><q>three <q>four</q></q></span> <q>five</q>
+<p>One two “three ‘four’” five
diff --git a/testing/web-platform/tests/css/css-content/quotes-034.html b/testing/web-platform/tests/css/css-content/quotes-034.html
new file mode 100644
index 0000000000..1c0c744c30
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-034.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content test: quotes</title>
+<meta name="assert" content="In the case of an unknown region, the quotes displayed should be based on the fallback order.">
+<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
+<link rel=match href="reference/quotes-034-ref.html">
+<style>
+body { font: 15px serif; }
+</style>
+<body>
+<p>Test passes if quote marks in each pair lines match:</p>
+
+<p lang="fr"><q>fr FALLBACK</q></p>
+<p lang="fr-FR"><q>fr FALLBACK</q></p>
+
+<p lang="en"><q>en FALLBACK</q></p>
+<p lang="en-EN"><q>en FALLBACK</q></p>
+
+<p lang="fi"><q>fi FALLBACK</q></p>
+<p lang="fi-FI"><q>fi FALLBACK</q></p>
+
+<p lang="de"><q>de FALLBACK</q></p>
+<p lang="de-DE"><q>de FALLBACK</q></p>
+
+<p lang="he"><q>he FALLBACK</q></p>
+<p lang="he-HE"><q>he FALLBACK</q></p>
+
+<p lang="ja"><q>ja FALLBACK</q></p>
+<p lang="ja-JA"><q>ja FALLBACK</q></p>
+
+<p lang="aa"><q>root FALLBACK</q></p>
+
+<p lang="zz"><q>root FALLBACK</q></p>
diff --git a/testing/web-platform/tests/css/css-content/quotes-first-letter-001.html b/testing/web-platform/tests/css/css-content/quotes-first-letter-001.html
new file mode 100644
index 0000000000..651615f525
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-first-letter-001.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS-content test: first letter with quotes interaction dynamic quotes change</title>
+<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com">
+<link rel="match" href="reference/quotes-first-letter-001-ref.html">
+<link rel=help href="https://drafts.csswg.org/css-content/#quotes">
+
+<style>
+ #root { quotes: "A" "B"; }
+ #root.xy-quotes { quotes: "'X" "'Y"; }
+ #root::first-letter { color: green; }
+</style>
+
+<div id="root"><q>First letter</q></div>
+
+<script>
+ document.body.offsetTop;
+ root.className = "xy-quotes";
+</script>
diff --git a/testing/web-platform/tests/css/css-content/quotes-first-letter-002.html b/testing/web-platform/tests/css/css-content/quotes-first-letter-002.html
new file mode 100644
index 0000000000..8c40b1418a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-first-letter-002.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS-content test: first letter with quotes interaction dynamic attachment</title>
+<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com">
+<link rel="match" href="reference/quotes-first-letter-002-ref.html">
+<link rel=help href="https://drafts.csswg.org/css-content/#quotes">
+
+<style>
+ .first-letter::first-letter { color: green; }
+</style>
+
+<q>
+ <div id="outer">
+ <q>Should not crash or assert and all six quotes should be displayed.</q>
+ <div id="inner">
+ <q>Should not crash or assert and all six quotes should be displayed.</q>
+ </div>
+ </div>
+</q>
+
+<script>
+ document.body.offsetTop;
+ inner.className = 'first-letter';
+ outer.className = 'first-letter';
+</script>
diff --git a/testing/web-platform/tests/css/css-content/quotes-first-letter-003.html b/testing/web-platform/tests/css/css-content/quotes-first-letter-003.html
new file mode 100644
index 0000000000..fd556d2ab1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-first-letter-003.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS-content test: first letter with quotes interaction dynamic detach</title>
+<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com">
+<link rel="match" href="reference/quotes-first-letter-001-ref.html">
+<link rel=help href="https://drafts.csswg.org/css-content/#quotes">
+
+<style>
+ #outer { quotes: "'X" "'Y"; }
+ #outer::first-letter { color: green; }
+ #inner::first-letter { color: red; }
+</style>
+
+<div id="outer"><div id="inner"><q>First letter</q></div></div>
+
+<script>
+ document.body.offsetTop;
+ inner.removeAttribute('id');
+</script>
diff --git a/testing/web-platform/tests/css/css-content/quotes-first-letter-004.html b/testing/web-platform/tests/css/css-content/quotes-first-letter-004.html
new file mode 100644
index 0000000000..932ea8516e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-first-letter-004.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS-content test: first letter with quotes interaction dynamic style change</title>
+<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com">
+<link rel="match" href="reference/quotes-first-letter-001-ref.html">
+<link rel=help href="https://drafts.csswg.org/css-content/#quotes">
+
+<style>
+ #outer { quotes: "'X" "'Y"; }
+ #outer::first-letter { color: red; }
+ #outer.green::first-letter { color: green; }
+</style>
+
+<div id="outer"><div id="inner"><q>First letter</q></div></div>
+
+<script>
+ document.body.offsetTop;
+ outer.className = "green";
+</script>
diff --git a/testing/web-platform/tests/css/css-content/quotes-first-letter-005.html b/testing/web-platform/tests/css/css-content/quotes-first-letter-005.html
new file mode 100644
index 0000000000..a22589a661
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-first-letter-005.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS-content test: first letter with quotes interaction dynamic attachment siblings</title>
+<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com">
+<link rel="match" href="reference/quotes-first-letter-002-ref.html">
+<link rel=help href="https://drafts.csswg.org/css-content/#quotes">
+
+<style>
+ .first-letter::first-letter { color: green; }
+</style>
+
+<q>
+ <div id="first">
+ <q>Should not crash or assert and all six quotes should be displayed.</q>
+ </div>
+ <div id="last">
+ <q>Should not crash or assert and all six quotes should be displayed.</q>
+ </div>
+</q>
+
+<script>
+ document.body.offsetTop;
+ first.className = 'first-letter';
+ last.className = 'first-letter';
+</script>
diff --git a/testing/web-platform/tests/css/css-content/quotes-slot-scoping-ref.html b/testing/web-platform/tests/css/css-content/quotes-slot-scoping-ref.html
new file mode 100644
index 0000000000..e3e907cba5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-slot-scoping-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Quote scope Shadow DOM and SLOT</title>
+ <link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+ <link rel="help" href="https://www.w3.org/TR/css-content-3/#quote-values">
+ <style>
+ q {
+ quotes: '1''1''2''2''3''3';
+ }
+ </style>
+ </head>
+ <body>
+ <q>
+ <q>Quote</q>
+ </q>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/quotes-slot-scoping.html b/testing/web-platform/tests/css/css-content/quotes-slot-scoping.html
new file mode 100644
index 0000000000..3caeabef4e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/quotes-slot-scoping.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Quote scope Shadow DOM and SLOT</title>
+ <link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+ <link rel="help" href="https://www.w3.org/TR/css-content-3/#quote-values">
+ <link rel="match" href="quotes-slot-scoping-ref.html">
+ </head>
+
+ <body>
+ <div id="host">
+ <q slot="quote">Quote</q>
+ </div>
+
+ <script>
+ function makeStyle() {
+ let style = document.createElement('style');
+ style.textContent = `
+ q {
+ quotes: '1' '1' '2' '2' '3' '3';
+ }
+ `;
+ return style;
+ }
+ document.body.appendChild(makeStyle());
+
+ const shadowRoot = document
+ .getElementById('host')
+ .attachShadow({mode: 'open'});
+ shadowRoot.innerHTML = `
+ <q>
+ <slot name="quote"></slot>
+ </q>
+ `;
+ shadowRoot.appendChild(makeStyle());
+ </script>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-001-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-001-ref.html
new file mode 100644
index 0000000000..8e26721e03
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-001-ref.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<html>
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the &#x201c;outer &#x2018;quote marks&#x2019; are double,
+and the two sets of &#x2018;inner&#x2019; ones&#x201d; are single.
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-002-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-002-ref.html
new file mode 100644
index 0000000000..aa0b2c8a42
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-002-ref.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<html lang="en-US">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+Test passes if the word &#x201c;quotes&#x201d; is enclosed in curly quotes,
+and &lt;angle brackets&gt; in angle brackets.
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-003-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-003-ref.html
new file mode 100644
index 0000000000..b078c0bf30
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-003-ref.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<html lang="en-US">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p class=test>Test passes if the &lt;outer [quote marks] are angle brackets,
+and the two sets of [inner] ones&gt; are square brackets.
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-004-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-004-ref.html
new file mode 100644
index 0000000000..668c65afa1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-004-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="am">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#xab;አንድ &#x2039;ሁለት&#x203a; ሦስት&#xbb;
+<p>&#xab;አንድ &#x2039;ሁለት&#x203a; ሦስት&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-005-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-005-ref.html
new file mode 100644
index 0000000000..fe3161fec3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-005-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="ar">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p dir=rtl>&#x201d;واحد &#x2019;اثنينل&#x2018; ثلاثة&#x201c;
+<p dir=rtl>&#x201d;واحد &#x2019;اثنينل&#x2018; ثلاثة&#x201c;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-006-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-006-ref.html
new file mode 100644
index 0000000000..fcbc028490
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-006-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="bn">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;এক &#x2018;দুই&#x2019; তিন&#x201d;
+<p>&#x201c;এক &#x2018;দুই&#x2019; তিন&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-007-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-007-ref.html
new file mode 100644
index 0000000000..5e0416f2c5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-007-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="chr">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;Ꮒꭶꮣ &#x2018;ꭰꮒᏼꮻ&#x2019; ꭴꮎꮥꮕꭲ&#x201d;
+<p>&#x201c;Ꮒꭶꮣ &#x2018;ꭰꮒᏼꮻ&#x2019; ꭴꮎꮥꮕꭲ&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-008-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-008-ref.html
new file mode 100644
index 0000000000..aa0850be96
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-008-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="el">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#xab;ένα &#x201c;δύο&#x201d; τρία&#xbb;
+<p>&#xab;ένα &#x201c;δύο&#x201d; τρία&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-009-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-009-ref.html
new file mode 100644
index 0000000000..279e7f4ae1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-009-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="fa">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#xab;یک &#x2039;دو&#x203a; سه&#xbb;
+<p>&#xab;یک &#x2039;دو&#x203a; سه&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-010-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-010-ref.html
new file mode 100644
index 0000000000..cd37a2628d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-010-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="fr">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#xab;un &#xab;deux&#xbb; trois&#xbb;
+<p>&#xab;un &#xab;deux&#xbb; trois&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-011-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-011-ref.html
new file mode 100644
index 0000000000..b61c264b48
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-011-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="fr-CH">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#xab;un &#x2039;deux&#x203a; trois&#xbb;
+<p>&#xab;un &#x2039;deux&#x203a; trois&#xbb;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-012-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-012-ref.html
new file mode 100644
index 0000000000..9c28ad7d0a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-012-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="gu">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;એક &#x2018;બે&#x2019; રણ&#x201d;
+<p>&#x201c;એક &#x2018;બે&#x2019; રણ&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-013-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-013-ref.html
new file mode 100644
index 0000000000..0e10cba117
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-013-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="he">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p dir=rtl>&#x201d;אחת &#x2019;שתיים&#x2019; שלוש&#x201d;
+<p dir=rtl>&#x201d;אחת &#x2019;שתיים&#x2019; שלוש&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-014-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-014-ref.html
new file mode 100644
index 0000000000..0b82e024ed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-014-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="hi">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;एक &#x2018;दो&#x2019; तीन&#x201d;
+<p>&#x201c;एक &#x2018;दो&#x2019; तीन&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-015-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-015-ref.html
new file mode 100644
index 0000000000..3417d6035b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-015-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="hu">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201e;egy &#xbb;kettő&#xab; három&#x201d;
+<p>&#x201e;egy &#xbb;kettő&#xab; három&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-016-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-016-ref.html
new file mode 100644
index 0000000000..b70e7d423c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-016-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="ja">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x300c;一 &#x300e;二&#x300f; 三&#x300d;
+<p>&#x300c;一 &#x300e;二&#x300f; 三&#x300d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-017-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-017-ref.html
new file mode 100644
index 0000000000..7039368035
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-017-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="km">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;មួយ &#x2018;ពីរ&#x2019; បី&#x201d;
+<p>&#x201c;មួយ &#x2018;ពីរ&#x2019; បី&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-018-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-018-ref.html
new file mode 100644
index 0000000000..c022d3f413
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-018-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="ko">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;하나 &#x2018;둘&#x2019; 셋&#x201d;
+<p>&#x201c;하나 &#x2018;둘&#x2019; 셋&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-019-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-019-ref.html
new file mode 100644
index 0000000000..aa80c978a6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-019-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="lo">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;ຫນຶ່ງ &#x2018;ສອງ&#x2019; ສາມ&#x201d;
+<p>&#x201c;ຫນຶ່ງ &#x2018;ສອງ&#x2019; ສາມ&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-020-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-020-ref.html
new file mode 100644
index 0000000000..6629270839
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-020-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="my">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;တစ် &#x2018;နှစ်&#x2019; သုံး&#x201d;
+<p>&#x201c;တစ် &#x2018;နှစ်&#x2019; သုံး&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-021-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-021-ref.html
new file mode 100644
index 0000000000..f87212a649
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-021-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="nl">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x2018;een &#x2018;twee&#x2019; drie&#x2019;
+<p>&#x2018;een &#x2018;twee&#x2019; drie&#x2019;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-022-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-022-ref.html
new file mode 100644
index 0000000000..8c6d3937f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-022-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="pa">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;ਇੱਕ &#x2018;ਦੋ&#x2019; ਤਿੰਨ&#x201d;
+<p>&#x201c;ਇੱਕ &#x2018;ਦੋ&#x2019; ਤਿੰਨ&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-023-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-023-ref.html
new file mode 100644
index 0000000000..022f6f3cba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-023-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="ta">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;ஒன்று &#x2018;இரண்டு&#x2019; மூன்று&#x201d;
+<p>&#x201c;ஒன்று &#x2018;இரண்டு&#x2019; மூன்று&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-024-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-024-ref.html
new file mode 100644
index 0000000000..074069f7f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-024-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="th">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;หนึ่ง&#x2018;สอง&#x2019;สาม&#x201d;
+<p>&#x201c;หนึ่ง&#x2018;สอง&#x2019;สาม&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-025-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-025-ref.html
new file mode 100644
index 0000000000..45f41d8e86
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-025-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="zh-Hans">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;一 &#x2018;二&#x2019; 三&#x201d;
+<p>&#x201c;一 &#x2018;二&#x2019; 三&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-026-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-026-ref.html
new file mode 100644
index 0000000000..247007348f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-026-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="zh-Hant">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x300c;一 &#x300e;二&#x300f; 三&#x300d;
+<p>&#x300c;一 &#x300e;二&#x300f; 三&#x300d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-027-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-027-ref.html
new file mode 100644
index 0000000000..8ccc0e310e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-027-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="zh">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>&#x201c;一 &#x2018;二&#x2019; 三&#x201d;
+<p>&#x201c;一 &#x2018;二&#x2019; 三&#x201d;
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-028-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-028-ref.html
new file mode 100644
index 0000000000..48b98caefc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-028-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>One “two ‘three «four ‹five ‹six››»’”
+<p>One “two ‘three «four ‹five ‹six››»’”
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-029-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-029-ref.html
new file mode 100644
index 0000000000..4d37e50376
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-029-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>One two three «four ‹five ‹six››»
+<p>One two three «four ‹five ‹six››»
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-030-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-030-ref.html
new file mode 100644
index 0000000000..c06d85b9dd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-030-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px Arial, Helvetica, Noto Sans, DejaVu Sans, FreeSans, sans-serif; quotes: auto; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>One “two <span lang="ja">‘three <span lang="fr">『four』</span>’</span>”
+<p>One “two <span lang="ja">‘three <span lang="fr">『four』</span>’</span>”
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-031-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-031-ref.html
new file mode 100644
index 0000000000..a4732c379e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-031-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if the quote marks in both lines match:
+<p>One ‹two <span lang="ja">‹three <span lang="fr">‹four›</span>›</span>›
+<p>One ‹two <span lang="ja">‹three <span lang="fr">‹four›</span>›</span>›
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-032-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-032-ref.html
new file mode 100644
index 0000000000..2ba542328a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-032-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if both lines match, with no quote marks:
+<p>One two <span lang="ja">three <span lang="fr">four</span></span>
+<p>One two <span lang="ja">three <span lang="fr">four</span></span>
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-033-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-033-ref.html
new file mode 100644
index 0000000000..99d1e75ddb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-033-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+body { font: 32px serif; }
+</style>
+<body>
+<p>Test passes if quote marks in both lines match:
+<p>One two “three ‘four’” five
+<p>One two “three ‘four’” five
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-034-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-034-ref.html
new file mode 100644
index 0000000000..bfe7163f13
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-034-ref.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en">
+<meta charset=utf-8>
+<title>CSS Generated Content reference: quotes</title>
+<style>
+body { font: 15px serif; }
+</style>
+<body>
+<p>Test passes if quote marks in each pair lines match:
+
+<p lang="fr">&#x00ab;fr FALLBACK&#x00bb</p>
+<p lang="fr">&#x00ab;fr FALLBACK&#x00bb</p>
+
+<p lang="en">&#x201c;en FALLBACK&#x201d</p>
+<p lang="en">&#x201c;en FALLBACK&#x201d</p>
+
+<p lang="fi">&#x201d;fi FALLBACK&#x201d</p>
+<p lang="fi">&#x201d;fi FALLBACK&#x201d</p>
+
+<p lang="de">&#x201e;de FALLBACK&#x201c</p>
+<p lang="de">&#x201e;de FALLBACK&#x201c</p>
+
+<p lang="he">&#x201d;he FALLBACK&#x201d</p>
+<p lang="he">&#x201d;he FALLBACK&#x201d</p>
+
+<p lang="ja">&#x300c;ja FALLBACK&#x300d</p>
+<p lang="ja">&#x300c;ja FALLBACK&#x300d</p>
+
+<p lang="aa">&#x201c;root FALLBACK&#x201d</p>
+
+<p lang="zz">&#x201c;root FALLBACK&#x201d</p>
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-first-letter-001-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-first-letter-001-ref.html
new file mode 100644
index 0000000000..c68334b8da
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-first-letter-001-ref.html
@@ -0,0 +1,6 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS-content test reference: first letter with quotes interaction dynamice quotes change</title>
+<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com">
+
+<span style="color: green">'X</span>First letter'Y
diff --git a/testing/web-platform/tests/css/css-content/reference/quotes-first-letter-002-ref.html b/testing/web-platform/tests/css/css-content/reference/quotes-first-letter-002-ref.html
new file mode 100644
index 0000000000..094be48cd8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/reference/quotes-first-letter-002-ref.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS-content test reference: first letter with quotes interaction</title>
+<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com">
+
+<style>
+ .quote { color: green; }
+</style>
+
+“
+<div><span class="quote">‘</span>Should not crash or assert and all six quotes should be displayed.’</div>
+<div><span class="quote">‘</span>Should not crash or assert and all six quotes should be displayed.’</div>
+”
diff --git a/testing/web-platform/tests/css/css-content/resources/rect.svg b/testing/web-platform/tests/css/css-content/resources/rect.svg
new file mode 100644
index 0000000000..d5de6b4c9d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-content/resources/rect.svg
@@ -0,0 +1,3 @@
+<svg width="100" height="100" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ <rect x="0" y="0" width="100" height="100" fill="green" />
+</svg>