aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini (renamed from tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini)2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/abspos-descendent-001.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-size.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/position-relative-percentage-top-001.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-obb-dimensions.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-on-span.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini11
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini5
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini)2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini7
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini70
-rw-r--r--tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini6
-rw-r--r--tests/wpt/metadata/MANIFEST.json436
-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/CSS2/floats/hit-test-floats-005.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/abspos-descendent-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/percentage-size.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/position-relative-percentage-top-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini3
-rw-r--r--tests/wpt/metadata/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini2
-rw-r--r--tests/wpt/metadata/css/filter-effects/effect-reference-obb-dimensions.html.ini2
-rw-r--r--tests/wpt/metadata/css/filter-effects/effect-reference-on-span.html.ini2
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini11
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini5
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini (renamed from tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini)2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini7
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini70
-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/web-platform-tests/common/rendering-utils.js19
-rw-r--r--tests/wpt/web-platform-tests/content-index/content-index.https.window.js88
-rw-r--r--tests/wpt/web-platform-tests/content-index/resources.js40
-rw-r--r--tests/wpt/web-platform-tests/content-index/resources/sw.js0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js10
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_opaque_origin.tentative.https.html73
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-063.html62
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-063-ref.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/abspos-descendent-001.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-022.html14
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/percentage-size.html108
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/position-relative-percentage-top-001.html43
-rw-r--r--tests/wpt/web-platform-tests/css/css-pseudo/active-selection-063.html59
-rw-r--r--tests/wpt/web-platform-tests/css/css-pseudo/reference/ref-filled-green-100px-square.xht19
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html11
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/effect-reference-delete.html27
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/effect-reference-displacement-negative-scale-001.html18
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/effect-reference-merge-no-inputs.tentative.html27
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/effect-reference-obb-dimensions.html28
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/effect-reference-on-span.html19
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-001.html23
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-002.html27
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/filter-region-negative-positioned-child-001.html41
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/filter-region-transformed-child-001.html30
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference-filter-update-on-attribute-change-001.html24
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-delete-ref.html5
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html16
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-on-span-ref.html5
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-001-ref.html12
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-002-ref.html7
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html33
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-transformed-child-001-ref.html23
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html11
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html4
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-001-ref.html (renamed from tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-0001-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-002-ref.html7
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/root-element-with-opacity-filter-001.html9
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/support/filter-from-external-url.css3
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-001.html (renamed from tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-0001.html)2
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-002.html17
-rw-r--r--tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html134
-rw-r--r--tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html123
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/natural-size-orientation.html45
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-interactive-content.html123
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-labelable-content.html112
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html119
-rw-r--r--tests/wpt/web-platform-tests/images/arrow-oriented-upright.jpgbin0 -> 1790 bytes
-rw-r--r--tests/wpt/web-platform-tests/interfaces/css-typed-om.idl82
-rw-r--r--tests/wpt/web-platform-tests/interfaces/permissions.idl4
-rw-r--r--tests/wpt/web-platform-tests/interfaces/worklets.idl2
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html49
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb8
-rw-r--r--tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py7
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py24
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py23
-rw-r--r--tests/wpt/web-platform-tests/trust-tokens/end-to-end/README.txt4
-rw-r--r--tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token-with-no-top-frame.tentative.https.html22
-rw-r--r--tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token.tentative.https.html58
108 files changed, 2610 insertions, 110 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini
deleted file mode 100644
index f64b45fea6b..00000000000
--- a/tests/wpt/metadata-layout-2020/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-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini
index 4bfb0c2053a..f29da48a2a0 100644
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-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-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini
new file mode 100644
index 00000000000..baa9f1a7541
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-005.html]
+ [Miss clipped float]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos-descendent-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos-descendent-001.html.ini
new file mode 100644
index 00000000000..c7ab3aaec53
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos-descendent-001.html.ini
@@ -0,0 +1,4 @@
+[abspos-descendent-001.html]
+ [.flexbox 1]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini
new file mode 100644
index 00000000000..3e8f11fced8
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini
@@ -0,0 +1,2 @@
+[flex-minimum-height-flex-items-022.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini
new file mode 100644
index 00000000000..adb4df5cbe5
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini
@@ -0,0 +1,4 @@
+[orthogonal-writing-modes-and-intrinsic-sizing.html]
+ [.flexbox 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-size.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-size.html.ini
new file mode 100644
index 00000000000..936f73befed
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-size.html.ini
@@ -0,0 +1,4 @@
+[percentage-size.html]
+ [.flexbox 8]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/position-relative-percentage-top-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/position-relative-percentage-top-001.html.ini
new file mode 100644
index 00000000000..ff13b3f9f52
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/position-relative-percentage-top-001.html.ini
@@ -0,0 +1,4 @@
+[position-relative-percentage-top-001.html]
+ [.border 1]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
index c131078eace..23c61ede1a1 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
@@ -17,3 +17,6 @@
[test the top of layer]
expected: FAIL
+ [test some point of the element: top left corner]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini
new file mode 100644
index 00000000000..18c6eafbf16
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini
@@ -0,0 +1,2 @@
+[effect-reference-displacement-negative-scale-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini
new file mode 100644
index 00000000000..45615ee1b57
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini
@@ -0,0 +1,2 @@
+[effect-reference-merge-no-inputs.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-obb-dimensions.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-obb-dimensions.html.ini
new file mode 100644
index 00000000000..9937095d513
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-obb-dimensions.html.ini
@@ -0,0 +1,2 @@
+[effect-reference-obb-dimensions.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-on-span.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-on-span.html.ini
new file mode 100644
index 00000000000..adc9e6b7598
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-on-span.html.ini
@@ -0,0 +1,2 @@
+[effect-reference-on-span.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
index 8d26725e946..8bd785894f8 100644
--- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
@@ -318,15 +318,18 @@
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
+ [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;" text/plain]
+ [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html */*]
+ [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
index 5c001592859..8456d88e4f3 100644
--- a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
@@ -56,6 +56,9 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript;charset=windows-1252 error text/javascript]
+ [separate text/javascript; charset=windows-1252 text/javascript]
+ expected: FAIL
+
+ [separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
index dc2e45516de..75d75b4cda2 100644
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_5.html]
+[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index 295031c1812..ab43ed7acf4 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-3.html]
- expected: TIMEOUT
+ expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index 7a36937927c..f4f994c5d6f 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,4 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini
new file mode 100644
index 00000000000..efa8f0e8d34
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini
@@ -0,0 +1,7 @@
+[natural-size-orientation.html]
+ [naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none]
+ expected: FAIL
+
+ [naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini
new file mode 100644
index 00000000000..58d16f8fd0d
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini
@@ -0,0 +1,70 @@
+[clicking-interactive-content.html]
+ [interactive content <details></details> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <input> as first child of <label>]
+ expected: FAIL
+
+ [interactive content <select></select> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <iframe></iframe> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <select></select> as first child of <label>]
+ expected: FAIL
+
+ [interactive content <video tabindex=""></video> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <a tabindex=""></a> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <object tabindex=""></object> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <input> deeply nested under <label>]
+ expected: FAIL
+
+ [interactive content <embed> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <object usemap=""></object> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <select></select> deeply nested under <label>]
+ expected: FAIL
+
+ [interactive content <textarea></textarea> as first child of <label>]
+ expected: FAIL
+
+ [interactive content <img usemap=""> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <audio controls=""></audio> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <input type="hidden" tabindex=""> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <video controls=""></video> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <audio tabindex=""></audio> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <div tabindex=""></div> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <input> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <textarea></textarea> deeply nested under <label>]
+ expected: FAIL
+
+ [interactive content <img tabindex=""> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <textarea></textarea> as second child under <label>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini
index 5d9272664ee..256a49c578d 100644
--- a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini
+++ b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini
@@ -59,3 +59,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 42303 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 10361.\n\t[10361\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 7056.\n\t[7056\]\t5.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 44063 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 36821.\n\t[36821\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+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-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
index 2540cf056cf..7cb62c82da3 100644
--- a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
+++ b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
@@ -95,3 +95,9 @@
[X Stitched sine-wave buffers at sample rate 44100 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.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-2.4090957641601563e+0\t5.6332010030746460e-1\t2.9724158644676208e+0\t5.2766018163478501e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5659909161559839e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 2.9724158644676208e+0 at index of 31080.\n\tMax RelError of 5.2766018163478501e+0 at index of 31080.\n]
expected: FAIL
+ [X SNR (45.01863889546189 dB) is not greater than or equal to 85.58. Got 45.01863889546189.]
+ expected: FAIL
+
+ [X Stitched sine-wave buffers at sample rate 44100 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.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-8.5582718212587339e-15\t5.6332010030746460e-1\t5.6332010030747315e-1\t1.0000000000000151e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5672520847738763e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000151e+0 at index of 31080.\n]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 5b2ccdfb94b..7376fa59b3c 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -127129,6 +127129,19 @@
{}
]
],
+ "contain-size-063.html": [
+ "31a6015cac35faa04b8f77d4388e429e2266ffdd",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/reference/contain-size-063-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"contain-size-baseline-001.html": [
"0ffed1b3b6a08831792b0a5ac40d1340c142c48d",
[
@@ -133062,6 +133075,19 @@
{}
]
],
+ "flex-minimum-height-flex-items-022.html": [
+ "943ac525fb570adcf62d7ff0edfc88cdd5727a85",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"flex-minimum-width-flex-items-001.xht": [
"cd18483ba414160c46e30bc282dec0c2fcd2f418",
[
@@ -133583,7 +133609,7 @@
]
],
"flexbox-with-multi-column-property.html": [
- "5b11b0f9fd245a451e289229c4ed3e6e183dd40b",
+ "56b56ca0935bc8869a4b19e0d70e2cf7cdb0a0b8",
[
null,
[
@@ -157041,6 +157067,19 @@
]
},
"css-pseudo": {
+ "active-selection-063.html": [
+ "1d9a1c1ecd81008d4d3d5891b717d6bdadb3efe9",
+ [
+ null,
+ [
+ [
+ "/css/css-pseudo/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"before-dynamic-display-none.html": [
"d8844f9c961e94b2fd353628cb2c6e3e12123054",
[
@@ -202900,7 +202939,7 @@
]
],
"background-image-blur-repaint.html": [
- "7b3df263081ecceb6517e056e60cfaa35b9981a0",
+ "4a3c00c7ad334a67312346ce57aa81ac96d024d2",
[
null,
[
@@ -203263,6 +203302,32 @@
{}
]
],
+ "effect-reference-delete.html": [
+ "314c9a7d123bd65b04483956513337116f7e0382",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/effect-reference-delete-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "effect-reference-displacement-negative-scale-001.html": [
+ "282ea100508948125f3a834af9dd37e0be210a10",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"effect-reference-lighting-no-light.tentative.html": [
"beefd47a544d5c82b4b1d468ce99938e6d9924d9",
[
@@ -203276,6 +203341,71 @@
{}
]
],
+ "effect-reference-merge-no-inputs.tentative.html": [
+ "4fb67db643dd5aebdbff53a0773035747c18836c",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "effect-reference-obb-dimensions.html": [
+ "2bb424d90cd6b03145c481eb8be6b96c9d52d715",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "effect-reference-on-span.html": [
+ "66bd8fa886a86e5f5738d8373e2611c39cc1c8e3",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/effect-reference-on-span-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "effect-reference-rename-001.html": [
+ "6c8374536f4cf748784b7a58fc158d230ea3557f",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/effect-reference-rename-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "effect-reference-rename-002.html": [
+ "86528819bc7a0459a3d9c506284fc7d614049a00",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/effect-reference-rename-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"empty-element-with-filter.html": [
"3e8fc7e164cde54a8ff81a241909c2f729f32afb",
[
@@ -203510,6 +203640,32 @@
{}
]
],
+ "filter-region-negative-positioned-child-001.html": [
+ "8f302ab52abe2f1008ca60d46fbc77d8ce35c22a",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "filter-region-transformed-child-001.html": [
+ "cd097faf706a1d15f4ce5616f7e67fbf234dc50c",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/filter-region-transformed-child-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"filter-saturate-001-test.html": [
"52182deb3fed8985bc810dd1e5af95e3095979ae",
[
@@ -203757,6 +203913,32 @@
{}
]
],
+ "reference-filter-update-on-attribute-change-001.html": [
+ "cc5ac7c65d720804953df11f2b2cab268e383610",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "root-element-with-opacity-filter-001.html": [
+ "577e2bd4c032799a159c1c7542812e66081bfcea",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"svg-feflood-001.html": [
"4588cf93f6ca52386ce8af1dbe6e0462572bb559",
[
@@ -203796,13 +203978,26 @@
{}
]
],
- "svg-relative-urls-0001.html": [
- "3edf7447b8f7fa0cf55f87a6ba051797bdd6f914",
+ "svg-relative-urls-001.html": [
+ "5dd382c6dfd2271449627e956f7723e810662cee",
+ [
+ null,
+ [
+ [
+ "/css/filter-effects/reference/svg-relative-urls-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "svg-relative-urls-002.html": [
+ "278ea1645437f7afa797091b2562b9ad3430e458",
[
null,
[
[
- "/css/filter-effects/reference/svg-relative-urls-0001-ref.html",
+ "/css/filter-effects/reference/svg-relative-urls-002-ref.html",
"=="
]
],
@@ -242786,6 +242981,10 @@
"6805c323df5a975231648b830e33ce183c3cbbd3",
[]
],
+ "rendering-utils.js": [
+ "46283bd5d078a14922e24160053017b6e8cb072c",
+ []
+ ],
"sab.js": [
"c7fd1a742e64f66744b416584952effe29fda208",
[]
@@ -261285,6 +261484,18 @@
[]
]
},
+ "content-index": {
+ "resources": {
+ "sw.js": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ []
+ ]
+ },
+ "resources.js": [
+ "1a758abe27e0b31dd22d2b8c04a7943271dea95c",
+ []
+ ]
+ },
"content-security-policy": {
"META.yml": [
"ee8f1ea7e07b94711ddc65e43a6c32dbc5983612",
@@ -284314,6 +284525,10 @@
"dbfa77f6ac0dfdc03d2f8a8b0407a704617c73a7",
[]
],
+ "contain-size-063-ref.html": [
+ "9544ebcac23af0c2caaa279154878c10349990ae",
+ []
+ ],
"contain-size-breaks-001-ref.html": [
"b807ea5a1160a4d29e46b91ca283c45b3c2fdeb5",
[]
@@ -296875,6 +297090,12 @@
"92ae71d83fcbea52e4120ed28af5438dd54d4509",
[]
],
+ "reference": {
+ "ref-filled-green-100px-square.xht": [
+ "05a13794482a94f6c10bd9d4c98704e63ef60331",
+ []
+ ]
+ },
"selection-text-shadow-016-ref.html": [
"5e3eabc976e2bc75b6a290f2b740b54d8cdbf99a",
[]
@@ -307460,14 +307681,50 @@
"45192b13451fdfe2f00c17dbc84d30a770426e86",
[]
],
+ "effect-reference-delete-ref.html": [
+ "918715265fa4c1b95ec46d04014ea82e73cbcd40",
+ []
+ ],
+ "effect-reference-displacement-negative-scale-001-ref.html": [
+ "f718ea6abfbab54333ba674ff0dcd320d8672bcd",
+ []
+ ],
"effect-reference-lighting-no-light.tentative-ref.html": [
"e863a6703b2acebbdb10a5eef342cbbd1b6b5bc9",
[]
],
+ "effect-reference-merge-no-inputs.tentative-ref.html": [
+ "5743e0c3de96ba4fbdf814bf5ec997e0c93e65da",
+ []
+ ],
+ "effect-reference-obb-dimensions-ref.html": [
+ "f460c439aa8d6e56a8ad5a0826d6e0c0daf5df11",
+ []
+ ],
+ "effect-reference-on-span-ref.html": [
+ "76a7953831720fbe9556afdc4800879c5cdd2634",
+ []
+ ],
+ "effect-reference-rename-001-ref.html": [
+ "fe3beae2d4997a7603153c5c885f01c7ca656bcd",
+ []
+ ],
+ "effect-reference-rename-002-ref.html": [
+ "d8719aa43a43ebbfebe6caa43b961eeee10b99c5",
+ []
+ ],
"empty-element-with-filter-ref.html": [
"cf2c997f6c0d60cac9896c0b0014189cea7790bc",
[]
],
+ "filter-region-negative-positioned-child-001-ref.html": [
+ "c9da47b1b434303f0111e8d1f03d5518e8f573fc",
+ []
+ ],
+ "filter-region-transformed-child-001-ref.html": [
+ "bcf649411930d5cc839dca2a5098e12c0c49fda8",
+ []
+ ],
"filter-url-to-non-existent-filter-001-ref.html": [
"c1aeed8c441e6f72c6faa893d64ae30bdacbec06",
[]
@@ -307496,6 +307753,14 @@
"01546f115d112aa27495b3fd45347b22e30fe7ee",
[]
],
+ "reference-filter-update-on-attribute-change-001-ref.html": [
+ "91326ef585e6910cd499ad2d6650f18fca486921",
+ []
+ ],
+ "root-element-with-opacity-filter-001-ref.html": [
+ "cd16e54c8e5b73b02585c606d0133bb36c821b31",
+ []
+ ],
"svg-feflood-ref.html": [
"5623b08ecd71b292e698ee249a79b59d0046300f",
[]
@@ -307508,9 +307773,13 @@
"5623b08ecd71b292e698ee249a79b59d0046300f",
[]
],
- "svg-relative-urls-0001-ref.html": [
+ "svg-relative-urls-001-ref.html": [
"82f301f5f6ff95f743f2488093fe63ac766a84bf",
[]
+ ],
+ "svg-relative-urls-002-ref.html": [
+ "344ee53e032e1bd588e971e16af2af5d0a6bcf41",
+ []
]
},
"support": {
@@ -307582,6 +307851,10 @@
"0d5fc65c6fdfe2b4f507326fb379e468dbe85d46",
[]
],
+ "filter-from-external-url.css": [
+ "2940461016cad90f9218db1c7355434d9ca54e1c",
+ []
+ ],
"filtersubregion00.png": [
"b6c4bccb63cd850f473a59d9e3c0cf26c699db13",
[]
@@ -327090,6 +327363,10 @@
"e96e6471e6a8df81c462c47be588ffbbcac5ecfb",
[]
],
+ "arrow-oriented-upright.jpg": [
+ "cebc99af14b6050a416031cf219f8cd7a72ee458",
+ []
+ ],
"background.png": [
"6db6c6b1b9d851c7a85b93ddc9e5ddf368ac0a7e",
[]
@@ -328027,7 +328304,7 @@
[]
],
"css-typed-om.idl": [
- "df9669e5637f18de89792facba8fabe234d658f8",
+ "00d3f49bfe653ce4782e13e6c0d46c65783874cc",
[]
],
"cssom-view.idl": [
@@ -328251,7 +328528,7 @@
[]
],
"permissions.idl": [
- "9cde372a127188ef1081ad390d5301d2d8b198f8",
+ "d45c7f93cac7683a76e89d0e7f429f5f3cb695d9",
[]
],
"picture-in-picture.idl": [
@@ -328479,7 +328756,7 @@
[]
],
"worklets.idl": [
- "16187664b3b4124758c84d054b02b8ddbf585508",
+ "f89eacd50bd58c02860c84b6e4c486ab978a5018",
[]
],
"xhr.idl": [
@@ -338033,7 +338310,7 @@
[]
],
"safari-technology-preview.rb": [
- "5f8d6806107d8abd7418ae022e59a1af9da1632f",
+ "d58664c5b6c67e32c63f1d122625a56211371511",
[]
],
"system_info.yml": [
@@ -338513,7 +338790,7 @@
[]
],
"test_manifest.py": [
- "6f11eb5974060c91c7ce849de2e54b6b30e78926",
+ "6d329ad38f969106c28e73de81dcbf1c468f9adf",
[]
],
"test_sourcefile.py": [
@@ -343644,7 +343921,7 @@
[]
],
"safari.py": [
- "dba8432b5a75faf402cf74042b7a59c4b66f814a",
+ "cb2b175d4dfbc3166e4ad5a6afe174ffdbc6ff8a",
[]
],
"sauce.py": [
@@ -343910,7 +344187,7 @@
[]
],
"test_formatters.py": [
- "72f3a591ad7f90532671ccb897dfcb161bc8f45d",
+ "60b1b0a5a878cda9c500eaae25f3fe89eadf819c",
[]
],
"test_manifestexpected.py": [
@@ -343922,7 +344199,7 @@
[]
],
"test_stability.py": [
- "77cb23a71e13a6889d21d1ff47aa3dacf08a7425",
+ "9a8fccf935a136c6050e852f9a5704138b0d3f41",
[]
],
"test_testloader.py": [
@@ -344433,6 +344710,14 @@
]
}
},
+ "trust-tokens": {
+ "end-to-end": {
+ "README.txt": [
+ "a86468df9d6b21dfc361d178eb3afc4b3c865fea",
+ []
+ ]
+ }
+ },
"trusted-types": {
"META.yml": [
"d0743949b6a122d8bd0adf7b1ed0181f0c51429d",
@@ -373348,6 +373633,26 @@
]
]
},
+ "content-index": {
+ "content-index.https.window.js": [
+ "082ebc3b9ec599da21351d4be1f21a79810ec65d",
+ [
+ "content-index/content-index.https.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/service-workers/service-worker/resources/test-helpers.sub.js"
+ ],
+ [
+ "script",
+ "resources.js"
+ ]
+ ]
+ }
+ ]
+ ]
+ },
"content-security-policy": {
"base-uri": {
"base-uri-allow.sub.html": [
@@ -377254,7 +377559,7 @@
]
],
"cookieStore_get_arguments.tentative.https.any.js": [
- "79fc0d37488ef6dfed1f0bc210e2116111acc776",
+ "34f7dbcd948fd5e590b0e9f715ad878f4de9694d",
[
"cookie-store/cookieStore_get_arguments.tentative.https.any.html",
{
@@ -377406,6 +377711,13 @@
{}
]
],
+ "cookieStore_opaque_origin.tentative.https.html": [
+ "bbf0dbd9864c574fadbd2b464618766ff1919a19",
+ [
+ null,
+ {}
+ ]
+ ],
"cookieStore_set_arguments.tentative.https.any.js": [
"b9074c827d2a1ffa9b3ee1a0a28714396c4ae0d8",
[
@@ -382064,6 +382376,13 @@
]
},
"css-flexbox": {
+ "abspos-descendent-001.html": [
+ "1aebb0f319f566db19070e7bad66e622a4ab8d3f",
+ [
+ null,
+ {}
+ ]
+ ],
"align-content-wrap-001.html": [
"1e0ce42c75f462aea952113582e743bf8bda4dd8",
[
@@ -382964,6 +383283,13 @@
{}
]
],
+ "orthogonal-writing-modes-and-intrinsic-sizing.html": [
+ "032cd47df5d6ae928bf766aad248ccf120bd033a",
+ [
+ null,
+ {}
+ ]
+ ],
"overflow-auto-002.html": [
"2bb04a2604076d0883c1322e60015316f6f34b10",
[
@@ -383246,6 +383572,13 @@
{}
]
],
+ "percentage-size.html": [
+ "44c298672f2e39716d21d36220b270f0387aac2f",
+ [
+ null,
+ {}
+ ]
+ ],
"position-absolute-001.html": [
"f60174084652a3373c6b1873e02da373575c53cd",
[
@@ -383274,6 +383607,13 @@
{}
]
],
+ "position-relative-percentage-top-001.html": [
+ "3ec47c1d42d69330c616a87f0b22208f8d6196a6",
+ [
+ null,
+ {}
+ ]
+ ],
"quirks-auto-block-size-with-percentage-item.html": [
"966f39f173952f01268dcd26a9a5892bf4a689a9",
[
@@ -404532,6 +404872,26 @@
}
]
],
+ "scrollend-event-fired-for-programmatic-scroll.html": [
+ "79b5f5f0186871b7c139c551faf5cf1ef15f77b9",
+ [
+ null,
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
+ ]
+ ],
+ "scrollend-event-fired-for-scrollIntoView.html": [
+ "63e1c3e22eaafcb84b98f542778787b7ae397ca4",
+ [
+ null,
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
+ ]
+ ],
"scrollend-event-fired-to-document.html": [
"a35508e2c557a9280802ab3d0d937fce03628e44",
[
@@ -436088,6 +436448,13 @@
{}
]
],
+ "natural-size-orientation.html": [
+ "662dc0804fa32bff539467166fab134ce8ab22ff",
+ [
+ null,
+ {}
+ ]
+ ],
"non-active-document.html": [
"6072138cb387d98e3bc8ae86971e424fe7061194",
[
@@ -437647,6 +438014,27 @@
]
},
"the-label-element": {
+ "clicking-interactive-content.html": [
+ "60a80fad9d2aebf284e252949fba7b2bb15af134",
+ [
+ null,
+ {}
+ ]
+ ],
+ "clicking-noninteractive-labelable-content.html": [
+ "5563ef1e3c7472e8e831ee8d00c412dbcc0ef45a",
+ [
+ null,
+ {}
+ ]
+ ],
+ "clicking-noninteractive-unlabelable-content.html": [
+ "233168f5664cf972ad579ae4ccba7f674c965d25",
+ [
+ null,
+ {}
+ ]
+ ],
"forward-focus-to-associated-element.html": [
"86e3f652af0fb2b21d65d79da0c81a3e1daefdaa",
[
@@ -482100,7 +482488,7 @@
]
],
"slots-imperative-slot-api.tentative.html": [
- "56dd71b1156cc3ac146a794e28e3b4b2bd58d143",
+ "6d3997b085c99b5163f1f1a747b792a5dbca9dea",
[
null,
{}
@@ -491828,6 +492216,22 @@
]
},
"trust-tokens": {
+ "end-to-end": {
+ "has-trust-token-with-no-top-frame.tentative.https.html": [
+ "4788cd9907331f07abc2374b4e4b48091877fc1c",
+ [
+ null,
+ {}
+ ]
+ ],
+ "has-trust-token.tentative.https.html": [
+ "17e037f739391c5adcab67fc54dd8d4f0cb7764f",
+ [
+ null,
+ {}
+ ]
+ ]
+ },
"trust-token-parameter-validation-xhr.tentative.https.html": [
"4a6c30c6d32424c9b1d3dce883d3f44862c6e3b6",
[
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/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
new file mode 100644
index 00000000000..baa9f1a7541
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-005.html]
+ [Miss clipped float]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/abspos-descendent-001.html.ini b/tests/wpt/metadata/css/css-flexbox/abspos-descendent-001.html.ini
new file mode 100644
index 00000000000..c7ab3aaec53
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/abspos-descendent-001.html.ini
@@ -0,0 +1,4 @@
+[abspos-descendent-001.html]
+ [.flexbox 1]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini b/tests/wpt/metadata/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini
new file mode 100644
index 00000000000..3e8f11fced8
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini
@@ -0,0 +1,2 @@
+[flex-minimum-height-flex-items-022.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini b/tests/wpt/metadata/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini
new file mode 100644
index 00000000000..adb4df5cbe5
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini
@@ -0,0 +1,4 @@
+[orthogonal-writing-modes-and-intrinsic-sizing.html]
+ [.flexbox 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/percentage-size.html.ini b/tests/wpt/metadata/css/css-flexbox/percentage-size.html.ini
new file mode 100644
index 00000000000..936f73befed
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/percentage-size.html.ini
@@ -0,0 +1,4 @@
+[percentage-size.html]
+ [.flexbox 8]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/position-relative-percentage-top-001.html.ini b/tests/wpt/metadata/css/css-flexbox/position-relative-percentage-top-001.html.ini
new file mode 100644
index 00000000000..ff13b3f9f52
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/position-relative-percentage-top-001.html.ini
@@ -0,0 +1,4 @@
+[position-relative-percentage-top-001.html]
+ [.border 1]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
index 85e94926cb3..5733d536fd3 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
@@ -21,3 +21,6 @@
[test the top of layer]
expected: FAIL
+ [test some point of the element: top left corner]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini b/tests/wpt/metadata/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini
new file mode 100644
index 00000000000..18c6eafbf16
--- /dev/null
+++ b/tests/wpt/metadata/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini
@@ -0,0 +1,2 @@
+[effect-reference-displacement-negative-scale-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini b/tests/wpt/metadata/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini
new file mode 100644
index 00000000000..45615ee1b57
--- /dev/null
+++ b/tests/wpt/metadata/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini
@@ -0,0 +1,2 @@
+[effect-reference-merge-no-inputs.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/effect-reference-obb-dimensions.html.ini b/tests/wpt/metadata/css/filter-effects/effect-reference-obb-dimensions.html.ini
new file mode 100644
index 00000000000..9937095d513
--- /dev/null
+++ b/tests/wpt/metadata/css/filter-effects/effect-reference-obb-dimensions.html.ini
@@ -0,0 +1,2 @@
+[effect-reference-obb-dimensions.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/filter-effects/effect-reference-on-span.html.ini b/tests/wpt/metadata/css/filter-effects/effect-reference-on-span.html.ini
new file mode 100644
index 00000000000..adc9e6b7598
--- /dev/null
+++ b/tests/wpt/metadata/css/filter-effects/effect-reference-on-span.html.ini
@@ -0,0 +1,2 @@
+[effect-reference-on-span.html]
+ 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 5e1fb1f51f7..f88cdea09d8 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -318,15 +318,18 @@
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
+ [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;" text/plain]
+ [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html */*]
+ [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
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 5c001592859..8456d88e4f3 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,6 +56,9 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript;charset=windows-1252 error text/javascript]
+ [separate text/javascript; charset=windows-1252 text/javascript]
+ expected: FAIL
+
+ [separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/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_2.html.ini
index dc2e45516de..75d75b4cda2 100644
--- a/tests/wpt/metadata-layout-2020/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_2.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_5.html]
+[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index 5f60c78e73c..b3bd9f4c289 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
- expected: TIMEOUT
+ expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index dc856a3d5a3..e440b1e38c6 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,5 +1,6 @@
[iframe_sandbox_popups_nonescaping-3.html]
type: testharness
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini
new file mode 100644
index 00000000000..efa8f0e8d34
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini
@@ -0,0 +1,7 @@
+[natural-size-orientation.html]
+ [naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none]
+ expected: FAIL
+
+ [naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini b/tests/wpt/metadata/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini
new file mode 100644
index 00000000000..58d16f8fd0d
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini
@@ -0,0 +1,70 @@
+[clicking-interactive-content.html]
+ [interactive content <details></details> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <input> as first child of <label>]
+ expected: FAIL
+
+ [interactive content <select></select> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <iframe></iframe> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <select></select> as first child of <label>]
+ expected: FAIL
+
+ [interactive content <video tabindex=""></video> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <a tabindex=""></a> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <object tabindex=""></object> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <input> deeply nested under <label>]
+ expected: FAIL
+
+ [interactive content <embed> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <object usemap=""></object> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <select></select> deeply nested under <label>]
+ expected: FAIL
+
+ [interactive content <textarea></textarea> as first child of <label>]
+ expected: FAIL
+
+ [interactive content <img usemap=""> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <audio controls=""></audio> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <input type="hidden" tabindex=""> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <video controls=""></video> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <audio tabindex=""></audio> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <div tabindex=""></div> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <input> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <textarea></textarea> deeply nested under <label>]
+ expected: FAIL
+
+ [interactive content <img tabindex=""> as second child under <label>]
+ expected: FAIL
+
+ [interactive content <textarea></textarea> as second child under <label>]
+ 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 6e870f95c0c..192675d0844 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
@@ -128,3 +128,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 42303 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 10361.\n\t[10361\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 7056.\n\t[7056\]\t5.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 44063 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 36821.\n\t[36821\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+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 3f28908ad5f..06fdfd037df 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
@@ -326,3 +326,9 @@
[X Stitched sine-wave buffers at sample rate 44100 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.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-2.4090957641601563e+0\t5.6332010030746460e-1\t2.9724158644676208e+0\t5.2766018163478501e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5659909161559839e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 2.9724158644676208e+0 at index of 31080.\n\tMax RelError of 5.2766018163478501e+0 at index of 31080.\n]
expected: FAIL
+ [X SNR (45.01863889546189 dB) is not greater than or equal to 85.58. Got 45.01863889546189.]
+ expected: FAIL
+
+ [X Stitched sine-wave buffers at sample rate 44100 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.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-8.5582718212587339e-15\t5.6332010030746460e-1\t5.6332010030747315e-1\t1.0000000000000151e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5672520847738763e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000151e+0 at index of 31080.\n]
+ expected: FAIL
+
diff --git a/tests/wpt/web-platform-tests/common/rendering-utils.js b/tests/wpt/web-platform-tests/common/rendering-utils.js
new file mode 100644
index 00000000000..46283bd5d07
--- /dev/null
+++ b/tests/wpt/web-platform-tests/common/rendering-utils.js
@@ -0,0 +1,19 @@
+"use strict";
+
+/**
+ * Waits until we have at least one frame rendered, regardless of the engine.
+ *
+ * @returns {Promise}
+ */
+function waitForAtLeastOneFrame() {
+ return new Promise(resolve => {
+ // Different web engines work slightly different on this area but waiting
+ // for two requestAnimationFrames() to happen, one after another, should be
+ // sufficient to ensure at least one frame has been generated anywhere.
+ window.requestAnimationFrame(() => {
+ window.requestAnimationFrame(() => {
+ resolve();
+ });
+ });
+ });
+}
diff --git a/tests/wpt/web-platform-tests/content-index/content-index.https.window.js b/tests/wpt/web-platform-tests/content-index/content-index.https.window.js
new file mode 100644
index 00000000000..082ebc3b9ec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-index/content-index.https.window.js
@@ -0,0 +1,88 @@
+// META: script=/service-workers/service-worker/resources/test-helpers.sub.js
+// META: script=resources.js
+'use strict';
+
+contentIndexTest(async (t, index) => {
+ // Exposure of the interface and method.
+ assert_own_property(window, 'ContentIndex');
+ assert_own_property(ContentIndex.prototype, 'add');
+
+ assert_idl_attribute(index, 'add');
+ assert_idl_attribute(index, 'delete');
+ assert_idl_attribute(index, 'getAll');
+
+}, 'The Content Index API is exposed');
+
+contentIndexTest(async (t, index) => {
+ await expectTypeError(
+ index.add(createDescription({category: 'fake-category'})));
+
+ await expectTypeError(
+ index.add(createDescription({iconUrl: 'file://some-local-file.png'})));
+ await expectTypeError(index.add(createDescription({iconUrl: '/non-existent-icon.png'})));
+ await expectTypeError(index.add(createDescription({iconUrl: '/images/broken.png'})));
+
+ await expectTypeError(index.add(createDescription({launchUrl: 'https://other-domain.com/'})));
+ await expectTypeError(index.add(createDescription({launchUrl: '/different-scope'})));
+
+ await index.add(createDescription({}));
+
+}, 'index.add parameters are validated.');
+
+contentIndexTest(async (t, index) => {
+ const description = createDescription({});
+
+ // Initially there are no descriptions.
+ assert_array_equals(await index.getAll(), []);
+
+ await index.add(description);
+
+ const descriptions = await index.getAll();
+ assert_equals(descriptions.length, 1);
+
+ assert_object_equals(descriptions[0], description);
+
+}, 'index.getAll returns the same objects provided.');
+
+contentIndexTest(async (t, index) => {
+ const description1 = createDescription({title: 'title1'});
+ const description2 = createDescription({title: 'title2'});
+
+ await index.add(description1);
+ await index.add(description2);
+
+ // There should be one description.
+ const descriptions = await index.getAll();
+ assert_equals(descriptions.length, 1);
+
+ assert_object_equals(descriptions[0], description2);
+
+}, 'index.add with same ID overwrites existing entry.');
+
+contentIndexTest(async (t, index) => {
+ const description1 = createDescription({id: 'id1'});
+ const description2 = createDescription({id: 'id2'});
+
+ await index.add(description1);
+ await index.add(description2);
+
+ // There should be two descriptions.
+ assert_equals((await index.getAll()).length, 2);
+
+ await index.delete('id1');
+
+ // There should be one description.
+ const descriptions = await index.getAll();
+ assert_equals(descriptions.length, 1);
+
+ assert_object_equals(descriptions[0], description2);
+
+}, 'index.delete removes entry.');
+
+contentIndexTest(async (t, index) => {
+ const descriptions = await index.getAll();
+ assert_equals(descriptions.length, 0);
+
+ await index.delete('id');
+
+}, 'index.delete works on invalid ID.');
diff --git a/tests/wpt/web-platform-tests/content-index/resources.js b/tests/wpt/web-platform-tests/content-index/resources.js
new file mode 100644
index 00000000000..1a758abe27e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-index/resources.js
@@ -0,0 +1,40 @@
+'use strict';
+
+const swUrl = 'resources/sw.js';
+const scope = 'resources/';
+
+async function expectTypeError(promise) {
+ try {
+ await promise;
+ assert_unreached('Promise should have rejected');
+ } catch (e) {
+ assert_equals(e.name, 'TypeError');
+ }
+}
+
+function createDescription({id = 'id', title = 'title', description = 'description',
+ category = 'homepage', iconUrl = '/images/green-256x256.png',
+ launchUrl = scope, includeIcons = true}) {
+ return {id, title, description, category, icons: includeIcons ? [{src: iconUrl}] : [], launchUrl};
+}
+
+// Creates a Promise test for |func| given the |description|. The |func| will be
+// executed with the `index` object of an activated Service Worker Registration.
+function contentIndexTest(func, description) {
+ promise_test(async t => {
+ const registration = await service_worker_unregister_and_register(t, swUrl, scope);
+ await wait_for_state(t, registration.installing, 'activated');
+ return func(t, registration.index);
+ }, description);
+}
+
+async function waitForMessageFromServiceWorker() {
+ return await new Promise(resolve => {
+ const listener = event => {
+ navigator.serviceWorker.removeEventListener('message', listener);
+ resolve(event.data);
+ };
+
+ navigator.serviceWorker.addEventListener('message', listener);
+ });
+}
diff --git a/tests/wpt/web-platform-tests/content-index/resources/sw.js b/tests/wpt/web-platform-tests/content-index/resources/sw.js
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-index/resources/sw.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js
index 79fc0d37488..34f7dbcd948 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js
@@ -139,11 +139,6 @@ promise_test(async testCase => {
}, 'cookieStore.get with relative url in options');
promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
- testCase.add_cleanup(async () => {
- await cookieStore.delete('cookie-name');
- });
-
const invalid_url =
`${self.location.protocol}//${self.location.host}/different/path`;
await promise_rejects_js(testCase, TypeError, cookieStore.get(
@@ -151,11 +146,6 @@ promise_test(async testCase => {
}, 'cookieStore.get with invalid url path in options');
promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
- testCase.add_cleanup(async () => {
- await cookieStore.delete('cookie-name');
- });
-
const invalid_url =
`${self.location.protocol}//www.example.com${self.location.pathname}`;
await promise_rejects_js(testCase, TypeError, cookieStore.get(
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_opaque_origin.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_opaque_origin.tentative.https.html
new file mode 100644
index 00000000000..bbf0dbd9864
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_opaque_origin.tentative.https.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Cookie Store API: Opaque origins for cookieStore</title>
+<link rel=help href="https://wicg.github.io/cookie-store/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+const apiCalls = {
+ 'get': 'cookieStore.get()',
+ 'getAll': 'cookieStore.getAll()',
+ 'set': 'cookieStore.set("cookie-name", "cookie-value")',
+ 'delete': 'cookieStore.delete("cookie-name")'
+};
+
+const script = `
+<script>
+ "use strict";
+ window.onmessage = async () => {
+ try {
+ await %s;
+ window.parent.postMessage({result: "no exception"}, "*");
+ } catch (ex) {
+ window.parent.postMessage({result: ex.name}, "*");
+ };
+ };
+<\/script>
+`;
+
+function load_iframe(apiCall, sandbox) {
+ return new Promise(resolve => {
+ const iframe = document.createElement('iframe');
+ iframe.onload = () => { resolve(iframe); };
+ if (sandbox)
+ iframe.sandbox = sandbox;
+ iframe.srcdoc = script.replace("%s", apiCalls[apiCall]);
+ iframe.style.display = 'none';
+ document.documentElement.appendChild(iframe);
+ });
+}
+
+function wait_for_message(iframe) {
+ return new Promise(resolve => {
+ self.addEventListener('message', function listener(e) {
+ if (e.source === iframe.contentWindow) {
+ resolve(e.data);
+ self.removeEventListener('message', listener);
+ }
+ });
+ });
+}
+
+promise_test(async t => {
+ for (apiCall in apiCalls) {
+ const iframe = await load_iframe(apiCall);
+ iframe.contentWindow.postMessage({}, '*');
+ const message = await wait_for_message(iframe);
+ assert_equals(message.result, 'no exception',
+ 'cookieStore ${apiCall} should not throw');
+ }
+}, 'cookieStore in non-sandboxed iframe should not throw');
+
+promise_test(async t => {
+ for (apiCall in apiCalls) {
+ const iframe = await load_iframe(apiCall, 'allow-scripts');
+ iframe.contentWindow.postMessage({}, '*');
+ const message = await wait_for_message(iframe);
+ assert_equals(message.result, 'SecurityError',
+ 'cookieStore ${apiCall} should throw SecurityError');
+ }
+}, 'cookieStore in sandboxed iframe should throw SecurityError');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-063.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-063.html
new file mode 100644
index 00000000000..31a6015cac3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-063.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>CSS Containment Test: 'contain: size' affects intrinsic size</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://www.w3.org/TR/css-contain-1/#containment-size">
+<link rel="match" href="reference/contain-size-063-ref.html">
+<meta name="flags" content="">
+<meta name="asserts" content="the intrinsic size of a size-contained element is treated as 0 in various scenarios involving intrinsic sizing.">
+
+<style>
+.red {
+ background: red;
+}
+.abs {
+ position: absolute;
+}
+.float {
+ float: left;
+}
+.zero {
+ width: 0;
+}
+.contained {
+ contain: size;
+ color: transparent;
+}
+.grid {
+ display: grid;
+ grid: max-content auto / min-content auto;
+}
+table {
+ border-collapse: collapse;
+}
+td {
+ padding: 0;
+}
+</style>
+
+<p>Test passes if there is no red below.
+
+<!-- max content sized-->
+<div class="red abs"><div class="contained">Arbitrary content content<br>that takes up size.<br>Block Layout</div></div>
+
+<!-- max content sized-->
+<div class="red float"><div class="contained">Arbitrary content content<br>that takes up size.<br>Float</div></div>
+
+<!-- min content sized-->
+<div class=zero><div class="red float"><div class="contained">Arbitrary content content<br>that takes up size.<br>Float in narrow wrapper</div></div></div>
+
+<div class="grid red">
+ <div class="red"></div>
+ <div class="contained">Arbitrary content content<br>that takes up size.<br>Grid item giving the first row it's height</div>
+ <div class="contained">Arbitrary content content<br>that takes up size.<br>Grid item giving the first column its width</div>
+</div>
+
+<table class=red>
+ <tr>
+ <td class=red>
+ <td><div class="contained">Arbitrary content content<br>that takes up size.<br>content of a table cell giving the fist row it's height</div>
+ <tr>
+ <td><div class="contained">Arbitrary content content<br>that takes up size.<br>content of a table cell giving the first column it's width</div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-063-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-063-ref.html
new file mode 100644
index 00000000000..9544ebcac23
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-063-ref.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>Test reference</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+
+<p>Test passes if there is no red below.
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/abspos-descendent-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/abspos-descendent-001.html
new file mode 100644
index 00000000000..1aebb0f319f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/abspos-descendent-001.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>CSS Flexbox: removing abspos descendents</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-containers">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=167566">
+<meta name="assert" content="This test ensures that flex item's padding doesn't disappear when an abspos descendent is removed.">
+<link href="support/flexbox.css" rel="stylesheet">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script>
+window.onload = function() {
+ document.body.offsetHeight;
+
+ document.getElementById('to-hide').style.display = "none";
+ checkLayout(".flexbox");
+};
+</script>
+</head>
+<body>
+<div id=log></div>
+<div class="flexbox" style="height: 100px;" data-expected-height="100">
+ <div style="width: 100%; overflow: auto; padding-bottom: 100px; background-color: red;" data-expected-height="100">
+ <div style="position: relative; height: 100px; background-color: green;" data-expected-height="100">
+ <div id="to-hide" style="position: absolute;" data-expected-height="0"></div>
+ </div>
+ </div>
+</div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-022.html b/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-022.html
new file mode 100644
index 00000000000..943ac525fb5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-022.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<title>Minimum height of a replaced element with borders</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/" />
+<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#min-size-auto" title="4.5. Implied Minimum Size of Flex Items" />
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="height: 100px; overflow: hidden;">
+ <div style="display: flex; flex-direction: column; height: 0; width: 100px;">
+ <img src="support/1x1-green.png" style="border-bottom: 99px solid green;">
+ <div style="background-color: red; min-height: 100px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html b/tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html
index 5b11b0f9fd2..56b56ca0935 100644
--- a/tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html
@@ -10,6 +10,7 @@
column-count: 2;
column-gap: 100px;
width: 20em;
+ font-kerning: none;
}
</style>
<div class="flexbox">
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html b/tests/wpt/web-platform-tests/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html
new file mode 100644
index 00000000000..032cd47df5d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Flexbox: main size on orthogonal flex item.</title>
+<link rel="stylesheet" href="support/flexbox.css" >
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-base-size">
+<link rel="issue" href="https://codereview.chromium.org/1052363002">
+<meta name="assert" content="This test ensure the correct main sizes are used when flex item is orthogonal to the flex container."/>
+<style>
+.flexbox {
+ background-color: gray;
+}
+
+.vertical {
+ writing-mode: vertical-lr;
+ width: min-content;
+ background-color: blue;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.flexbox')">
+<div id=log></div>
+
+<div class="flexbox" data-expected-height="20">
+ <div class="vertical" data-expected-width="50" data-expected-height="20">
+ <div style="width: 50px; height: 20px; background-color: blue;" data-expected-width="50" data-expected-height="20"></div>
+ </div>
+</div>
+
+<div class="flexbox column" data-expected-height="20">
+ <div class="vertical" data-expected-width="50" data-expected-height="20">
+ <div style="width: 50px; height: 20px; background-color: blue;" data-expected-width="50" data-expected-height="20"></div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-size.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-size.html
new file mode 100644
index 00000000000..44c298672f2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-size.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<title>CSS Flexbox: Percentage size in flexbox children</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-containers">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-3/#percentage-sizing">
+<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=81809">
+<meta name="assert" content="This test checks that percentage height/width values are correctly resolved in flexbox children.">
+<style>
+.flexbox {
+ display: flex;
+}
+.column, .column .fixed {
+ height: 50px;
+}
+.row, .row .fixed {
+ width: 50px;
+}
+.container > div {
+ outline: 2px solid blue;
+}
+.row > div > div {
+ height: 20px;
+}
+.flexbox > div {
+ flex: 0 0 auto;
+}
+.column > .flexbox {
+ flex-direction: column;
+}
+.container > div > :nth-child(1) {
+ background-color: orange;
+}
+.container > div > :nth-child(2) {
+ background-color: yellow;
+}
+.container > div > :nth-child(3) {
+ background-color: salmon;
+}
+.container > div > :nth-child(4) {
+ background-color: purple;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.flexbox')">
+<div id=log></div>
+
+<div class="container row">
+ <div class="flexbox">
+ <div style='width: 10px; min-width: 50%;' data-expected-width=25></div>
+ <div style='width: 50%;' data-expected-width=25></div>
+ <div style='width: 10px; max-width: 50%;' data-expected-width=10></div>
+ <div style='min-width: 10px; width: 100px; max-width: 50%;' data-expected-width=25></div>
+ </div>
+</div>
+
+<div class="container row" style='width: 100px'>
+ <div class="flexbox fixed">
+ <div style='width: 10px; min-width: 50%;' data-expected-width=25></div>
+ <div style='width: 50%;' data-expected-width=25></div>
+ <div style='width: 10px; max-width: 50%;' data-expected-width=10></div>
+ <div style='min-width: 10px; width: 100px; max-width: 50%;' data-expected-width=25></div>
+ </div>
+</div>
+
+<div class="container column" style='margin-bottom: 100px'>
+ <div class="flexbox" style="height: auto">
+ <div style='height: 10px; min-height: 50%;' data-expected-height=10></div>
+ <div style='height: 50%;' data-expected-height=0></div>
+ <div style='height: 10px; max-height: 50%;' data-expected-height=10></div>
+ <div style='min-height: 10px; height: 100px; max-height: 50%;' data-expected-height=100></div>
+ </div>
+</div>
+
+<div class="container column">
+ <div class="flexbox fixed">
+ <div style='height: 10px; min-height: 50%;' data-expected-height=25></div>
+ <div style='height: 50%;' data-expected-height=25></div>
+ <div style='height: 10px; max-height: 50%;' data-expected-height=10></div>
+ <div style='min-height: 10px; height: 100px; max-height: 50%;' data-expected-height=25></div>
+ </div>
+</div>
+
+<div class="container row">
+ <div class="flexbox">
+ <div style="flex: 0 0 50%" data-expected-width=25></div>
+ </div>
+</div>
+
+<div class="container column">
+ <div class="flexbox">
+ <div style="flex: 0 0 50%" data-expected-height=0></div>
+ </div>
+</div>
+
+<div class="container row">
+ <div class="flexbox fixed">
+ <div style="flex: 0 0 50%" data-expected-width=25></div>
+ </div>
+</div>
+
+<div class="container column">
+ <div class="flexbox fixed">
+ <div style="flex: 0 0 50%" data-expected-height=25></div>
+ </div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/position-relative-percentage-top-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/position-relative-percentage-top-001.html
new file mode 100644
index 00000000000..3ec47c1d42d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/position-relative-percentage-top-001.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<title>CSS Flexbox: Relative position with a percentage top</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#valdef-align-items-stretch">
+<meta name="assert" content="This test ensures that a flexbox with 'flex-flow: row wrap' properly centers a grandchild with 'position: relative' and 'top: 50%'.">
+<style>
+html, body {
+ margin: 0;
+}
+
+.border {
+ border:1px solid #000;
+}
+.width-50 {
+ width: 50%;
+}
+.flex {
+ display: flex;
+ flex-flow: row wrap;
+}
+.tall {
+ height: 300px;
+}
+.top-50 {
+ position: relative;
+ top: 50%;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.border')">
+<div class="border">
+ <div class="flex">
+ <div class="width-50">
+ <label class="top-50" data-offset-y="151">This should be in the center of the container</label>
+ </div>
+ <div class="width-50">
+ <div class="tall">
+ This is tall
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/active-selection-063.html b/tests/wpt/web-platform-tests/css/css-pseudo/active-selection-063.html
new file mode 100644
index 00000000000..1d9a1c1ecd8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-pseudo/active-selection-063.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Pseudo-Elements Test: active selection and consecutive preserved &amp;Tab;</title>
+
+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
+ <link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-selectors">
+ <link rel="help" href="https://www.w3.org/TR/css-text-3/#tab-size-property">
+ <link rel="match" href="reference/ref-filled-green-100px-square.xht">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
+
+ <meta content="" name="flags">
+ <meta name="assert" content="In this test, tab characters are preserved and converted into 4 consecutive blank spaces. The background of such blank spaces can be painted. The lines are broken after each tab character since 'white-space: pre' preserves line breaks.">
+
+ <style>
+ div
+ {
+ background-color: red;
+ color: red;
+ float: left; /* or display: inline-block or position: absolute or width: 4em */
+ font-family: Ahem;
+ font-size: 25px;
+ line-height: 1;
+ /* -moz-tab-size: 4; */
+ /*
+ Implement 'tab-size' (dropping the -moz- prefix)
+ https://bugzilla.mozilla.org/show_bug.cgi?id=737785
+ */
+ tab-size: 4;
+ white-space: pre;
+ }
+
+ div::selection
+ {
+ background-color: green;
+ }
+ </style>
+
+ <script>
+ function startTest()
+ {
+ var targetRange = document.createRange();
+ /* We first create an empty range */
+ targetRange.selectNodeContents(document.getElementById("test"));
+ /* Then we set the range boundaries to the children of div#test */
+ window.getSelection().addRange(targetRange);
+ /* Finally, we now select such range of content */
+ }
+ </script>
+
+ <body onload="startTest();">
+
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.
+
+ <div id="test">&Tab;
+&Tab;
+&Tab;
+&Tab;</div>
diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/reference/ref-filled-green-100px-square.xht b/tests/wpt/web-platform-tests/css/css-pseudo/reference/ref-filled-green-100px-square.xht
new file mode 100644
index 00000000000..05a13794482
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-pseudo/reference/ref-filled-green-100px-square.xht
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
+ <style type="text/css"><![CDATA[
+ div
+ {
+ background-color: green;
+ height: 100px;
+ width: 100px;
+ }
+ ]]></style>
+ </head>
+ <body>
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+ <div></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html b/tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html
index 7b3df263081..4a3c00c7ad3 100644
--- a/tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html
+++ b/tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html
@@ -10,6 +10,7 @@
<meta name="assert" content="An element with background-image and a filter should be rendered correctly after other elements on the page change size. You should see a 50x50 green box over a blurred background."/>
<script src="/common/reftest-wait.js"></script>
+<script src="/common/rendering-utils.js"></script>
<script>
function runTest() {
function shrinkBox() {
@@ -18,13 +19,9 @@ function runTest() {
box.style.height = "50px";
}
- // Wait for two requestAnimationFrame() calls to make sure that at least one
- // frame has been rendered before shrinking the box and taking the screenshot.
- requestAnimationFrame(function() {
- requestAnimationFrame(function() {
- shrinkBox();
- takeScreenshot();
- });
+ waitForAtLeastOneFrame().then(function() {
+ shrinkBox();
+ takeScreenshot();
});
}
</script>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-delete.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-delete.html
new file mode 100644
index 00000000000..314c9a7d123
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-delete.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>CSS Filters: reference to deleted SVG filter</title>
+<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
+<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=90405">
+<link rel="match" href="reference/effect-reference-delete-ref.html">
+<meta name="assert" content="Check that a CSS filter no longer affects its target element after having deleted the SVG element referenced from the CSS filter."/>
+
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/rendering-utils.js"></script>
+
+<svg width="0" height="0">
+ <defs>
+ <filter id="MyFilter">
+ <feColorMatrix type="hueRotate" values="180"/>
+ </filter>
+ </defs>
+</svg>
+<img style="filter: url(#MyFilter);" src="support/color-palette.png">
+<script>
+waitForAtLeastOneFrame().then(function() {
+ document.querySelector('svg').remove();
+ takeScreenshot();
+});
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-displacement-negative-scale-001.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-displacement-negative-scale-001.html
new file mode 100644
index 00000000000..282ea100508
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-displacement-negative-scale-001.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<title>SVG Filters: feDisplacementMap filter with negative scale</title>
+<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#feDisplacementMapElement">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=641854">
+<link rel="match" href="reference/effect-reference-displacement-negative-scale-001-ref.html">
+<meta name="assert" content="feDisplacementMap with a negative scale applies the displacement in the opposite direction.">
+
+<div style="position: relative">
+ <div style="position: absolute; top: 20px; left: 20px; width: 100px; height: 100px; background: green; filter: url(#displacementFilter);"></div>
+</div>
+<svg width="0" height="0">
+ <filter id="displacementFilter" x="-0.2" y="-0.2" color-interpolation-filters="sRGB">
+ <feFlood flood-color="black"/>
+ <feDisplacementMap in="SourceGraphic" scale="-40" xChannelSelector="R" yChannelSelector="R"/>
+ </filter>
+</svg>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-merge-no-inputs.tentative.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-merge-no-inputs.tentative.html
new file mode 100644
index 00000000000..4fb67db643d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-merge-no-inputs.tentative.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<title>CSS Filters: feMerge with no input feMergeNode</title>
+<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feMergeElement">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feCompositeElement">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=533457">
+<link rel="match" href="reference/effect-reference-merge-no-inputs.tentative-ref.html">
+<meta name="assert" content="Check that the result of an feMerge with no feMergeNode children is transparent black."/>
+
+<style>
+#target {
+ width: 100px;
+ height: 100px;
+ background-color: blue;
+ filter: url(#emptyMerge);
+}
+</style>
+<div id="target"></div>
+<svg height="0">
+ <filter id="emptyMerge">
+ <feColorMatrix values="0 0 0 0 0, 0 0 1 0 0, 0 0 0 0 0, 0 0 0 1 0" result="lime"/>
+ <feColorMatrix values="0 1 0 0 0, 0 0 0 0 0, 0 0 0 0 0, 0 0 0 1 0" result="red"/>
+ <feMerge/>
+ <feComposite in2="lime"/>
+ </filter>
+</svg>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-obb-dimensions.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-obb-dimensions.html
new file mode 100644
index 00000000000..2bb424d90cd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-obb-dimensions.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<title>CSS Filters: objectBoundingBox type of primitiveUnits in SVG filters</title>
+<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#InterfaceSVGFilterElement">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#attr-valuedef-primitiveunits-objectboundingbox">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=532938">
+<link rel="match" href="reference/effect-reference-obb-dimensions-ref.html">
+<meta name="assert" content="Check that primitiveUnits of type objectBoundingBox get properly applied in SVG filter primitives."/>
+
+<style>
+body {
+ margin: 0;
+ padding: 0;
+}
+#target {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background-color: green;
+ filter: url('#bboxOffset');
+}
+</style>
+<div id="target"></div>
+<svg height="0">
+ <filter id="bboxOffset" primitiveUnits="objectBoundingBox" x="0" y="0" width="1.25" height="1.25">
+ <feOffset dx="0.2" dy="0.2"/>
+ </filter>
+</svg>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-on-span.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-on-span.html
new file mode 100644
index 00000000000..66bd8fa886a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-on-span.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Filters: filters on <span> elements</title>
+<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=513408">
+<link rel="match" href="reference/effect-reference-on-span-ref.html">
+<meta name="assert" content="Check that a CSS filter to a <span> element works as expected."/>
+
+<body>
+<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
+ <defs>
+ <filter id="colormatrix" color-interpolation-filters="sRGB">
+ <feColorMatrix values="0 0 0 0 0, 0 0 0 0 0, 1 0 0 0 0, 0 0 0 1 0"/>
+ </filter>
+ </defs>
+</svg><span style="background-color: red; filter: url(#colormatrix);">This text's background should be blue.</span>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-001.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-001.html
new file mode 100644
index 00000000000..6c8374536f4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-001.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Filters: reference to renamed SVG filter</title>
+<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
+<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=90405">
+<link rel="match" href="reference/effect-reference-rename-001-ref.html">
+<meta name="assert" content="Check that a SVG filter, initially named differently than what an element expects, gets applied to such element once renamed with the expected value."/>
+
+<body>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
+ <defs>
+ <filter id="NotMyFilter">
+ <feColorMatrix type="hueRotate" values="180"/>
+ </filter>
+ </defs>
+</svg>
+<img style="filter: url(#MyFilter);" src="support/color-palette.png">
+<script>
+document.getElementById("NotMyFilter").id = "MyFilter";
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-002.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-002.html
new file mode 100644
index 00000000000..86528819bc7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-002.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>CSS Filters: reference to renamed SVG filter</title>
+<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=453019">
+<link rel="match" href="reference/effect-reference-rename-002-ref.html">
+<meta name="assert" content="Check that a SVG filter, initially named differently than what an element expects, gets applied to such element once renamed, after rendering the first frame."/>
+
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/rendering-utils.js"></script>
+
+<body>
+<svg height="0">
+ <filter id="NotMyFilter">
+ <feColorMatrix type="hueRotate" values="90"/>
+ </filter>
+</svg>
+<div style="width: 100px; height: 100px; background-color: red; filter: url(#MyFilter);"></div>
+<script>
+waitForAtLeastOneFrame().then(function() {
+ document.getElementById("NotMyFilter").id = "MyFilter";
+ takeScreenshot();
+});
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-region-negative-positioned-child-001.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-region-negative-positioned-child-001.html
new file mode 100644
index 00000000000..8f302ab52ab
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-region-negative-positioned-child-001.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<title>SVG Filters: CSS reference filters with negative positioned children</title>
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#ColorInterpolationFiltersProperty">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feColorMatrixElement">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=638091">
+<link rel="match" href="reference/filter-region-negative-positioned-child-001-ref.html">
+<meta name="assert" content="CSS reference filters with negative positioned children"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
+ <defs>
+ <filter id="f1" color-interpolation-filters="sRGB">
+ <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"/>
+ </filter>
+ </defs>
+</svg>
+<style>
+.box {
+ width: 100px;
+ height: 100px;
+ position: absolute;
+}
+.green {
+ background-color: green;
+}
+.blue {
+ background-color: blue;
+}
+.above {
+ top: -100px;
+}
+.parent {
+ filter: url(#f1);
+ background-color: white;
+ position: relative;
+ top: 100px;
+}
+</style>
+<div class="parent">
+<div class="green box"></div>
+<div class="blue box above"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-region-transformed-child-001.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-region-transformed-child-001.html
new file mode 100644
index 00000000000..cd097faf706
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-region-transformed-child-001.html
@@ -0,0 +1,30 @@
+<title>CSS Filter: Scale a transformed child element"></title>
+<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#feComponentTransferElement">
+<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=333014">
+<link rel="match" href="reference/filter-region-transformed-child-001-ref.html">
+<meta name="assert" content="This test ensures that the feComponentTransfer filter scales a child with CSS scale transform.">
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
+ <defs>
+ <filter id="filter" x="25%" y="0%" width="50%" height="100%">
+ <feComponentTransfer>
+ <feFuncR type="linear" intercept="0" slope="1"/>
+ <feFuncG type="linear" intercept="0" slope="0"/>
+ <feFuncB type="linear" intercept="0" slope="0"/>
+ <feFuncA type="linear" intercept="0" slope="1"/>
+ </feComponentTransfer>
+ </filter>
+ </defs>
+</svg>
+<style>
+#parent {
+ display: inline-block;
+ filter: url(#filter);
+}
+#child {
+ background-color: gray;
+ width: 50px;
+ height: 50px;
+ transform: translate(25px, 25px) scale(2);
+}
+</style>
+<div id="parent"><div id="child"></div></div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference-filter-update-on-attribute-change-001.html b/tests/wpt/web-platform-tests/css/filter-effects/reference-filter-update-on-attribute-change-001.html
new file mode 100644
index 00000000000..cc5ac7c65d7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference-filter-update-on-attribute-change-001.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<title>SVG Filters: Invalidation of SVG filter attributes on HTML</title>
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feColorMatrixElement">
+<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=105635">
+<link rel="match" href="reference/reference-filter-update-on-attribute-change-001-ref.html">
+<meta name="assert" content="Dynamically adding an attribute of a filter primitive"/>
+<head>
+ <script>
+ function run() {
+ document.getElementById('color').setAttribute('values', '90');
+ }
+ </script>
+</head>
+<body onload="run()">
+ <svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
+ <defs>
+ <filter id="MyFilter">
+ <fecolormatrix id="color" type="hueRotate"></fecolormatrix>
+ </filter>
+ </defs>
+ </svg>
+ <div style="filter: url(#MyFilter); width:100px; height:100px; background-color:red;"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-delete-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-delete-ref.html
new file mode 100644
index 00000000000..918715265fa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-delete-ref.html
@@ -0,0 +1,5 @@
+<html>
+ <body>
+ <img src="../support/color-palette.png">
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html
new file mode 100644
index 00000000000..f718ea6abfb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div style="width: 100px; height: 100px; background-color: green"></div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html
new file mode 100644
index 00000000000..5743e0c3de9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div style="width: 100px; height: 100px; background-color: lime"></div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html
new file mode 100644
index 00000000000..f460c439aa8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<style>
+body {
+ margin: 0;
+ padding: 0;
+}
+#target {
+ position: absolute;
+ left: 20px;
+ top: 20px;
+ width: 100px;
+ height: 100px;
+ background-color: green;
+}
+</style>
+<div id="target"></div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-on-span-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-on-span-ref.html
new file mode 100644
index 00000000000..76a79538317
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-on-span-ref.html
@@ -0,0 +1,5 @@
+<html>
+<body>
+<span style="background-color: blue;">This text's background should be blue.</span>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-001-ref.html
new file mode 100644
index 00000000000..fe3beae2d49
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-001-ref.html
@@ -0,0 +1,12 @@
+<html>
+<body>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
+ <defs>
+ <filter id="MyFilter">
+ <feColorMatrix type="hueRotate" values="180"/>
+ </filter>
+ </defs>
+</svg>
+<img style="filter: url(#MyFilter);" src="../support/color-palette.png">
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-002-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-002-ref.html
new file mode 100644
index 00000000000..d8719aa43a4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-002-ref.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<svg height="0">
+ <filter id="MyFilter">
+ <feColorMatrix type="hueRotate" values="90"/>
+ </filter>
+</svg>
+<div style="width: 100px; height: 100px; background-color: red; filter: url(#MyFilter);"></div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html
new file mode 100644
index 00000000000..c9da47b1b43
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
+ <defs>
+ <filter id="f1" color-interpolation-filters="sRGB">
+ <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"/>
+ </filter>
+ </defs>
+</svg>
+<style>
+.box {
+ width: 100px;
+ height: 100px;
+ position: absolute;
+}
+.green {
+ background-color: green;
+}
+.blue {
+ background-color: blue;
+}
+.below {
+ top: 100px;
+}
+.parent {
+ filter: url(#f1);
+ background-color: white;
+ position: relative;
+}
+</style>
+<div class="parent">
+<div class="blue box"></div>
+<div class="green box below"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-transformed-child-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-transformed-child-001-ref.html
new file mode 100644
index 00000000000..bcf64941193
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-transformed-child-001-ref.html
@@ -0,0 +1,23 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
+ <defs>
+ <filter id="filter" x="25%" y="0%" width="50%" height="100%">
+ <feComponentTransfer>
+ <feFuncR type="linear" intercept="0" slope="1"/>
+ <feFuncG type="linear" intercept="0" slope="0"/>
+ <feFuncB type="linear" intercept="0" slope="0"/>
+ <feFuncA type="linear" intercept="0" slope="1"/>
+ </feComponentTransfer>
+ </filter>
+ </defs>
+</svg>
+<style>
+div {
+ display: inline-block;
+ filter: url(#filter);
+ background-color: gray;
+ width: 50px;
+ height: 50px;
+ transform: translate(25px, 25px) scale(2);
+}
+</style>
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html
new file mode 100644
index 00000000000..91326ef585e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<body>
+ <svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
+ <defs>
+ <filter id="MyFilter">
+ <fecolormatrix id="color" type="hueRotate" values="90"></fecolormatrix>
+ </filter>
+ </defs>
+ </svg>
+ <div style="filter: url(#MyFilter); width:100px; height:100px; background-color:red;"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html
new file mode 100644
index 00000000000..cd16e54c8e5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<html>
+<body style="filter: opacity(0.501)">
+This test ensures we properly paint the root element when an opacity filter is applied.
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-0001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-001-ref.html
index 82f301f5f6f..82f301f5f6f 100644
--- a/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-0001-ref.html
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-001-ref.html
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-002-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-002-ref.html
new file mode 100644
index 00000000000..344ee53e032
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-002-ref.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<style>
+img {
+ margin: 10px;
+}
+</style>
+<img style="filter: url(../support/hueRotate.svg#MyFilter)" src="../support/color-palette.png">
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/root-element-with-opacity-filter-001.html b/tests/wpt/web-platform-tests/css/filter-effects/root-element-with-opacity-filter-001.html
new file mode 100644
index 00000000000..577e2bd4c03
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/root-element-with-opacity-filter-001.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<title>Opacity Filter: root element opacity filter</title>
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#funcdef-filter-opacity">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=349587">
+<link rel="match" href="reference/root-element-with-opacity-filter-001-ref.html">
+<meta name="assert" content="This test ensures that the root renderer has an opacity filter"/>
+<html style="filter: opacity(0.501)">
+This test ensures we properly paint the root element when an opacity filter is applied.
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/support/filter-from-external-url.css b/tests/wpt/web-platform-tests/css/filter-effects/support/filter-from-external-url.css
new file mode 100644
index 00000000000..2940461016c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/support/filter-from-external-url.css
@@ -0,0 +1,3 @@
+.hue-rotate {
+ filter: url('hueRotate.svg#MyFilter');
+}
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-0001.html b/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-001.html
index 3edf7447b8f..5dd382c6dfd 100644
--- a/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-0001.html
+++ b/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-001.html
@@ -4,7 +4,7 @@
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
<link rel="help" href="https://drafts.csswg.org/css-values-4/#relative-urls">
<link rel="help" href="https://crbug.com/405315"/>
-<link rel="match" href="reference/svg-relative-urls-0001-ref.html">
+<link rel="match" href="reference/svg-relative-urls-001-ref.html">
<meta name="assert" content="This test checks that relative SVG filter references in inline styles are correct after an element moves documents.">
<body onload="runTest()">
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-002.html b/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-002.html
new file mode 100644
index 00000000000..278ea164543
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-002.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>SVG Filters: relative URLs from external stylesheets</title>
+<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
+<link rel="help" href="https://drafts.csswg.org/css-values-4/#relative-urls">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=405315">
+<link rel="match" href="reference/svg-relative-urls-002-ref.html">
+<meta name="assert" content="Check that SVG filters can be referenced from external stylesheets using a relative URL">
+
+<link rel="stylesheet" href="support/filter-from-external-url.css"
+ onload="document.body && document.body.offsetTop">
+<style>
+img {
+ margin: 10px;
+}
+</style>
+<img class="hue-rotate" src="support/color-palette.png">
diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html
new file mode 100644
index 00000000000..79b5f5f0186
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML>
+<meta name="timeout" content="long">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="scroll_support.js"></script>
+<style>
+html {
+ height: 3000px;
+ width: 3000px;
+}
+#targetDiv {
+ width: 200px;
+ height: 200px;
+ overflow: scroll;
+}
+
+#innerDiv {
+ width: 400px;
+ height: 400px;
+}
+</style>
+
+<body style="margin:0" onload=runTest()>
+<div id="targetDiv">
+ <div id="innerDiv">
+ </div>
+</div>
+</body>
+<script>
+var element_scrollend_arrived = false;
+var document_scrollend_arrived = false;
+
+function onElementScrollEnd(event) {
+ assert_false(event.cancelable);
+ assert_false(event.bubbles);
+ element_scrollend_arrived = true;
+}
+
+function onDocumentScrollEnd(event) {
+ assert_false(event.cancelable);
+ // scrollend events are bubbled when the target node is document.
+ assert_true(event.bubbles);
+ document_scrollend_arrived = true;
+}
+
+function callScrollFunction([scrollTarget, scrollFunction, args]) {
+ scrollTarget[scrollFunction](args);
+}
+
+function runTest() {
+ let root_element = document.scrollingElement;
+ let target_div = document.getElementById("targetDiv");
+
+ promise_test (async (t) => {
+ await waitForCompositorCommit();
+ target_div.addEventListener("scrollend", onElementScrollEnd);
+ document.addEventListener("scrollend", onDocumentScrollEnd);
+
+ let test_cases = [
+ [target_div, 200, 200, [target_div, "scrollTo", { top: 200, left: 200, behavior: "auto" }]],
+ [target_div, 0, 0, [target_div, "scrollTo", { top: 0, left: 0, behavior: "smooth" }]],
+ [root_element, 200, 200, [root_element, "scrollTo", { top: 200, left: 200, behavior: "auto" }]],
+ [root_element, 0, 0, [root_element, "scrollTo", { top: 0, left: 0, behavior: "smooth" }]],
+ [target_div, 200, 200, [target_div, "scrollBy", { top: 200, left: 200, behavior: "auto" }]],
+ [target_div, 0, 0, [target_div, "scrollBy", { top: -200, left: -200, behavior: "smooth" }]],
+ [root_element, 200, 200, [root_element, "scrollBy", { top: 200, left: 200, behavior: "auto" }]],
+ [root_element, 0, 0, [root_element, "scrollBy", { top: -200, left: -200, behavior: "smooth" }]]
+ ];
+
+ for(i = 0; i < test_cases.length; i++) {
+ let t = test_cases[i];
+ let target = t[0];
+ let expected_x = t[1];
+ let expected_y = t[2];
+ let scroll_datas = t[3];
+
+ callScrollFunction(scroll_datas);
+ await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + scroll_datas[1] + " did not receive scrollend event.");
+ if (target == root_element)
+ assert_false(element_scrollend_arrived);
+ else
+ assert_false(document_scrollend_arrived);
+ assert_equals(target.scrollLeft, expected_x, target.tagName + "." + scroll_datas[1] + " scrollLeft");
+ assert_equals(target.scrollTop, expected_y, target.tagName + "." + scroll_datas[1] + " scrollTop");
+
+ element_scrollend_arrived = false;
+ document_scrollend_arrived = false;
+ }
+ }, "Tests scrollend event for calling scroll functions.");
+
+ promise_test(async (t) => {
+ await waitForCompositorCommit();
+
+ let test_cases = [
+ [target_div, "scrollTop"],
+ [target_div, "scrollLeft"],
+ [root_element, "scrollTop"],
+ [root_element, "scrollLeft"]
+ ];
+ for (i = 0; i < test_cases.length; i++) {
+ let t = test_cases[i];
+ let target = t[0];
+ let attribute = t[1];
+ let position = 200;
+
+ target.style.scrollBehavior = "smooth";
+ target[attribute] = position;
+ await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + attribute + " did not receive scrollend event.");
+ if (target == root_element)
+ assert_false(element_scrollend_arrived);
+ else
+ assert_false(document_scrollend_arrived);
+ assert_equals(target[attribute], position, target.tagName + "." + attribute + " ");
+ element_scrollend_arrived = false;
+ document_scrollend_arrived = false;
+
+ await waitForCompositorCommit();
+ target.style.scrollBehavior = "auto";
+ target[attribute] = 0;
+ await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + attribute + " did not receive scrollend event.");
+ if (target == root_element)
+ assert_false(element_scrollend_arrived);
+ else
+ assert_false(document_scrollend_arrived);
+ assert_equals(target[attribute], 0, target.tagName + "." + attribute + " ");
+ element_scrollend_arrived = false;
+ document_scrollend_arrived = false;
+ }
+ }, "Tests scrollend event for changing scroll attributes.");
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html
new file mode 100644
index 00000000000..63e1c3e22ea
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML>
+<meta name="timeout" content="long">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="scroll_support.js"></script>
+<style>
+html {
+ height: 3000px;
+ width: 3000px;
+}
+#targetDiv {
+ width: 200px;
+ height: 200px;
+ overflow: scroll;
+}
+
+#innerDiv {
+ width: 400px;
+ height: 400px;
+}
+</style>
+
+<body style="margin:0" onload=runTest()>
+<div id="targetDiv">
+ <div id="innerDiv">
+ </div>
+</div>
+</body>
+<script>
+var element_scrollend_arrived = false;
+var document_scrollend_arrived = false;
+
+function onElementScrollEnd(event) {
+ assert_false(event.cancelable);
+ assert_false(event.bubbles);
+ element_scrollend_arrived = true;
+}
+
+function onDocumentScrollEnd(event) {
+ assert_false(event.cancelable);
+ // scrollend events are bubbled when the target node is document.
+ assert_true(event.bubbles);
+ document_scrollend_arrived = true;
+}
+
+function callScrollFunction([scrollTarget, scrollFunction, args]) {
+ scrollTarget[scrollFunction](args);
+}
+
+function runTest() {
+ let root_element = document.scrollingElement;
+ let target_div = document.getElementById("targetDiv");
+ let inner_div = document.getElementById("innerDiv");
+
+ // Get expected position for root_element scrollIntoView.
+ root_element.scrollTo(10000, 10000);
+ let max_root_x = root_element.scrollLeft;
+ let max_root_y = root_element.scrollTop;
+ root_element.scrollTo(0, 0);
+
+ target_div.scrollTo(10000, 10000);
+ let max_element_x = target_div.scrollLeft;
+ let max_element_y = target_div.scrollTop;
+ target_div.scrollTo(0, 0);
+
+ promise_test (async (t) => {
+ await waitForCompositorCommit();
+ target_div.addEventListener("scrollend", onElementScrollEnd);
+ document.addEventListener("scrollend", onDocumentScrollEnd);
+
+ let test_cases = [
+ [target_div, max_element_x, max_element_y, [inner_div, "scrollIntoView", { inline: "end", block: "end", behavior: "auto" }]],
+ [target_div, 0, 0, [inner_div, "scrollIntoView", { inline: "start", block: "start", behavior: "smooth" }]],
+ [root_element, max_root_x, max_root_y, [root_element, "scrollIntoView", { inline: "end", block: "end", behavior: "smooth" }]],
+ [root_element, 0, 0, [root_element, "scrollIntoView", { inline: "start", block: "start", behavior: "smooth" }]]
+ ];
+
+ for(i = 0; i < test_cases.length; i++) {
+ let t = test_cases[i];
+ let target = t[0];
+ let expected_x = t[1];
+ let expected_y = t[2];
+ let scroll_datas = t[3];
+
+ callScrollFunction(scroll_datas);
+ await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + ".scrollIntoView did not receive scrollend event.");
+ if (target == root_element)
+ assert_false(element_scrollend_arrived);
+ else
+ assert_false(document_scrollend_arrived);
+ assert_equals(target.scrollLeft, expected_x, target.tagName + ".scrollIntoView scrollLeft");
+ assert_equals(target.scrollTop, expected_y, target.tagName + ".scrollIntoView scrollTop");
+
+ element_scrollend_arrived = false;
+ document_scrollend_arrived = false;
+ }
+ }, "Tests scrollend event for scrollIntoView.");
+
+ promise_test(async (t) => {
+ document.body.removeChild(target_div);
+ let out_div = document.createElement("div");
+ out_div.style = "width: 100px; height:100px; overflow:scroll; scroll-behavior:smooth;";
+ out_div.appendChild(target_div);
+ document.body.appendChild(out_div);
+ await waitForCompositorCommit();
+
+ element_scrollend_arrived = false;
+ document_scrollend_arrived = false;
+ inner_div.scrollIntoView({ inline: "end", block: "end", behavior: "auto" });
+ await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, "Nested scrollIntoView did not receive scrollend event.");
+ assert_equals(root_element.scrollLeft, 0, "Nested scrollIntoView root_element scrollLeft");
+ assert_equals(root_element.scrollTop, 0, "Nested scrollIntoView root_element scrollTop");
+ assert_equals(out_div.scrollLeft, 100, "Nested scrollIntoView out_div scrollLeft");
+ assert_equals(out_div.scrollTop, 100, "Nested scrollIntoView out_div scrollTop");
+ assert_equals(target_div.scrollLeft, max_element_x, "Nested scrollIntoView target_div scrollLeft");
+ assert_equals(target_div.scrollTop, max_element_y, "Nested scrollIntoView target_div scrollTop");
+ assert_false(document_scrollend_arrived);
+ }, "Tests scrollend event for nested scrollIntoView.");
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/natural-size-orientation.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/natural-size-orientation.html
new file mode 100644
index 00000000000..662dc0804fa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/natural-size-orientation.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>naturalWidth and naturalHeight on HTMLImageElement reflect orientation metadata</title>
+<link rel="author" title="Cameron McCormack" href="mailto:cam@mcc.id.au">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+.ignore-orientation { image-orientation: none; }
+</style>
+<body>
+<script>
+async_test(function(t) {
+ let img = document.createElement("img");
+ img.src = "/images/green-100x50.png";
+ img.onload = t.step_func_done(function() {
+ assert_equals(img.naturalWidth, 100);
+ assert_equals(img.naturalHeight, 50);
+ img.remove();
+ });
+ document.body.append(img);
+}, "naturalWidth and naturalHeight return correct values for an image without orientation metadata");
+
+async_test(function(t) {
+ let img = document.createElement("img");
+ img.src = "/images/arrow-oriented-upright.jpg";
+ img.onload = t.step_func_done(function() {
+ assert_equals(img.naturalWidth, 144);
+ assert_equals(img.naturalHeight, 240);
+ img.remove();
+ });
+ document.body.append(img);
+}, "naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata");
+
+async_test(function(t) {
+ let img = document.createElement("img");
+ img.src = "/images/arrow-oriented-upright.jpg";
+ img.className = "ignore-orientation";
+ img.onload = t.step_func_done(function() {
+ assert_equals(img.naturalWidth, 144);
+ assert_equals(img.naturalHeight, 240);
+ img.remove();
+ });
+ document.body.append(img);
+}, "naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none");
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-interactive-content.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-interactive-content.html
new file mode 100644
index 00000000000..60a80fad9d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-interactive-content.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Label event handling when a descendant interactive content is clicked</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<label id=label></label>
+<template id=interactive-content>
+ <a href="about:blank" onclick="event.preventDefault()"></a>
+ <audio controls></audio>
+ <button></button>
+ <details></details>
+ <embed>
+ <iframe></iframe>
+ <img usemap="">
+ <input>
+ <label>label</label>
+ <object usemap=""></object>
+ <select></select>
+ <textarea></textarea>
+ <video controls></video>
+
+ <div tabindex=""></div>
+
+ <!-- These are interesting in that even without tabindex, they could become
+ interactive with the addition/removal of an attribute. -->
+ <a tabindex=""></a>
+ <audio tabindex=""></audio>
+ <img tabindex="">
+ <input type=hidden tabindex="">
+ <object tabindex=""></object>
+ <video tabindex=""></video>
+</template>
+
+<script>
+"use strict";
+
+const interactiveContent = document.getElementById("interactive-content");
+const interactiveElements = Array.from(interactiveContent.content.children);
+const label = document.getElementById("label");
+
+for (const srcInteractiveElement of interactiveElements) {
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const interactiveElement = srcInteractiveElement.cloneNode();
+ label.appendChild(interactiveElement);
+
+ let clicked = 0;
+ interactiveElement.addEventListener("click", () => {
+ clicked++;
+ });
+ interactiveElement.click();
+ assert_equals(clicked, 1, "clicking interactive content");
+
+ clicked = 0;
+ const span = document.createElement("span");
+ interactiveElement.appendChild(span);
+ span.click();
+ assert_equals(clicked, 1, "clicking descendant of interactive content");
+ }, `interactive content ${srcInteractiveElement.outerHTML} as first child of <label>`);
+
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const interactiveElement = srcInteractiveElement.cloneNode();
+ const div = document.createElement("div");
+ div.appendChild(interactiveElement);
+ label.appendChild(div);
+
+ let clicked = 0;
+ interactiveElement.addEventListener("click", () => {
+ clicked++;
+ });
+ interactiveElement.click();
+ assert_equals(clicked, 1, "clicking nested interactive content");
+
+ clicked = 0;
+ const span = document.createElement("span");
+ interactiveElement.appendChild(span);
+ span.click();
+ assert_equals(clicked, 1, "clicking descendant of nested interactive content");
+ }, `interactive content ${srcInteractiveElement.outerHTML} deeply nested under <label>`);
+
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const button = document.createElement("button");
+ label.appendChild(button);
+
+ const interactiveElement = srcInteractiveElement.cloneNode();
+ label.appendChild(interactiveElement);
+
+ let buttonClicked = 0;
+ button.addEventListener("click", () => {
+ buttonClicked++;
+ });
+
+ let clicked = 0;
+ interactiveElement.addEventListener("click", () => {
+ clicked++;
+ });
+ interactiveElement.click();
+ assert_equals(clicked, 1, "clicking nested interactive content");
+ assert_equals(buttonClicked, 0, "clicking nested interactive content should not click button");
+
+ clicked = 0;
+ const span = document.createElement("span");
+ interactiveElement.appendChild(span);
+ span.click();
+ assert_equals(clicked, 1, "clicking descendant of nested interactive content");
+ assert_equals(buttonClicked, 0, "clicking descendant of nested interactive content should not click button");
+ }, `interactive content ${srcInteractiveElement.outerHTML} as second child under <label>`);
+}
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-labelable-content.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-labelable-content.html
new file mode 100644
index 00000000000..5563ef1e3c7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-labelable-content.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Label event handling when a descendant labelable but not interactive element is clicked</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<label id=label></label>
+<template id=labelable-not-interactive-content>
+ <meter></meter>
+ <output></output>
+ <progress></progress>
+</template>
+
+<script>
+"use strict";
+
+const template = document.getElementById("labelable-not-interactive-content");
+const labelableNotInteractiveElements = Array.from(template.content.children);
+const label = document.getElementById("label");
+
+// This part may be subject to platform-dependent operations in the spec, so we
+// only check for obvious errors. (Clicking once should register at least one
+// click, but less than 30 clicks.) See
+// https://github.com/whatwg/html/issues/5415 for possibly tightening this up.
+function checkClickCount(clicked, description) {
+ assert_greater_than(clicked, 0, description);
+ assert_less_than(clicked, 30, description);
+}
+
+for (const srcElement of labelableNotInteractiveElements) {
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const element = srcElement.cloneNode();
+ label.appendChild(element);
+
+ let clicked = 0;
+ element.addEventListener("click", () => {
+ clicked++;
+ });
+ element.click();
+ checkClickCount(clicked, "clicking labelable content");
+
+ clicked = 0;
+ const span = document.createElement("span");
+ element.appendChild(span);
+ span.click();
+ checkClickCount(clicked, "clicking descendant of labelable content");
+ }, `labelable element ${srcElement.outerHTML} as first child of <label>`);
+
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const element = srcElement.cloneNode();
+ const div = document.createElement("div");
+ div.appendChild(element);
+ label.appendChild(div);
+
+ let clicked = 0;
+ element.addEventListener("click", () => {
+ clicked++;
+ });
+ element.click();
+ checkClickCount(clicked, "clicking nested labelable content");
+
+ clicked = 0;
+ const span = document.createElement("span");
+ element.appendChild(span);
+ span.click();
+ checkClickCount(clicked, "clicking descendant of nested labelable content");
+ }, `labelable element ${srcElement.outerHTML} deeply nested under <label>`);
+
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const button = document.createElement("button");
+ label.appendChild(button);
+
+ const element = srcElement.cloneNode();
+ label.appendChild(element);
+
+ let buttonClicked = 0;
+ button.addEventListener("click", () => {
+ buttonClicked++;
+ });
+
+ let clicked = 0;
+ element.addEventListener("click", () => {
+ clicked++;
+ });
+ element.click();
+ assert_equals(clicked, 1, "clicking nested labelable content");
+ assert_equals(buttonClicked, 1, "clicking nested labelable content should click button");
+
+ buttonClicked = 0;
+ clicked = 0;
+ const span = document.createElement("span");
+ element.appendChild(span);
+ span.click();
+ assert_equals(clicked, 1, "clicking descendant of nested labelable content");
+ assert_equals(buttonClicked, 1, "clicking descendant of nested labelable content should not click button");
+ }, `labelable element ${srcElement.outerHTML} as second child under <label>`);
+}
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html
new file mode 100644
index 00000000000..233168f5664
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Label event handling when a descendant noninteractive and unlabelable content is clicked</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<label id=label></label>
+<template id=noninteractive-unlabelable-content>
+ <div></div>
+ <svg></svg>
+
+ <!-- These are "almost interactive": they could become interactive with the
+ addition/removal of a non-tabindex attribute. -->
+ <a></a>
+ <audio></audio>
+ <img>
+ <input type=hidden>
+ <object></object>
+ <video></video>
+</template>
+
+<script>
+"use strict";
+
+const template = document.getElementById("noninteractive-unlabelable-content");
+{
+ const details = document.createElementNS("http://www.w3.org/2000/svg", "details");
+ template.content.appendChild(details);
+}
+
+const elements = Array.from(template.content.children);
+const label = document.getElementById("label");
+
+for (const srcElement of elements) {
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const element = srcElement.cloneNode();
+ label.appendChild(element);
+
+ let clicked = 0;
+ element.addEventListener("click", () => {
+ clicked++;
+ });
+ element.dispatchEvent(new MouseEvent("click", { bubbles: true }));
+ assert_equals(clicked, 1, "clicking interactive content");
+
+ clicked = 0;
+ const span = document.createElement("span");
+ element.appendChild(span);
+ span.click();
+ assert_equals(clicked, 1, "clicking descendant of interactive content");
+ }, `noninteractive unlabelable content ${srcElement.outerHTML} as first child of <label>`);
+
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const element = srcElement.cloneNode();
+ const div = document.createElement("div");
+ div.appendChild(element);
+ label.appendChild(div);
+
+ let clicked = 0;
+ element.addEventListener("click", () => {
+ clicked++;
+ });
+ element.dispatchEvent(new MouseEvent("click", { bubbles: true }));
+ assert_equals(clicked, 1, "clicking nested interactive content");
+
+ clicked = 0;
+ const span = document.createElement("span");
+ element.appendChild(span);
+ span.click();
+ assert_equals(clicked, 1, "clicking descendant of nested interactive content");
+ }, `noninteractive unlabelable content ${srcElement.outerHTML} deeply nested under <label>`);
+
+ test(t => {
+ t.add_cleanup(() => {
+ label.innerHTML = "";
+ });
+
+ const button = document.createElement("button");
+ label.appendChild(button);
+
+ const element = srcElement.cloneNode();
+ label.appendChild(element);
+
+ let buttonClicked = 0;
+ button.addEventListener("click", () => {
+ buttonClicked++;
+ });
+
+ let clicked = 0;
+ element.addEventListener("click", () => {
+ clicked++;
+ });
+ element.dispatchEvent(new MouseEvent("click", { bubbles: true }));
+ assert_equals(clicked, 1, "clicking noninteractive unlabelable content");
+ assert_equals(buttonClicked, 1, "clicking noninteractive unlabelable content should click button");
+
+ buttonClicked = 0;
+ clicked = 0;
+ const span = document.createElement("span");
+ element.appendChild(span);
+ span.click();
+ assert_equals(clicked, 1, "clicking descendant of nested noninteractive unlabelable content");
+ assert_equals(
+ buttonClicked, 1,
+ "clicking descendant of nested noninteractive unlabelable content should click button"
+ );
+ }, `noninteractive unlabelable content ${srcElement.outerHTML} as second child under <label>`);
+}
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/images/arrow-oriented-upright.jpg b/tests/wpt/web-platform-tests/images/arrow-oriented-upright.jpg
new file mode 100644
index 00000000000..cebc99af14b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/images/arrow-oriented-upright.jpg
Binary files differ
diff --git a/tests/wpt/web-platform-tests/interfaces/css-typed-om.idl b/tests/wpt/web-platform-tests/interfaces/css-typed-om.idl
index df9669e5637..00d3f49bfe6 100644
--- a/tests/wpt/web-platform-tests/interfaces/css-typed-om.idl
+++ b/tests/wpt/web-platform-tests/interfaces/css-typed-om.idl
@@ -41,9 +41,9 @@ partial interface mixin ElementCSSInlineStyle {
[SameObject] readonly attribute StylePropertyMap attributeStyleMap;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(sequence<CSSUnparsedSegment> members)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSUnparsedValue : CSSStyleValue {
+ constructor(sequence<CSSUnparsedSegment> members);
iterable<CSSUnparsedSegment>;
readonly attribute unsigned long length;
getter CSSUnparsedSegment (unsigned long index);
@@ -52,16 +52,16 @@ interface CSSUnparsedValue : CSSStyleValue {
typedef (USVString or CSSVariableReferenceValue) CSSUnparsedSegment;
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(USVString variable, optional CSSUnparsedValue? fallback = null)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSVariableReferenceValue {
+ constructor(USVString variable, optional CSSUnparsedValue? fallback = null);
attribute USVString variable;
readonly attribute CSSUnparsedValue? fallback;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(USVString value)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSKeywordValue : CSSStyleValue {
+ constructor(USVString value);
attribute USVString value;
};
@@ -108,9 +108,9 @@ interface CSSNumericValue : CSSStyleValue {
[Exposed=Window] static CSSNumericValue parse(USVString cssText);
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(double value, USVString unit)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSUnitValue : CSSNumericValue {
+ constructor(double value, USVString unit);
attribute double value;
readonly attribute USVString unit;
};
@@ -120,45 +120,45 @@ interface CSSMathValue : CSSNumericValue {
readonly attribute CSSMathOperator operator;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumberish... args)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathSum : CSSMathValue {
+ constructor(CSSNumberish... args);
readonly attribute CSSNumericArray values;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumberish... args)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathProduct : CSSMathValue {
+ constructor(CSSNumberish... args);
readonly attribute CSSNumericArray values;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumberish arg)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathNegate : CSSMathValue {
+ constructor(CSSNumberish arg);
readonly attribute CSSNumericValue value;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumberish arg)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathInvert : CSSMathValue {
+ constructor(CSSNumberish arg);
readonly attribute CSSNumericValue value;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumberish... args)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathMin : CSSMathValue {
+ constructor(CSSNumberish... args);
readonly attribute CSSNumericArray values;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumberish... args)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathMax : CSSMathValue {
+ constructor(CSSNumberish... args);
readonly attribute CSSNumericArray values;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumberish min, CSSNumberish val, CSSNumberish max)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMathClamp : CSSMathValue {
+ constructor(CSSNumberish min, CSSNumberish val, CSSNumberish max);
readonly attribute CSSNumericValue min;
readonly attribute CSSNumericValue val;
readonly attribute CSSNumericValue max;
@@ -230,9 +230,9 @@ partial namespace CSS {
CSSUnitValue fr(double value);
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(sequence<CSSTransformComponent> transforms)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSTransformValue : CSSStyleValue {
+ constructor(sequence<CSSTransformComponent> transforms);
iterable<CSSTransformComponent>;
readonly attribute unsigned long length;
getter CSSTransformComponent (unsigned long index);
@@ -249,63 +249,63 @@ interface CSSTransformComponent {
DOMMatrix toMatrix();
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumericValue x, CSSNumericValue y, optional CSSNumericValue z)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSTranslate : CSSTransformComponent {
+ constructor(CSSNumericValue x, CSSNumericValue y, optional CSSNumericValue z);
attribute CSSNumericValue x;
attribute CSSNumericValue y;
attribute CSSNumericValue z;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumericValue angle),
- Constructor(CSSNumberish x, CSSNumberish y, CSSNumberish z, CSSNumericValue angle)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSRotate : CSSTransformComponent {
+ constructor(CSSNumericValue angle);
+ constructor(CSSNumberish x, CSSNumberish y, CSSNumberish z, CSSNumericValue angle);
attribute CSSNumberish x;
attribute CSSNumberish y;
attribute CSSNumberish z;
attribute CSSNumericValue angle;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumberish x, CSSNumberish y, optional CSSNumberish z)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSScale : CSSTransformComponent {
+ constructor(CSSNumberish x, CSSNumberish y, optional CSSNumberish z);
attribute CSSNumberish x;
attribute CSSNumberish y;
attribute CSSNumberish z;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumericValue ax, CSSNumericValue ay)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSSkew : CSSTransformComponent {
+ constructor(CSSNumericValue ax, CSSNumericValue ay);
attribute CSSNumericValue ax;
attribute CSSNumericValue ay;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumericValue ax)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSSkewX : CSSTransformComponent {
+ constructor(CSSNumericValue ax);
attribute CSSNumericValue ax;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumericValue ay)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSSkewY : CSSTransformComponent {
+ constructor(CSSNumericValue ay);
attribute CSSNumericValue ay;
};
/* Note that skew(x,y) is *not* the same as skewX(x) skewY(y),
thus the separate interfaces for all three. */
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(CSSNumericValue length)]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSPerspective : CSSTransformComponent {
+ constructor(CSSNumericValue length);
attribute CSSNumericValue length;
};
-[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet),
- Constructor(DOMMatrixReadOnly matrix, optional CSSMatrixComponentOptions options = {})]
+[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)]
interface CSSMatrixComponent : CSSTransformComponent {
+ constructor(DOMMatrixReadOnly matrix, optional CSSMatrixComponentOptions options = {});
attribute DOMMatrix matrix;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/permissions.idl b/tests/wpt/web-platform-tests/interfaces/permissions.idl
index 9cde372a127..d45c7f93cac 100644
--- a/tests/wpt/web-platform-tests/interfaces/permissions.idl
+++ b/tests/wpt/web-platform-tests/interfaces/permissions.idl
@@ -46,6 +46,10 @@ dictionary DevicePermissionDescriptor : PermissionDescriptor {
DOMString deviceId;
};
+dictionary CameraDevicePermissionDescriptor : DevicePermissionDescriptor {
+ boolean panTiltZoom = false;
+};
+
dictionary PermissionSetParameters {
required PermissionDescriptor descriptor;
required PermissionState state;
diff --git a/tests/wpt/web-platform-tests/interfaces/worklets.idl b/tests/wpt/web-platform-tests/interfaces/worklets.idl
index 16187664b3b..f89eacd50bd 100644
--- a/tests/wpt/web-platform-tests/interfaces/worklets.idl
+++ b/tests/wpt/web-platform-tests/interfaces/worklets.idl
@@ -9,7 +9,7 @@ interface WorkletGlobalScope {
[Exposed=Window]
interface Worklet {
- [NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options);
+ [NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options = {});
};
dictionary WorkletOptions {
diff --git a/tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html b/tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html
index 56dd71b1156..6d3997b085c 100644
--- a/tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html
+++ b/tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html
@@ -137,6 +137,21 @@ test(() => {
}, 'Previously assigned slotable is moved to new slot when it\'s reassigned.');
test(() => {
+ let tTree = createTestTree(test_assign);
+
+ tTree.s1.assign([tTree.c1]);
+ tTree.s2.assign([tTree.c2, tTree.c1]);
+ tTree.s3.assign([tTree.c1, tTree.c3]);
+
+ assert_array_equals(tTree.s1.assignedNodes(), []);
+ assert_array_equals(tTree.s2.assignedNodes(), [tTree.c2]);
+ assert_array_equals(tTree.s3.assignedNodes(), [tTree.c1, tTree.c3]);
+ assert_equals(tTree.c1.assignedSlot, tTree.s3);
+ assert_equals(tTree.c2.assignedSlot, tTree.s2);
+ assert_equals(tTree.c3.assignedSlot, tTree.s3);
+}, 'Order and assignment of nodes are preserved during multiple assignment in a row.');
+
+test(() => {
let tTree = createTestTree(test_assign);
// tTree.c4 is invalid for tTree.host slot assignment.
@@ -194,7 +209,7 @@ test(() => {
assert_array_equals(tTree.s4.assignedNodes(), []);
tTree.ns1.append(tTree.s1);
- assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1, tTree.c2, tTree.c3]);
+ assert_array_equals(tTree.s1.assignedNodes(), []);
}, 'Moving a slot\'s tree order position within a shadow host has no impact on its assigned slotables.');
test(() => {
@@ -207,7 +222,7 @@ test(() => {
assert_array_equals(tTree.s1.assignedNodes(), [tTree.c2, tTree.c3]);
assert_array_equals(tTree.s4.assignedNodes(), []);
- tTree.s4.assign(tTree.c1);
+ tTree.s4.assign([tTree.c1]);
assert_array_equals(tTree.s4.assignedNodes(), [tTree.c1]);
assert_equals(tTree.c1.assignedSlot, tTree.s4);
}, 'Appending slotable to different host, it loses slot assignment. It can be re-assigned within a new host.');
@@ -215,6 +230,36 @@ test(() => {
test(() => {
let tTree = createTestTree(test_assign);
+ tTree.s1.assign([tTree.c1]);
+ assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1]);
+
+ tTree.shadow_root4.insertBefore(tTree.s1, tTree.s4);
+ assert_array_equals(tTree.s1.assignedNodes(), []);
+ // Don't trigger slot assignment on previous shadow root.
+ // assert_array_equals(tTree.s2.assignedNodes(), []);
+
+ tTree.shadow_root.insertBefore(tTree.s1, tTree.s2);
+ assert_array_equals(tTree.s1.assignedNodes(), []);
+}, 'Previously assigned node should not be assigned if slot moved to a new shadow root. The slot remains empty when moved back, no trigger recalc.');
+
+test(() => {
+ let tTree = createTestTree(test_assign);
+
+ tTree.s1.assign([tTree.c1]);
+ assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1]);
+
+ tTree.shadow_root4.insertBefore(tTree.s1, tTree.s4);
+ assert_array_equals(tTree.s1.assignedNodes(), []);
+ // Trigger slot assignment on previous shadow root.
+ assert_array_equals(tTree.s2.assignedNodes(), []);
+
+ tTree.shadow_root.insertBefore(tTree.s1, tTree.s2);
+ assert_array_equals(tTree.s1.assignedNodes(), []);
+}, 'Previously assigned node should not be assigned if slot moved to a new shadow root. The slot remains empty when moved back, trigger recalc.');
+
+test(() => {
+ let tTree = createTestTree(test_assign);
+
tTree.s1.assign([tTree.c1, tTree.c1, tTree.c1]);
assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1]);
diff --git a/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb b/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
index 5f8d6806107..d58664c5b6c 100644
--- a/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
+++ b/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb
@@ -1,10 +1,10 @@
cask 'safari-technology-preview' do
if MacOS.version <= :mojave
- version '103,061-90754-20200325-37467264-9c34-454c-be4a-1cb87e93c62c'
- sha256 'f2175a2ca69152b6c1067d47b56d464b0ba0c71323a76137b488a8088a25f44c'
+ version '104,061-96689-20200407-7f675598-e07d-46db-8b24-b10c33a006ba'
+ sha256 'bc1b0a79f99022aae802bbb1e83a6a13613a339115063489fc240567b1b5d81d'
else
- version '103,061-90752-20200325-cc5192c4-619a-45b4-83b5-70a1bed8c912'
- sha256 '846f2c9e7ebcc293f01ea36c8e1184e2d1bfb985eb3a590fc7c730c40e10a4b6'
+ version '104,061-96685-20200407-907fca12-9ba9-4bfa-8b8c-d5bf101d534b'
+ sha256 '3dcfde56386f38984c9ede1d67714c43699c5cafece9608ee2730484bffdcf9c'
end
url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"
diff --git a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py
index 6f11eb59740..6d329ad38f9 100644
--- a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py
+++ b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py
@@ -1,4 +1,5 @@
import os
+import sys
import mock
@@ -105,7 +106,10 @@ def manifest_tree(draw):
return output
+
@h.given(manifest_tree())
+# FIXME: Workaround for https://github.com/web-platform-tests/wpt/issues/22758
+@h.settings(suppress_health_check=(h.HealthCheck.too_slow,) if sys.version_info.major == 3 else ())
@h.example([SourceFileWithTest("a", "0"*40, item.ConformanceCheckerTest)])
def test_manifest_to_json(s):
m = manifest.Manifest()
@@ -119,7 +123,10 @@ def test_manifest_to_json(s):
assert loaded.to_json() == json_str
+
@h.given(manifest_tree())
+# FIXME: Workaround for https://github.com/web-platform-tests/wpt/issues/22758
+@h.settings(suppress_health_check=(h.HealthCheck.too_slow,) if sys.version_info.major == 3 else ())
@h.example([SourceFileWithTest("a", "0"*40, item.TestharnessTest)])
@h.example([SourceFileWithTest("a", "0"*40, item.RefTest, references=[("/aa", "==")])])
def test_manifest_idempotent(s):
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py
index dba8432b5a7..cb2b175d4df 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py
@@ -3,7 +3,8 @@ from .base import get_timeout_multiplier # noqa: F401
from ..webdriver_server import SafariDriverServer
from ..executors import executor_kwargs as base_executor_kwargs
from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401
- WebDriverRefTestExecutor) # noqa: F401
+ WebDriverRefTestExecutor, # noqa: F401
+ WebDriverCrashtestExecutor) # noqa: F401
from ..executors.executorsafari import SafariDriverWdspecExecutor # noqa: F401
@@ -12,7 +13,8 @@ __wptrunner__ = {"product": "safari",
"browser": "SafariBrowser",
"executor": {"testharness": "WebDriverTestharnessExecutor",
"reftest": "WebDriverRefTestExecutor",
- "wdspec": "SafariDriverWdspecExecutor"},
+ "wdspec": "SafariDriverWdspecExecutor",
+ "crashtest": "WebDriverCrashtestExecutor"},
"browser_kwargs": "browser_kwargs",
"executor_kwargs": "executor_kwargs",
"env_extras": "env_extras",
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py
index 72f3a591ad7..60b1b0a5a87 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py
@@ -7,6 +7,7 @@ import mock
from mozlog import handlers, structuredlog
from ..formatters import wptreport
+from ..formatters.wptscreenshot import WptscreenshotFormatter
from ..formatters.wptreport import WptreportFormatter
@@ -166,3 +167,26 @@ def test_wptreport_known_intermittent(capfd):
subtest = test["subtests"][0]
assert subtest["expected"] == u"PASS"
assert subtest["known_intermittent"] == [u'FAIL']
+
+
+def test_wptscreenshot_test_end(capfd):
+ formatter = WptscreenshotFormatter()
+
+ # Empty
+ data = {}
+ assert formatter.test_end(data) is None
+
+ # No items
+ data['extra'] = {"reftest_screenshots": []}
+ assert formatter.test_end(data) is None
+
+ # Invalid item
+ data['extra']['reftest_screenshots'] = ["no dict item"]
+ assert formatter.test_end(data) is None
+
+ # Random hash
+ data['extra']['reftest_screenshots'] = [{"hash": "HASH", "screenshot": "DATA"}]
+ assert 'data:image/png;base64,DATA\n' == formatter.test_end(data)
+
+ # Already cached hash
+ assert formatter.test_end(data) is None
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py
index 77cb23a71e1..9a8fccf935a 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py
@@ -117,3 +117,26 @@ def test_log_handler():
handler.test_start(data)
handler.test_end(data)
assert test["timeout"] == timeout * 1000
+
+
+def test_err_string():
+ assert stability.err_string(
+ {u'OK': 1, u'FAIL': 1}, 1) == u"**Duplicate subtest name**"
+ assert stability.err_string(
+ {u'OK': 2, u'FAIL': 1}, 2) == u"**Duplicate subtest name**"
+ assert stability.err_string({u'SKIP': 1}, 0) == u"Duplicate subtest name"
+ assert stability.err_string(
+ {u'SKIP': 1, u'OK': 1}, 1) == u"Duplicate subtest name"
+
+ assert stability.err_string(
+ {u'FAIL': 1}, 2) == u"**FAIL: 1/2, MISSING: 1/2**"
+ assert stability.err_string(
+ {u'FAIL': 1, u'OK': 1}, 3) == u"**FAIL: 1/3, OK: 1/3, MISSING: 1/3**"
+
+ assert stability.err_string(
+ {u'OK': 1, u'FAIL': 1}, 2) == u"**FAIL: 1/2, OK: 1/2**"
+
+ assert stability.err_string(
+ {u'OK': 2, u'FAIL': 1, u'SKIP': 1}, 4) == u"FAIL: 1/4, OK: 2/4, SKIP: 1/4"
+ assert stability.err_string(
+ {u'FAIL': 1, u'SKIP': 1, u'OK': 2}, 4) == u"FAIL: 1/4, OK: 2/4, SKIP: 1/4"
diff --git a/tests/wpt/web-platform-tests/trust-tokens/end-to-end/README.txt b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/README.txt
new file mode 100644
index 00000000000..a86468df9d6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/README.txt
@@ -0,0 +1,4 @@
+These tests confirm that Trust Tokens protocol operations executed correctly end
+to end (in contrast to just checking, as the parent directory's
+trust-token-parameter-validation does, that a method's interface is present and
+correctly rejects invalid arguments).
diff --git a/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token-with-no-top-frame.tentative.https.html b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token-with-no-top-frame.tentative.https.html
new file mode 100644
index 00000000000..4788cd99073
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token-with-no-top-frame.tentative.https.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Tests the Trust Token API's hasTrustToken behavior in documents with no top frame</title>
+<link rel="help" href="https://github.com/WICG/trust-token-api" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+ <script>
+ 'use strict';
+
+ const frame = document.createElement('iframe');
+ document.body.appendChild(frame);
+ const cachedDocument = window[0].document;
+ frame.remove();
+
+ test(() => {
+ assert_equals(cachedDocument.hasTrustToken("https://issuer.example"), undefined,
+ "Can't construct a Promise in a destroyed execution context.");
+ }, 'hasTrustToken in a destroyed document.');
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token.tentative.https.html b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token.tentative.https.html
new file mode 100644
index 00000000000..17e037f7393
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token.tentative.https.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Tests the Trust Token API's hasTrustToken function (tentative: the API is a prototype).</title>
+<link rel="help" href="https://github.com/WICG/trust-token-api#trust-token-redemption" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+ 'use strict';
+
+ promise_test((t) => {
+ return promise_rejects_js(t, TypeError, document.hasTrustToken(
+ "http://not-a-secure-url.example"));
+ },
+ 'hasTrustToken requires a secure URL as its issuer argument.');
+
+ promise_test((t) => {
+ return promise_rejects_js(t, TypeError, document.hasTrustToken(
+ "file:///"));
+ },
+ 'hasTrustToken requires a HTTP(S) URL as its issuer argument.');
+
+ // These hasTrustToken calls all affect global state: each call in the form
+ // of hasTrustToken(issuer) will result in |issuer| becoming associated in
+ // persistent storage with the calling top frame's origin.
+ //
+ // TODO(davidvc, crbug.com/1061764): Add a way to reset the global state after
+ // the test concludes.
+ //
+ // TODO(davidvc, crbug.com/1063140): Once it's possible to write WPTs that
+ // result in a trust token being deposited in storage, this should be
+ // expanded to cover the case where the user _does_ have a token.
+ promise_test(async (t) => {
+ let result = await document.hasTrustToken("https://issuer.example/");
+ assert_false(result, "The client should not possess any trust tokens for " +
+ "https://issuer.example since it has not executed an issuance operation" +
+ " against that issuer.");
+
+ result = await document.hasTrustToken("https://issuer2.example/");
+ assert_false(result, "The client should not possess any trust tokens for" +
+ " https://issuer2.example since it has not executed an issuance " +
+ "operation against that issuer.");
+
+ await promise_rejects_dom(t, "OperationError", document.hasTrustToken(
+ "https://issuer3.example/"),
+ "The first two hasTrustToken operations associated this top-level" +
+ " origin with the maximum number of issuers (2), so an attempt to " +
+ " execute hasTrustToken against another issuer should fail.");
+
+ result = await document.hasTrustToken("https://issuer2.example/");
+ assert_false(result, "Since this top-level origin is already associated " +
+ "with https://issuer2.example, subsequent hasTrustToken operations should " +
+ "not error out even though the top-level origin is at its " +
+ "number-of-issuers limit.");
+ }, "When given a valid, secure origin, hasTrustToken should succeed " +
+ "unless associating that origin with the top-level domain would exceed " +
+ "the top-level origin's number-of-associated-issuers limit.");
+</script>