aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini2
-rw-r--r--tests/wpt/metadata/MANIFEST.json143
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini4
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini (renamed from tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini)2
-rw-r--r--tests/wpt/metadata/css/css-transitions/CSSTransition-effect.tentative.html.ini6
-rw-r--r--tests/wpt/metadata/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html.ini16
-rw-r--r--tests/wpt/metadata/css/css-ui/outline-with-padding-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-values/update-subpixel-rem-unit.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable-duplicate.html.ini12
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini14
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini6
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini4
-rw-r--r--tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini4
-rw-r--r--tests/wpt/metadata/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html.ini4
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini3
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini6
-rw-r--r--tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini1
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-address-novalid.html15
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-empty-novalid.html15
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-section-novalid.html15
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-text-isvalid.html41
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-token-novalid.html15
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-work-novalid.html15
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/messages.json15
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-address-novalid.html20
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-empty-novalid.html20
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-isvalid.html180
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-section-novalid.html20
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-token-novalid.html20
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-work-novalid.html20
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-address-novalid.html16
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-empty-novalid.html16
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-isvalid.html80
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-section-novalid.html16
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-token-novalid.html16
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-work-novalid.html16
-rw-r--r--tests/wpt/web-platform-tests/css/css-transitions/CSSTransition-effect.tentative.html49
-rw-r--r--tests/wpt/web-platform-tests/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html117
-rw-r--r--tests/wpt/web-platform-tests/css/css-ui/outline-with-padding-001.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-ui/reference/outline-with-padding-001-ref.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-values/update-subpixel-rem-unit.html21
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable-duplicate.html76
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html15
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/unmapped-attributes.html4
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/virtualenv.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py5
-rw-r--r--tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html6
-rw-r--r--tests/wpt/web-platform-tests/workers/modules/dedicated-worker-parse-error-failure.html35
-rw-r--r--tests/wpt/web-platform-tests/workers/modules/resources/static-import-syntax-error.js1
-rw-r--r--tests/wpt/web-platform-tests/workers/modules/resources/syntax-error.js1
56 files changed, 1098 insertions, 115 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
index faa00f45ecf..d4f62ed7113 100644
--- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
- expected: TIMEOUT
+ expected: FAIL
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 548eb63cd89..53229d83310 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -185381,19 +185381,6 @@
{}
]
],
- "outline-with-padding-001.html": [
- "716491ca25eae11238b7240a3635bdb8a88187cf",
- [
- null,
- [
- [
- "/css/css-ui/reference/outline-with-padding-001-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
"resize-change-margin.html": [
"a957ac931e8647958baf0d1891d3e69dd4435c0d",
[
@@ -244783,6 +244770,30 @@
]
},
"input": {
+ "autocomplete-address-novalid.html": [
+ "a0646214e079e6fffad945b763337beadaf16b0f",
+ []
+ ],
+ "autocomplete-empty-novalid.html": [
+ "20b35d678f7fb2af1c4f992fce5f2569e85fcb4d",
+ []
+ ],
+ "autocomplete-section-novalid.html": [
+ "9d5e8a1187a6ec6ae7b5d760a222248c1b522f2c",
+ []
+ ],
+ "autocomplete-text-isvalid.html": [
+ "2faa347bd28d45d8d5efbc6ba26c1d64a293a077",
+ []
+ ],
+ "autocomplete-token-novalid.html": [
+ "544ca79dfdb07b8135dfd22aab643f92a7e9d871",
+ []
+ ],
+ "autocomplete-work-novalid.html": [
+ "2ff29bd9cc01a490303cd65325f7d249b8789021",
+ []
+ ],
"list-novalid.html": [
"63f43af1f5a286568817d4c89cbe7860675b5140",
[]
@@ -258037,9 +258048,61 @@
[]
],
"messages.json": [
- "6c0e2c035e931e12e701fd9d6c145216e4a8bb6f",
+ "8e32e24ca2accb8c2991306fac5d83256273a7ad",
[]
],
+ "select": {
+ "autocomplete-address-novalid.html": [
+ "7e4087ab37645e4458358664519c08e3ca83d71e",
+ []
+ ],
+ "autocomplete-empty-novalid.html": [
+ "a45757df2d23fcc7a9952adda9d21784e009b262",
+ []
+ ],
+ "autocomplete-isvalid.html": [
+ "065b764b3d2896f108d15859b0ddb69bf72de8ec",
+ []
+ ],
+ "autocomplete-section-novalid.html": [
+ "084fc2c91763a944af8c25163990b61b1f72cefa",
+ []
+ ],
+ "autocomplete-token-novalid.html": [
+ "267c4d40c28423ec698fdce2fc022887978db17d",
+ []
+ ],
+ "autocomplete-work-novalid.html": [
+ "c26b4f8531f40dcfd816392af4c6f0b94c1f363e",
+ []
+ ]
+ },
+ "textarea": {
+ "autocomplete-address-novalid.html": [
+ "1061d9a620278cf0477632b33d0fc5d2ac69afb7",
+ []
+ ],
+ "autocomplete-empty-novalid.html": [
+ "d222846b4ff864cf90c3b0d934e1a2dfec2e895b",
+ []
+ ],
+ "autocomplete-isvalid.html": [
+ "23bdb9ab8fca96bf4c03a004c6d9f00d733d7dcc",
+ []
+ ],
+ "autocomplete-section-novalid.html": [
+ "ec1038b00f3941babc9edd0f8fd4fc9c0c7f0e68",
+ []
+ ],
+ "autocomplete-token-novalid.html": [
+ "761495b52de60d7396479f78419ab71d918a3bff",
+ []
+ ],
+ "autocomplete-work-novalid.html": [
+ "6818e26c89126093368e50d28b246a463c5a3cda",
+ []
+ ]
+ },
"tools": {
"build-svg-tests.py": [
"dd3aa3844e9093cd3970e03677eed748a7df7509",
@@ -299964,10 +300027,6 @@
"345be332be504f37a277788697a5047d60498aa8",
[]
],
- "outline-with-padding-001-ref.html": [
- "62b0c41757dd1bb4e323c8a6753f82c30c98ce7a",
- []
- ],
"text-overflow-001-ref.html": [
"9e9303106a82dea9433ec61fa9ec0df8950ae38f",
[]
@@ -347594,7 +347653,7 @@
[]
],
"virtualenv.py": [
- "400debc88e46910d2641e728fc4adb86a88568e0",
+ "18edcc04fb4d528e6566da10902a9ac964b42a65",
[]
],
"wpt.py": [
@@ -348239,7 +348298,7 @@
[]
],
"wptcommandline.py": [
- "66b97fd89535894ccb0e5b198304c3cf040b2a2d",
+ "5f07e7e6520f028c2d4418a4c2bde782a50a84ae",
[]
],
"wptlogging.py": [
@@ -354250,9 +354309,17 @@
"82be8e7ce72edab7050b14cccc658ff39ddfe632",
[]
],
+ "static-import-syntax-error.js": [
+ "3a20e792c455ee53c26066f99afd79b041a46fb6",
+ []
+ ],
"static-import-worker.js": [
"19a347999d386fd4df8dc831c6d164b27630ef7a",
[]
+ ],
+ "syntax-error.js": [
+ "8c5c4df671bcc3f75ac1e474fc651927e57e8701",
+ []
]
},
"shared-worker-options-credentials.html.headers": [
@@ -399121,7 +399188,7 @@
]
],
"CSSTransition-effect.tentative.html": [
- "a38bc21bde05b95f14963d3a6543cef40f193e5a",
+ "5ccb201082e3c35014648ccda92b1bbf6eef3795",
[
null,
{}
@@ -399176,6 +399243,13 @@
{}
]
],
+ "KeyframeEffect-setKeyframes.tentative.html": [
+ "df11c28234e0a984ead5ecf630f2a80ddff1c4b6",
+ [
+ null,
+ {}
+ ]
+ ],
"KeyframeEffect-target.tentative.html": [
"dbb2a43f784db98317c4d37b32a376f6c27213ce",
[
@@ -402810,6 +402884,13 @@
{}
]
],
+ "update-subpixel-rem-unit.html": [
+ "98d4f00f92ae90165dd9b0c82cf0496523bc9c2a",
+ [
+ null,
+ {}
+ ]
+ ],
"urls": {
"empty.html": [
"3ab7079396c517d7abd6334b0cfadf7eda471115",
@@ -403672,7 +403753,7 @@
]
],
"CSSStyleSheet-constructable-duplicate.html": [
- "30a3ed1d09bbbd779d7b56df91908de948b6bc4b",
+ "579f5d0fcedc44b38ad98a94610e01850a3fef5d",
[
null,
{}
@@ -434246,6 +434327,13 @@
{}
]
],
+ "img-alt-crash-001.html": [
+ "b057967e7e967b1b3113c69f71f1298b86ce4df8",
+ [
+ null,
+ {}
+ ]
+ ],
"img-aspect-ratio.html": [
"eceef92a6418f3d74ffbd13a08d8e648dff42a3f",
[
@@ -434392,7 +434480,7 @@
]
},
"unmapped-attributes.html": [
- "3f457eb492f0b72b2a9c5891e8784d0b69958b38",
+ "5824f836f0d654c116a55a252dfbda5fc6e5bbc8",
[
null,
{}
@@ -560713,7 +560801,7 @@
]
],
"dedicated-worker-import-failure.html": [
- "33eeea261893bc2d920bb348efff7a07f264729f",
+ "4c705e73251f41d8b7ff796cda5a5629968ec130",
[
null,
{}
@@ -560776,6 +560864,13 @@
{}
]
],
+ "dedicated-worker-parse-error-failure.html": [
+ "99eae49fc91296c55c51fb772bc4d46058ea0693",
+ [
+ null,
+ {}
+ ]
+ ],
"shared-worker-import-blob-url.any.js": [
"f56c1a5525f8c46e5d06f6549b3f355c4ccb4a0a",
[
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini
deleted file mode 100644
index f64b45fea6b..00000000000
--- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-002.html]
- [Hit test float]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini
index 4bfb0c2053a..f29da48a2a0 100644
--- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini
@@ -1,4 +1,4 @@
-[hit-test-floats-004.html]
+[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/CSSTransition-effect.tentative.html.ini b/tests/wpt/metadata/css/css-transitions/CSSTransition-effect.tentative.html.ini
index 37478df2204..2f8e485949f 100644
--- a/tests/wpt/metadata/css/css-transitions/CSSTransition-effect.tentative.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/CSSTransition-effect.tentative.html.ini
@@ -23,3 +23,9 @@
[After setting a transition's effect to null, it should be possible to interrupt that transition]
expected: FAIL
+ [A transition with a replaced effect still exhibits the regular transition reversing behavior]
+ expected: FAIL
+
+ [A transition with no effect still returns the original transitionProperty]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html.ini b/tests/wpt/metadata/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html.ini
new file mode 100644
index 00000000000..d024e2da5f6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html.ini
@@ -0,0 +1,16 @@
+[KeyframeEffect-setKeyframes.tentative.html]
+ [A transition with replaced keyframes still returns the original transitionProperty]
+ expected: FAIL
+
+ [Keyframes set using setKeyframes() are reflected in computed style for a running transition]
+ expected: FAIL
+
+ [A transition with no keyframes still exhibits the regular transition reversing behavior]
+ expected: FAIL
+
+ [A transition with replaced keyframes still exhibits the regular transition reversing behavior]
+ expected: FAIL
+
+ [A transition with no keyframes still returns the original transitionProperty]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-ui/outline-with-padding-001.html.ini b/tests/wpt/metadata/css/css-ui/outline-with-padding-001.html.ini
deleted file mode 100644
index b7d0985d37a..00000000000
--- a/tests/wpt/metadata/css/css-ui/outline-with-padding-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[outline-with-padding-001.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-values/update-subpixel-rem-unit.html.ini b/tests/wpt/metadata/css/css-values/update-subpixel-rem-unit.html.ini
new file mode 100644
index 00000000000..948ce05488b
--- /dev/null
+++ b/tests/wpt/metadata/css/css-values/update-subpixel-rem-unit.html.ini
@@ -0,0 +1,4 @@
+[update-subpixel-rem-unit.html]
+ [Check that a 0.1px change in root font-size affect rem units.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
index 628b1fab770..c884dc82eab 100644
--- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini
@@ -2,3 +2,6 @@
[listeners are called when <iframe> is resized]
expected: FAIL
+ [listeners are called correct number of times]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
new file mode 100644
index 00000000000..e38782d8c85
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
@@ -0,0 +1,4 @@
+[elementFromPoint-001.html]
+ [CSSOM View - 5 - extensions to the Document interface]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini
index 171592fc08f..6ef8bb1049f 100644
--- a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-iframes.html.ini
@@ -2,3 +2,6 @@
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL
+ [elementsFromPoint on inner documents]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
new file mode 100644
index 00000000000..e181af5397f
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
@@ -0,0 +1,4 @@
+[elementsFromPoint-invalid-cases.html]
+ [The root element is the last element returned for otherwise empty queries within the viewport]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable-duplicate.html.ini b/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable-duplicate.html.ini
index 02e7376e855..a78d3b49fd2 100644
--- a/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable-duplicate.html.ini
+++ b/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable-duplicate.html.ini
@@ -2,3 +2,15 @@
[Cascade order of a stylesheet for duplicate sheets.]
expected: FAIL
+ [Duplicate stylesheets have the right cascade position in the Document]
+ expected: FAIL
+
+ [Appending duplicate stylesheets yields the correct cascade position in the Document]
+ expected: FAIL
+
+ [Appending duplicate stylesheets yields the correct cascade position in the ShadowRoot]
+ expected: FAIL
+
+ [Duplicate stylesheets have the right cascade position in the ShadowRoot]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index 98f49140596..597ed32e119 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -312,24 +312,18 @@
[fetch(): separate response Content-Type: text/plain ]
expected: NOTRUN
- [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
- expected: FAIL
-
- [<iframe>: separate response Content-Type: text/html;" text/plain]
- expected: FAIL
-
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: */* text/html]
+ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*]
+ [<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
+ [<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index d2df9b78483..279734168dc 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
+ [separate text/javascript;charset=windows-1252 text/javascript]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index 30e1b851fd4..cc50d2d2e03 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,3 +11,9 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
+ [X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
+ expected: FAIL
+
+ [Content-Type-Options%3A%20nosniff]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
new file mode 100644
index 00000000000..385376c7321
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_4.html]
+ [Multiple history traversals, last would be aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
new file mode 100644
index 00000000000..dc2e45516de
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_5.html]
+ [Multiple history traversals, last would be aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini
index c12c0f8ae48..6852d7663de 100644
--- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini
+++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini
@@ -1,4 +1,8 @@
[skip-document-with-fragment.html]
+ expected: TIMEOUT
[Autofocus elements in iframed documents with URL fragments should be skipped.]
expected: FAIL
+ [Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html.ini b/tests/wpt/metadata/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html.ini
new file mode 100644
index 00000000000..9c5e9de0c8e
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html.ini
@@ -0,0 +1,4 @@
+[img-alt-crash-001.html]
+ [Should not crash.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini
index f3e6ba959a0..ca40f8b0d74 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini
@@ -29,3 +29,6 @@
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 37004 more errors.\n\tMax AbsError of 1.9986611604690552e+0 at index of 26105.\n\t[26105\]\t-9.9994289875030518e-1\t9.9871826171875000e-1\t1.9986611604690552e+0\t2.0012262087101997e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 10584.\n\t[10584\]\t-5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL
+ [X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 42281 more errors.\n\tMax AbsError of 1.9986916780471802e+0 at index of 17995.\n\t[17995\]\t9.9994289875030518e-1\t-9.9874877929687500e-1\t1.9986916780471802e+0\t2.0011956154322119e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
index 729e7e05482..9513f7b9674 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
@@ -164,3 +164,9 @@
[X SNR (-158.2459298453396 dB) is not greater than or equal to 65.737. Got -158.2459298453396.]
expected: FAIL
+ [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[19030\]\t3.5714253612646400e+14\t-7.3546999692916870e-1\t3.5714253612646475e+14\t4.8559769619107963e+14\t3.8985999999999999e-3\n\t[19031\]\t-3.6017334461212158e-1\t-6.9157749414443970e-1\t3.3140414953231812e-1\t4.7920030992665957e-1\t3.8985999999999999e-3\n\t[38059\]\t7.0901769751756800e+14\t-9.8956179618835449e-1\t7.0901769751756900e+14\t7.1649663542853025e+14\t3.8985999999999999e-3\n\t[38060\]\t-8.8409073650836945e-2\t-9.9664616584777832e-1\t9.0823709219694138e-1\t9.1129341918891205e-1\t3.8985999999999999e-3\n\tMax AbsError of 7.0901769751756900e+14 at index of 38059.\n\tMax RelError of 7.1649663542853025e+14 at index of 38059.\n]
+ expected: FAIL
+
+ [X SNR (-254.56109005477157 dB) is not greater than or equal to 65.737. Got -254.56109005477157.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
index f584fce5df1..268949ced5c 100644
--- a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
+++ b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
@@ -1,5 +1,4 @@
[005.html]
- expected: ERROR
[dedicated worker in shared worker in dedicated worker]
expected: FAIL
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-address-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-address-novalid.html
new file mode 100644
index 00000000000..a0646214e07
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-address-novalid.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- address type must come before field type -->
+ <input autocomplete="country shipping">
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-empty-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-empty-novalid.html
new file mode 100644
index 00000000000..20b35d678f7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-empty-novalid.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- empty -->
+ <input autocomplete="">
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-section-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-section-novalid.html
new file mode 100644
index 00000000000..9d5e8a1187a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-section-novalid.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- work must come before field type -->
+ <input autocomplete="country section-blue">
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-text-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-text-isvalid.html
new file mode 100644
index 00000000000..2faa347bd28
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-text-isvalid.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is valid</title>
+</head>
+<body>
+
+ <!-- country -->
+ <input autocomplete="country">
+ <input autocomplete="billing country">
+ <input autocomplete="section-blue country">
+ <input autocomplete="section-blue billing country">
+
+ <!-- cc-type -->
+ <input autocomplete="cc-type">
+ <input autocomplete="billing cc-type">
+ <input autocomplete="section-blue cc-type">
+ <input autocomplete="section-blue billing cc-type">
+
+ <!-- cc-exp-month -->
+ <input autocomplete="cc-exp-month">
+ <input autocomplete="billing cc-exp-month">
+ <input autocomplete="section-blue cc-exp-month">
+ <input autocomplete="section-blue billing cc-exp-month">
+
+ <!-- cc-exp-year -->
+ <input autocomplete="cc-exp-year">
+ <input autocomplete="billing cc-exp-year">
+ <input autocomplete="section-blue cc-exp-year">
+ <input autocomplete="section-blue billing cc-exp-year">
+ <!-- tel-country-code -->
+ <input autocomplete="work tel-country-code">
+ <input autocomplete="billing work tel-country-code">
+ <input autocomplete="section-blue work tel-country-code">
+ <input autocomplete="section-blue billing work tel-country-code">
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-token-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-token-novalid.html
new file mode 100644
index 00000000000..544ca79dfdb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-token-novalid.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- unknown field type -->
+ <input autocomplete="qwerty">
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-work-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-work-novalid.html
new file mode 100644
index 00000000000..2ff29bd9cc0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/input/autocomplete-work-novalid.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- work must come before field type -->
+ <input autocomplete="country work">
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/messages.json b/tests/wpt/web-platform-tests/conformance-checkers/messages.json
index 6c0e2c035e9..8e32e24ca2a 100644
--- a/tests/wpt/web-platform-tests/conformance-checkers/messages.json
+++ b/tests/wpt/web-platform-tests/conformance-checkers/messages.json
@@ -967,6 +967,11 @@
"html/elements/img/src/userinfo-username-contains-pile-of-poo-novalid.html": "Bad value \u201chttp://\ud83d\udca9:foo@example.com\u201d for attribute \u201csrc\u201d on element \u201cimg\u201d: Bad URL: Illegal character in user or password: \u201c\ud83d\udca9\u201d is not allowed.",
"html/elements/img/usemap-bad-value-novalid.html": "Bad value \u201c#\u201d for attribute \u201cusemap\u201d on element \u201cimg\u201d: Bad hash-name reference: A hash-name reference must have at least one character after \u201c#\u201d.",
"html/elements/img/width-height-negative-novalid.html": "Bad value \u201c-1\u201d for attribute \u201cwidth\u201d on element \u201cimg\u201d: Bad non-negative integer: Expected a digit but saw \u201c-\u201d instead.",
+ "html/elements/input/autocomplete-address-novalid.html": "Bad value \u201ccountry shipping\u201d for attribute \u201cautocomplete\u201d on element \u201cinput\u201d: The token \u201cshipping\u201d must only appear as either the first token in a list of autofill detail tokens, or, if the first token is a \u201csection-*\u201d indicator, as the second token.",
+ "html/elements/input/autocomplete-empty-novalid.html": "Bad value \u201c\u201d for attribute \u201cautocomplete\u201d on element \u201cinput\u201d: Must not be empty.",
+ "html/elements/input/autocomplete-section-novalid.html": "Bad value \u201ccountry section-blue\u201d for attribute \u201cautocomplete\u201d on element \u201cinput\u201d: A \u201csection-*\u201d indicator must only appear as the first token in a list of autofill detail tokens.",
+ "html/elements/input/autocomplete-token-novalid.html": "Bad value \u201cqwerty\u201d for attribute \u201cautocomplete\u201d on element \u201cinput\u201d: The string \u201cqwerty\u201d is not a valid autofill field name.",
+ "html/elements/input/autocomplete-work-novalid.html": "Bad value \u201ccountry work\u201d for attribute \u201cautocomplete\u201d on element \u201cinput\u201d: The token \u201cwork\u201d must only appear before any autofill field names.",
"html/elements/input/list-novalid.html": "The \u201clist\u201d attribute of the \u201cinput\u201d element must refer to a \u201cdatalist\u201d element.",
"html/elements/input/type-image-formaction-empty-novalid.html": "Bad value \u201c\u201d for attribute \u201cformaction\u201d on element \u201cinput\u201d: Bad URL: Must be non-empty.",
"html/elements/input/type-image-formaction-whitespace-only-novalid.html": "Bad value \u201c\t \n\u201d for attribute \u201cformaction\u201d on element \u201cinput\u201d: Bad URL: Must be non-empty.",
@@ -2360,6 +2365,16 @@
"html/parser/u10ffff-charref-novalid.html": "Character reference expands to an astral non-character (U+10ffff).",
"html/parser/ufffe-charref-novalid.html": "Character reference expands to a non-character (U+fffe).",
"html/parser/unassigned-charref-novalid.html": "Character reference expands to a permanently unassigned code point.",
+ "select/autocomplete-address-novalid.html": "Bad value \u201ccountry shipping\u201d for attribute \u201cautocomplete\u201d on element \u201cselect\u201d: Bad autocomplete detail tokens (any): The token \u201cshipping\u201d must only appear as either the first token in a list of autofill detail tokens, or, if the first token is a \u201csection-*\u201d indicator, as the second token.",
+ "select/autocomplete-empty-novalid.html": "Bad value \u201c\u201d for attribute \u201cautocomplete\u201d on element \u201cselect\u201d: Bad autocomplete detail tokens (any): Must not be empty.",
+ "select/autocomplete-section-novalid.html": "Bad value \u201ccountry section-blue\u201d for attribute \u201cautocomplete\u201d on element \u201cselect\u201d: Bad autocomplete detail tokens (any): A \u201csection-*\u201d indicator must only appear as the first token in a list of autofill detail tokens.",
+ "select/autocomplete-token-novalid.html": "Bad value \u201cqwerty\u201d for attribute \u201cautocomplete\u201d on element \u201cselect\u201d: Bad autocomplete detail tokens (any): The string \u201cqwerty\u201d is not a valid autofill field name.",
+ "select/autocomplete-work-novalid.html": "Bad value \u201ccountry work\u201d for attribute \u201cautocomplete\u201d on element \u201cselect\u201d: Bad autocomplete detail tokens (any): The token \u201cwork\u201d must only appear before any autofill field names.",
+ "textarea/autocomplete-address-novalid.html": "Bad value \u201ccountry shipping\u201d for attribute \u201cautocomplete\u201d on element \u201ctextarea\u201d: Bad autocomplete detail tokens (any): The token \u201cshipping\u201d must only appear as either the first token in a list of autofill detail tokens, or, if the first token is a \u201csection-*\u201d indicator, as the second token.",
+ "textarea/autocomplete-empty-novalid.html": "Bad value \u201c\u201d for attribute \u201cautocomplete\u201d on element \u201ctextarea\u201d: Bad autocomplete detail tokens (any): Must not be empty.",
+ "textarea/autocomplete-section-novalid.html": "Bad value \u201ccountry section-blue\u201d for attribute \u201cautocomplete\u201d on element \u201ctextarea\u201d: Bad autocomplete detail tokens (any): A \u201csection-*\u201d indicator must only appear as the first token in a list of autofill detail tokens.",
+ "textarea/autocomplete-token-novalid.html": "Bad value \u201cqwerty\u201d for attribute \u201cautocomplete\u201d on element \u201ctextarea\u201d: Bad autocomplete detail tokens (any): The string \u201cqwerty\u201d is not a valid autofill field name.",
+ "textarea/autocomplete-work-novalid.html": "Bad value \u201ccountry work\u201d for attribute \u201cautocomplete\u201d on element \u201ctextarea\u201d: Bad autocomplete detail tokens (any): The token \u201cwork\u201d must only appear before any autofill field names.",
"xhtml/attributes/accesskey/003-novalid.xhtml": "Bad value \u201ca b \u306c c \u306c\u201d for attribute \u201caccesskey\u201d on element \u201ca\u201d: Bad key label list: Duplicate key label. Each key label must be unique.",
"xhtml/attributes/accesskey/004-novalid.xhtml": "Bad value \u201ca b \u307b\u3052\u201d for attribute \u201caccesskey\u201d on element \u201ca\u201d: Bad key label list: Key label has multiple characters. Each key label must be a single character.",
"xhtml/attributes/data/002-novalid.xhtml": "\u201cdata-*\u201d attributes must not have characters from the range \u201cA\u201d\u2026\u201cZ\u201d in the name.",
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-address-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-address-novalid.html
new file mode 100644
index 00000000000..7e4087ab376
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-address-novalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- address type must come before field type -->
+ <select autocomplete="country shipping">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-empty-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-empty-novalid.html
new file mode 100644
index 00000000000..a45757df2d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-empty-novalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- empty -->
+ <select autocomplete="">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-isvalid.html
new file mode 100644
index 00000000000..065b764b3d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-isvalid.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is valid</title>
+</head>
+<body>
+
+ <select autocomplete="on"></select>
+ <select autocomplete="off"></select>
+
+ <!-- country -->
+ <select autocomplete="country">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+ <select autocomplete="billing country">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+ <select autocomplete="section-blue country">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+ <select autocomplete="section-blue billing country">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+ <!-- cc-type -->
+ <select autocomplete="cc-type">
+ <option>Visa</option>
+ <option>Mastercard</option>
+ </select>
+
+ <select autocomplete="billing cc-type">
+ <option>Visa</option>
+ <option>Mastercard</option>
+ </select>
+
+ <select autocomplete="section-blue cc-type">
+ <option>Visa</option>
+ <option>Mastercard</option>
+ </select>
+
+ <select autocomplete="section-blue billing cc-type">
+ <option>Visa</option>
+ <option>Mastercard</option>
+ </select>
+
+ <!-- cc-exp-month -->
+ <select autocomplete="cc-exp-month">
+ <option>01</option>
+ <option>02</option>
+ <option>03</option>
+ <option>04</option>
+ <option>05</option>
+ <option>06</option>
+ <option>07</option>
+ <option>08</option>
+ <option>09</option>
+ <option>10</option>
+ <option>11</option>
+ <option>12</option>
+ </select>
+
+ <select autocomplete="billing cc-exp-month">
+ <option>01</option>
+ <option>02</option>
+ <option>03</option>
+ <option>04</option>
+ <option>05</option>
+ <option>06</option>
+ <option>07</option>
+ <option>08</option>
+ <option>09</option>
+ <option>10</option>
+ <option>11</option>
+ <option>12</option>
+ </select>
+
+ <select autocomplete="section-blue cc-exp-month">
+ <option>01</option>
+ <option>02</option>
+ <option>03</option>
+ <option>04</option>
+ <option>05</option>
+ <option>06</option>
+ <option>07</option>
+ <option>08</option>
+ <option>09</option>
+ <option>10</option>
+ <option>11</option>
+ <option>12</option>
+ </select>
+
+ <select autocomplete="section-blue billing cc-exp-month">
+ <option>01</option>
+ <option>02</option>
+ <option>03</option>
+ <option>04</option>
+ <option>05</option>
+ <option>06</option>
+ <option>07</option>
+ <option>08</option>
+ <option>09</option>
+ <option>10</option>
+ <option>11</option>
+ <option>12</option>
+ </select>
+
+ <!-- cc-exp-year -->
+ <select autocomplete="cc-exp-year">
+ <option>2020</option>
+ <option>2021</option>
+ <option>2022</option>
+ </select>
+
+ <select autocomplete="billing cc-exp-year">
+ <option>2020</option>
+ <option>2021</option>
+ <option>2022</option>
+ </select>
+
+ <select autocomplete="section-blue cc-exp-year">
+ <option>2020</option>
+ <option>2021</option>
+ <option>2022</option>
+ </select>
+
+ <select autocomplete="section-blue billing cc-exp-year">
+ <option>2020</option>
+ <option>2021</option>
+ <option>2022</option>
+ </select>
+
+ <!-- tel-country-code -->
+ <select autocomplete="work tel-country-code">
+ <option>+1 US</option>
+ <option>+33 France</option>
+ <option>+44 UK</option>
+ <option>+81 Japan</option>
+ </select>
+
+ <select autocomplete="billing work tel-country-code">
+ <option>+1 US</option>
+ <option>+33 France</option>
+ <option>+44 UK</option>
+ <option>+81 Japan</option>
+ </select>
+
+ <select autocomplete="section-blue work tel-country-code">
+ <option>+1 US</option>
+ <option>+33 France</option>
+ <option>+44 UK</option>
+ <option>+81 Japan</option>
+ </select>
+
+ <select autocomplete="section-blue billing work tel-country-code">
+ <option>+1 US</option>
+ <option>+33 France</option>
+ <option>+44 UK</option>
+ <option>+81 Japan</option>
+ </select>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-section-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-section-novalid.html
new file mode 100644
index 00000000000..084fc2c9176
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-section-novalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- work must come before field type -->
+ <select autocomplete="country section-blue">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-token-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-token-novalid.html
new file mode 100644
index 00000000000..267c4d40c28
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-token-novalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- unknown field type -->
+ <select autocomplete="qwerty">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-work-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-work-novalid.html
new file mode 100644
index 00000000000..c26b4f8531f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/select/autocomplete-work-novalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- work must come before field type -->
+ <select autocomplete="country work">
+ <option>US</option>
+ <option>France</option>
+ <option>UK</option>
+ <option>Japan</option>
+ </select>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-address-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-address-novalid.html
new file mode 100644
index 00000000000..1061d9a6202
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-address-novalid.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- address type must come before field type -->
+ <textarea autocomplete="country shipping">
+ </textarea>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-empty-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-empty-novalid.html
new file mode 100644
index 00000000000..d222846b4ff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-empty-novalid.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- empty -->
+ <textarea autocomplete="">
+ </textarea>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-isvalid.html
new file mode 100644
index 00000000000..23bdb9ab8fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-isvalid.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is valid</title>
+</head>
+<body>
+
+ <textarea autocomplete="on"></textarea>
+ <textarea autocomplete="off"></textarea>
+
+ <!-- country -->
+ <textarea autocomplete="country">
+ </textarea>
+
+ <textarea autocomplete="billing country">
+ </textarea>
+
+ <textarea autocomplete="section-blue country">
+ </textarea>
+
+ <textarea autocomplete="section-blue billing country">
+ </textarea>
+
+ <!-- cc-type -->
+ <textarea autocomplete="cc-type">
+ </textarea>
+
+ <textarea autocomplete="billing cc-type">
+ </textarea>
+
+ <textarea autocomplete="section-blue cc-type">
+ </textarea>
+
+ <textarea autocomplete="section-blue billing cc-type">
+ </textarea>
+
+ <!-- cc-exp-month -->
+ <textarea autocomplete="cc-exp-month">
+ </textarea>
+
+ <textarea autocomplete="billing cc-exp-month">
+ </textarea>
+
+ <textarea autocomplete="section-blue cc-exp-month">
+ </textarea>
+
+ <textarea autocomplete="section-blue billing cc-exp-month">
+ </textarea>
+
+ <!-- cc-exp-year -->
+ <textarea autocomplete="cc-exp-year">
+ </textarea>
+
+ <textarea autocomplete="billing cc-exp-year">
+ </textarea>
+
+ <textarea autocomplete="section-blue cc-exp-year">
+ </textarea>
+
+ <textarea autocomplete="section-blue billing cc-exp-year">
+ </textarea>
+
+ <!-- tel-country-code -->
+ <textarea autocomplete="work tel-country-code">
+ </textarea>
+
+ <textarea autocomplete="billing work tel-country-code">
+ </textarea>
+
+ <textarea autocomplete="section-blue work tel-country-code">
+ </textarea>
+
+ <textarea autocomplete="section-blue billing work tel-country-code">
+ </textarea>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-section-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-section-novalid.html
new file mode 100644
index 00000000000..ec1038b00f3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-section-novalid.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- work must come before field type -->
+ <textarea autocomplete="country section-blue">
+ </textarea>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-token-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-token-novalid.html
new file mode 100644
index 00000000000..761495b52de
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-token-novalid.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- unknown field type -->
+ <textarea autocomplete="qwerty">
+ </textarea>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-work-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-work-novalid.html
new file mode 100644
index 00000000000..6818e26c891
--- /dev/null
+++ b/tests/wpt/web-platform-tests/conformance-checkers/textarea/autocomplete-work-novalid.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>autocomplete attribute is invalid</title>
+</head>
+<body>
+
+ <!-- work must come before field type -->
+ <textarea autocomplete="country work">
+ </textarea>
+
+</body>
+</html>
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-transitions/CSSTransition-effect.tentative.html b/tests/wpt/web-platform-tests/css/css-transitions/CSSTransition-effect.tentative.html
index a38bc21bde0..5ccb201082e 100644
--- a/tests/wpt/web-platform-tests/css/css-transitions/CSSTransition-effect.tentative.html
+++ b/tests/wpt/web-platform-tests/css/css-transitions/CSSTransition-effect.tentative.html
@@ -179,7 +179,6 @@ promise_test(async t => {
transition.effect = new KeyframeEffect(div,
{ marginLeft: [ '0px' , '100px'] },
100 * MS_PER_SEC);
- assert_equals(transition.transitionProperty, 'left');
assert_true(transition.pending);
// As a sanity check, check that the transition actually exits the
@@ -189,4 +188,52 @@ promise_test(async t => {
}, 'After setting a new keyframe effect on a play-pending transition,'
+ ' the transition remains pending');
+test(t => {
+ const div = addDiv(t);
+
+ div.style.left = '0px';
+ getComputedStyle(div).transitionProperty;
+ div.style.transition = 'left 100s';
+ div.style.left = '100px';
+
+ const transition = div.getAnimations()[0];
+ transition.effect = null;
+
+ assert_equals(transition.transitionProperty, 'left');
+}, 'A transition with no effect still returns the original transitionProperty');
+
+test(t => {
+ const div = addDiv(t);
+
+ div.style.left = '0px';
+ getComputedStyle(div).transitionProperty;
+ div.style.transition = 'left 100s';
+ div.style.left = '100px';
+
+ const transition = div.getAnimations()[0];
+
+ // Seek to the middle and get the portion.
+ transition.currentTime = 50 * MS_PER_SEC;
+ const portion = transition.effect.getComputedTiming().progress;
+
+ // Replace the effect but keep the original timing
+ transition.effect = new KeyframeEffect(
+ div,
+ { top: ['200px', '300px', '100px'] },
+ transition.effect.getTiming()
+ );
+
+ // Reverse the transition
+ div.style.left = '0px';
+ const reversedTransition = div.getAnimations()[0];
+
+ const expectedDuration = 100 * MS_PER_SEC * portion;
+ assert_approx_equals(
+ reversedTransition.effect.getComputedTiming().activeDuration,
+ expectedDuration,
+ 1
+ );
+}, 'A transition with a replaced effect still exhibits the regular transition'
+ + ' reversing behavior');
+
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html b/tests/wpt/web-platform-tests/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html
new file mode 100644
index 00000000000..df11c28234e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html
@@ -0,0 +1,117 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>KeyframeEffect.setKeyframes() for CSS transitions</title>
+<!-- TODO: Add a more specific link for this once it is specified. -->
+<link rel="help" href="https://drafts.csswg.org/css-transitions-2/#csstransition">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/helper.js"></script>
+<div id="log"></div>
+<script>
+'use strict';
+
+test(t => {
+ const div = addDiv(t);
+
+ div.style.left = '0px';
+ getComputedStyle(div).transitionProperty;
+ div.style.transition = 'left 100s';
+ div.style.left = '100px';
+
+ const transition = div.getAnimations()[0];
+ transition.effect.setKeyframes({ left: ['200px', '300px', '100px'] });
+
+ assert_equals(getComputedStyle(div).left, '200px');
+}, 'Keyframes set using setKeyframes() are reflected in computed style for'
+ + ' a running transition');
+
+test(t => {
+ const div = addDiv(t);
+
+ div.style.left = '0px';
+ getComputedStyle(div).transitionProperty;
+ div.style.transition = 'left 100s';
+ div.style.left = '100px';
+
+ const transition = div.getAnimations()[0];
+ transition.effect.setKeyframes({ top: ['0px', '100px', '300px'] });
+
+ assert_equals(transition.transitionProperty, 'left');
+}, 'A transition with replaced keyframes still returns the original'
+ + ' transitionProperty');
+
+test(t => {
+ const div = addDiv(t);
+
+ div.style.left = '0px';
+ getComputedStyle(div).transitionProperty;
+ div.style.transition = 'left 100s';
+ div.style.left = '100px';
+
+ const transition = div.getAnimations()[0];
+ transition.effect.setKeyframes({ });
+
+ assert_equals(transition.transitionProperty, 'left');
+}, 'A transition with no keyframes still returns the original'
+ + ' transitionProperty');
+
+test(t => {
+ const div = addDiv(t);
+
+ div.style.left = '0px';
+ getComputedStyle(div).transitionProperty;
+ div.style.transition = 'left 100s';
+ div.style.left = '100px';
+
+ const transition = div.getAnimations()[0];
+
+ // Seek to the middle and get the portion.
+ //
+ // We deliberately DON'T set transition-timing-function to linear so that we
+ // can test that it is applied correctly.
+ transition.currentTime = 50 * MS_PER_SEC;
+ const portion = transition.effect.getComputedTiming().progress;
+
+ transition.effect.setKeyframes({ top: ['200px', '300px', '100px'] });
+
+ // Reverse transition
+ div.style.left = '0px';
+ const reversedTransition = div.getAnimations()[0];
+
+ const expectedDuration = 100 * MS_PER_SEC * portion;
+ assert_approx_equals(
+ reversedTransition.effect.getComputedTiming().activeDuration,
+ expectedDuration,
+ 1
+ );
+}, 'A transition with replaced keyframes still exhibits the regular transition'
+ + ' reversing behavior');
+
+test(t => {
+ const div = addDiv(t);
+
+ div.style.left = '0px';
+ getComputedStyle(div).transitionProperty;
+ div.style.transition = 'left 100s';
+ div.style.left = '100px';
+
+ const transition = div.getAnimations()[0];
+
+ transition.currentTime = 50 * MS_PER_SEC;
+ const portion = transition.effect.getComputedTiming().progress;
+
+ transition.effect.setKeyframes({ });
+
+ div.style.left = '0px';
+ const reversedTransition = div.getAnimations()[0];
+
+ const expectedDuration = 100 * MS_PER_SEC * portion;
+ assert_approx_equals(
+ reversedTransition.effect.getComputedTiming().activeDuration,
+ expectedDuration,
+ 1
+ );
+}, 'A transition with no keyframes still exhibits the regular transition'
+ + ' reversing behavior');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-ui/outline-with-padding-001.html b/tests/wpt/web-platform-tests/css/css-ui/outline-with-padding-001.html
deleted file mode 100644
index 716491ca25e..00000000000
--- a/tests/wpt/web-platform-tests/css/css-ui/outline-with-padding-001.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<title>Outline with padding</title>
-<link rel="match" href="reference/outline-with-padding-001-ref.html">
-<link rel="help" href="https://drafts.csswg.org/css-ui/#outline-props">
-<link rel="help" href="https://crbug.com/1048070">
-<link rel="author" href="mailto:kojii@chromium.org">
-<meta name="assert" content="Tests the rendering of outline applied to a box with padding">
-<style>
-inline-block {
- display: inline-block;
- width: 65px;
- color: transparent;
- background: orange;
-}
-</style>
-<body>
-<div style="display: flex">
- <span style="padding-left: 99px; outline: auto">
- <span>
- <inline-block>Previous</inline-block>
- </span>
- </span>
-</div>
-
-<div style="width: 50px; padding-left: 99px; outline: auto">
- <span>
- <inline-block>Previous</inline-block>
- </span>
-</div>
-</body>
diff --git a/tests/wpt/web-platform-tests/css/css-ui/reference/outline-with-padding-001-ref.html b/tests/wpt/web-platform-tests/css/css-ui/reference/outline-with-padding-001-ref.html
deleted file mode 100644
index 62b0c41757d..00000000000
--- a/tests/wpt/web-platform-tests/css/css-ui/reference/outline-with-padding-001-ref.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<style>
-inline-block {
- display: inline-block;
- width: 65px;
- color: transparent;
- background: orange;
-}
-spacer {
- display: inline-block;
- width: 99px;
-}
-</style>
-<body>
-<div style="display: flex">
- <span style="outline: auto">
- <spacer></spacer><inline-block>Previous</inline-block>
- </span>
-</div>
-
-<div style="display: inline-block; outline: auto; white-space: nowrap;">
- <spacer></spacer><inline-block>Previous</inline-block>
-</div>
-</body>
diff --git a/tests/wpt/web-platform-tests/css/css-values/update-subpixel-rem-unit.html b/tests/wpt/web-platform-tests/css/css-values/update-subpixel-rem-unit.html
new file mode 100644
index 00000000000..98d4f00f92a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-values/update-subpixel-rem-unit.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<html style="font-size:16px">
+<head>
+ <title>CSS Values and Units Test: rem subpixel change</title>
+ <link rel="help" href="https://drafts.csswg.org/css-values/#rem">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+ <div style="font-size:16px">
+ <div id="remElement" style="width: 10rem"></div>
+ </div>
+ <script>
+ test(() => {
+ assert_equals(getComputedStyle(remElement).width, "160px");
+ document.documentElement.style.fontSize = "16.1px";
+ assert_equals(getComputedStyle(remElement).width, "161px");
+ }, "Check that a 0.1px change in root font-size affect rem units.");
+ </script>
+<body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable-duplicate.html b/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable-duplicate.html
index 30a3ed1d09b..579f5d0fced 100644
--- a/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable-duplicate.html
+++ b/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable-duplicate.html
@@ -4,17 +4,81 @@
<link rel="help" href="https://wicg.github.io/construct-stylesheets/">
<script src = '/resources/testharness.js'></script>
<script src = '/resources/testharnessreport.js'></script>
-<div></div>
+<div id="target"></div>
<script>
-test(function() {
- let sheets = [];
- for (let i = 0; i < 2; ++i) {
+function attachShadowDiv(host) {
+ const shadowRoot = host.attachShadow({mode: 'open'});
+ const shadowDiv = document.createElement("div");
+ shadowRoot.appendChild(shadowDiv);
+ return shadowDiv;
+}
+
+function blueSheetsWithIncreasingZIndex(n) {
+ let sheets = [];
+ for (let i = 0; i < n; ++i) {
sheets.push(new CSSStyleSheet());
- sheets[i].replaceSync("div { z-index: " + i + " }");
+ sheets[i].replaceSync("div { z-index: " + i + "; color: blue; }");
}
+ return sheets;
+}
+
+let sheets = [];
+
+test(function() {
+ sheets = blueSheetsWithIncreasingZIndex(2);
document.adoptedStyleSheets = [sheets[1], sheets[0], sheets[1]];
assert_equals(getComputedStyle(document.querySelector("div")).zIndex, "1", "duplicate stylesheet should take right position in the cascade");
-});
+
+ document.adoptedStyleSheets = [];
+}, "Duplicate stylesheets have the right cascade position in the Document");
+
+test(function() {
+ sheets = blueSheetsWithIncreasingZIndex(2);
+
+ const sheet = new CSSStyleSheet();
+ sheet.replaceSync("div { color: red; }");
+
+ document.adoptedStyleSheets = [sheets[1], sheets[0]];
+ assert_equals(getComputedStyle(document.querySelector("div")).zIndex, "0", "backmost stylesheet should take precedence");
+ assert_equals(getComputedStyle(document.querySelector("div")).color, "rgb(0, 0, 255)", "backmost stylesheet should take precedence");
+
+ document.adoptedStyleSheets = [sheets[1], sheets[0], sheets[1], sheet];
+ assert_equals(getComputedStyle(document.querySelector("div")).zIndex, "1", "duplicate stylesheet should take the right position in the cascade");
+ assert_equals(getComputedStyle(document.querySelector("div")).color, "rgb(255, 0, 0)", "backmost stylesheet should take precedence");
+
+ document.adoptedStyleSheets = [];
+}, "Appending duplicate stylesheets yields the correct cascade position in the Document");
+
+test(function() {
+ sheets = blueSheetsWithIncreasingZIndex(2);
+
+ const span = document.createElement("span");
+ target.appendChild(span);
+ attachShadowDiv(span);
+
+ span.shadowRoot.adoptedStyleSheets = [sheets[1], sheets[0], sheets[1]];
+ assert_equals(getComputedStyle(span.shadowRoot.querySelector("div")).zIndex, "1", "duplicate stylesheet should take right position in the cascade");
+}, "Duplicate stylesheets have the right cascade position in the ShadowRoot");
+
+test(function() {
+ sheets = blueSheetsWithIncreasingZIndex(2);
+
+ const sheet = new CSSStyleSheet();
+ sheet.replaceSync("div { color: red; }");
+
+ const span = document.createElement("span");
+ target.appendChild(span);
+ attachShadowDiv(span);
+
+ span.shadowRoot.adoptedStyleSheets = [sheets[1], sheets[0]];
+ assert_equals(getComputedStyle(span.shadowRoot.querySelector("div")).zIndex, "0", "backmost stylesheet should take precedence");
+ assert_equals(getComputedStyle(span.shadowRoot.querySelector("div")).color, "rgb(0, 0, 255)", "backmost stylesheet should take precedence");
+
+ span.shadowRoot.adoptedStyleSheets = [sheets[1], sheets[0], sheets[1], sheet];
+ assert_equals(getComputedStyle(span.shadowRoot.querySelector("div")).zIndex, "1", "duplicate stylesheet should take right position in the cascade");
+ assert_equals(getComputedStyle(span.shadowRoot.querySelector("div")).color, "rgb(255, 0, 0)", "backmost stylesheet should take precedence");
+}, "Appending duplicate stylesheets yields the correct cascade position in the ShadowRoot");
+
</script>
diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html
new file mode 100644
index 00000000000..b057967e7e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<title>Crash test: img alt rendering in combination with style attribute selector</title>
+<link rel="help" href="https://crbug.com/1057210">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ img { display: block; width: 100px; }
+ [style] + * {}
+</style>
+<img id="img" alt="alternative text">
+<script>
+ test(() => {
+ assert_equals(getComputedStyle(img).width, "100px");
+ }, "Should not crash.");
+</script>
diff --git a/tests/wpt/web-platform-tests/html/rendering/unmapped-attributes.html b/tests/wpt/web-platform-tests/html/rendering/unmapped-attributes.html
index 3f457eb492f..5824f836f0d 100644
--- a/tests/wpt/web-platform-tests/html/rendering/unmapped-attributes.html
+++ b/tests/wpt/web-platform-tests/html/rendering/unmapped-attributes.html
@@ -52,6 +52,10 @@ const tests = [
[ newElem("iframe"), "border", "borderRightWidth" ],
[ newElem("iframe"), "border", "borderBottomWidth" ],
[ newElem("iframe"), "border", "borderLeftWidth" ],
+ [ newElem("iframe"), "hspace", "marginLeft" ],
+ [ newElem("iframe"), "hspace", "marginRight" ],
+ [ newElem("iframe"), "vspace", "marginTop" ],
+ [ newElem("iframe"), "vspace", "marginBottom" ],
[ newElem("marquee"), "border", "borderTopWidth" ],
[ newElem("marquee"), "border", "borderRightWidth" ],
[ newElem("marquee"), "border", "borderBottomWidth" ],
diff --git a/tests/wpt/web-platform-tests/tools/wpt/virtualenv.py b/tests/wpt/web-platform-tests/tools/wpt/virtualenv.py
index 400debc88e4..18edcc04fb4 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/virtualenv.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/virtualenv.py
@@ -32,7 +32,9 @@ class Virtualenv(object):
@property
def exists(self):
- return os.path.isdir(self.path)
+ # We need to check also for lib_path because different python versions
+ # create different library paths.
+ return os.path.isdir(self.path) and os.path.isdir(self.lib_path)
@property
def broken_link(self):
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py
index 66b97fd8953..5f07e7e6520 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py
@@ -5,7 +5,7 @@ import sys
from collections import OrderedDict
from distutils.spawn import find_executable
from datetime import timedelta
-from six import iterkeys, itervalues, iteritems, string_types
+from six import iterkeys, itervalues, iteritems
from . import config
from . import wpttest
@@ -538,9 +538,6 @@ def check_args(kwargs):
kwargs["certutil_binary"] = path
if kwargs['extra_prefs']:
- # If a single pref is passed in as a string, make it a list
- if isinstance(kwargs['extra_prefs'], string_types):
- kwargs['extra_prefs'] = [kwargs['extra_prefs']]
missing = any('=' not in prefarg for prefarg in kwargs['extra_prefs'])
if missing:
print("Preferences via --setpref must be in key=value format", file=sys.stderr)
diff --git a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html
index 33eeea26189..4c705e73251 100644
--- a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html
+++ b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html
@@ -13,12 +13,6 @@ promise_test(async () => {
}, 'importScripts() on module worker should throw an exception.');
promise_test(() => {
- const scriptURL = 'resources/static-import-worker.js';
- const worker = new Worker(scriptURL, { type: 'classic' });
- return new Promise(resolve => worker.onerror = resolve);
-}, 'Static import on classic worker should throw an exception.');
-
-promise_test(() => {
const scriptURL = 'resources/non-existent-worker.js';
const worker = new Worker(scriptURL, { type: 'module' });
return new Promise(resolve => worker.onerror = resolve);
diff --git a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-parse-error-failure.html b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-parse-error-failure.html
new file mode 100644
index 00000000000..99eae49fc91
--- /dev/null
+++ b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-parse-error-failure.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<title>DedicatedWorker: parse error failure</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script> setup({allow_uncaught_exception: true}); </script>
+<script>
+
+promise_test(async () => {
+ const scriptURL = 'resources/syntax-error.js';
+ const worker = new Worker(scriptURL, { type: 'classic' });
+ return new Promise(resolve => worker.onerror = resolve);
+}, 'Classic worker construction for script with syntax error should dispatch ' +
+ 'an ErrorEvent.');
+
+promise_test(async () => {
+ const scriptURL = 'resources/syntax-error.js';
+ const worker = new Worker(scriptURL, { type: 'module' });
+ return new Promise(resolve => worker.onerror = resolve);
+}, 'Module worker construction for script with syntax error should dispatch ' +
+ 'an ErrorEvent.');
+
+promise_test(async () => {
+ const scriptURL = 'resources/static-import-syntax-error.js';
+ const worker = new Worker(scriptURL, { type: 'module' });
+ return new Promise(resolve => worker.onerror = resolve);
+}, 'Static import on module worker for script with syntax error should ' +
+ 'dispatch an ErrorEvent.');
+
+promise_test(() => {
+ const scriptURL = 'resources/static-import-worker.js';
+ const worker = new Worker(scriptURL, { type: 'classic' });
+ return new Promise(resolve => worker.onerror = resolve);
+}, 'Static import on classic worker should dispatch an ErrorEvent.');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/workers/modules/resources/static-import-syntax-error.js b/tests/wpt/web-platform-tests/workers/modules/resources/static-import-syntax-error.js
new file mode 100644
index 00000000000..3a20e792c45
--- /dev/null
+++ b/tests/wpt/web-platform-tests/workers/modules/resources/static-import-syntax-error.js
@@ -0,0 +1 @@
+import * as module from './syntax-error.js';
diff --git a/tests/wpt/web-platform-tests/workers/modules/resources/syntax-error.js b/tests/wpt/web-platform-tests/workers/modules/resources/syntax-error.js
new file mode 100644
index 00000000000..8c5c4df671b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/workers/modules/resources/syntax-error.js
@@ -0,0 +1 @@
+1 + ;