aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini2
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini6
-rw-r--r--tests/wpt/metadata/MANIFEST.json324
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini2
-rw-r--r--tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini4
-rw-r--r--tests/wpt/metadata/dom/events/Event-dispatch-order-at-target.html.ini4
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini21
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini2
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini34
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini34
-rw-r--r--tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini1
-rw-r--r--tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini10
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini7
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini8
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata/webmessaging/with-ports/018.html.ini5
-rw-r--r--tests/wpt/metadata/webmessaging/without-ports/018.html.ini5
-rw-r--r--tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/.github/workflows/epochs.yml2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/path-tests.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/parsing/grid-shorthand-valid.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-shorthand-valid.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/animations/mask-position-interpolation.html146
-rw-r--r--tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-addListener-removeListener.html58
-rw-r--r--tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html168
-rw-r--r--tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget.html118
-rw-r--r--tests/wpt/web-platform-tests/css/cssom-view/MediaQueryListEvent.html60
-rw-r--r--tests/wpt/web-platform-tests/css/cssom-view/matchMedia.html6
-rw-r--r--tests/wpt/web-platform-tests/css/cssom-view/resources/matchMedia.js27
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/idlharness.html1
-rw-r--r--tests/wpt/web-platform-tests/dom/events/Event-dispatch-order-at-target.html31
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/feature-policy-for-sandbox/resources/helper.js2
-rw-r--r--tests/wpt/web-platform-tests/fetch/metadata/portal.tentative.https.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html (renamed from tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html)6
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html (renamed from tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html (renamed from tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html)6
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html (renamed from tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/form-submission.py2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/submit-entity-body.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html77
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-handleEvent-ignored.html38
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onresize.html2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/WebCryptoAPI.idl12
-rw-r--r--tests/wpt/web-platform-tests/interfaces/web-nfc.idl2
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/clip-negative-bottom-margin.html36
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/composited-element-movement.html52
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/fully-clipped-visual-rect.html32
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/ignore-fixed-and-sticky.html52
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/local-shift-without-viewport-shift.html32
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/multi-clip-visual-rect.html36
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/partially-clipped-visual-rect.html32
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/shift-into-viewport.html34
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/shift-outside-viewport.html32
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/shift-while-scrolled.html37
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/shift-with-counterscroll.html56
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/tokens/ms-001-ref.html (renamed from tests/wpt/web-platform-tests/mathml/presentation-markup/direction/direction-009-ref.html)4
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/tokens/ms-001.html (renamed from tests/wpt/web-platform-tests/mathml/presentation-markup/direction/direction-009.html)12
-rw-r--r--tests/wpt/web-platform-tests/portals/about-blank-cannot-host.html17
-rw-r--r--tests/wpt/web-platform-tests/portals/portal-activate-data.html3
-rw-r--r--tests/wpt/web-platform-tests/portals/portals-activate-resolution.html3
-rw-r--r--tests/wpt/web-platform-tests/portals/portals-navigate-after-adoption.html3
-rw-r--r--tests/wpt/web-platform-tests/portals/portals-set-src-after-activate.html3
-rw-r--r--tests/wpt/web-platform-tests/portals/resources/blank-host.html8
-rw-r--r--tests/wpt/web-platform-tests/portals/resources/open-blank-host.js14
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/sms_mock.js11
-rw-r--r--tests/wpt/web-platform-tests/sms/interceptor.https.html17
-rw-r--r--tests/wpt/web-platform-tests/sms/sms_receiver.idl2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py4
90 files changed, 1854 insertions, 260 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
index a9e46713244..76b398963ae 100644
--- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
- expected: TIMEOUT
+ expected: FAIL
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL
diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
index 4c1aa18e695..0bf3b469372 100644
--- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
@@ -2,14 +2,8 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
- [Revoke blob URL after calling fetch, fetch should succeed]
- expected: FAIL
-
[url-with-fetch.any.html]
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
- [Revoke blob URL after calling fetch, fetch should succeed]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 5ee2889461a..714f683129b 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -205305,18 +205305,6 @@
{}
]
],
- "mathml/presentation-markup/direction/direction-009.html": [
- [
- "mathml/presentation-markup/direction/direction-009.html",
- [
- [
- "/mathml/presentation-markup/direction/direction-009-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
"mathml/presentation-markup/direction/direction-010.html": [
[
"mathml/presentation-markup/direction/direction-010.html",
@@ -205821,6 +205809,18 @@
{}
]
],
+ "mathml/presentation-markup/tokens/ms-001.html": [
+ [
+ "mathml/presentation-markup/tokens/ms-001.html",
+ [
+ [
+ "/mathml/presentation-markup/tokens/ms-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"mathml/relations/css-styling/color-001.html": [
[
"mathml/relations/css-styling/color-001.html",
@@ -276990,9 +276990,6 @@
"mathml/presentation-markup/direction/direction-008-ref.html": [
[]
],
- "mathml/presentation-markup/direction/direction-009-ref.html": [
- []
- ],
"mathml/presentation-markup/direction/direction-010-ref.html": [
[]
],
@@ -277125,6 +277122,9 @@
"mathml/presentation-markup/spaces/space-2-ref.html": [
[]
],
+ "mathml/presentation-markup/tokens/ms-001-ref.html": [
+ []
+ ],
"mathml/relations/css-styling/color-001-ref.html": [
[]
],
@@ -278814,9 +278814,15 @@
"portals/references/portals-rendering.html": [
[]
],
+ "portals/resources/blank-host.html": [
+ []
+ ],
"portals/resources/eval-portal.html": [
[]
],
+ "portals/resources/open-blank-host.js": [
+ []
+ ],
"portals/resources/portal-activate-data-portal.html": [
[]
],
@@ -316547,7 +316553,9 @@
"cookies/http-state/path-tests.html": [
[
"cookies/http-state/path-tests.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"cookies/http-state/value-tests.html": [
@@ -324243,6 +324251,12 @@
{}
]
],
+ "css/css-masking/animations/mask-position-interpolation.html": [
+ [
+ "css/css-masking/animations/mask-position-interpolation.html",
+ {}
+ ]
+ ],
"css/css-masking/clip-path/interpolation.html": [
[
"css/css-masking/clip-path/interpolation.html",
@@ -334205,6 +334219,18 @@
{}
]
],
+ "css/cssom-view/MediaQueryList-extends-EventTarget-interop.html": [
+ [
+ "css/cssom-view/MediaQueryList-extends-EventTarget-interop.html",
+ {}
+ ]
+ ],
+ "css/cssom-view/MediaQueryList-extends-EventTarget.html": [
+ [
+ "css/cssom-view/MediaQueryList-extends-EventTarget.html",
+ {}
+ ]
+ ],
"css/cssom-view/MediaQueryListEvent.html": [
[
"css/cssom-view/MediaQueryListEvent.html",
@@ -335348,7 +335374,9 @@
"css/cssom/idlharness.html": [
[
"css/cssom/idlharness.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"css/cssom/inline-style-001.html": [
@@ -337392,6 +337420,12 @@
}
]
],
+ "dom/events/Event-dispatch-order-at-target.html": [
+ [
+ "dom/events/Event-dispatch-order-at-target.html",
+ {}
+ ]
+ ],
"dom/events/Event-dispatch-order.html": [
[
"dom/events/Event-dispatch-order.html",
@@ -362151,15 +362185,15 @@
{}
]
],
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html": [
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html": [
[
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html",
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html",
{}
]
],
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html": [
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html": [
[
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html",
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html",
{}
]
],
@@ -362229,17 +362263,17 @@
{}
]
],
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html": [
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html": [
[
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html",
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html",
{
"timeout": "long"
}
]
],
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html": [
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html": [
[
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html",
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html",
{}
]
],
@@ -364265,6 +364299,12 @@
{}
]
],
+ "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html": [
+ [
+ "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html",
+ {}
+ ]
+ ],
"html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html": [
[
"html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html",
@@ -369138,6 +369178,12 @@
{}
]
],
+ "html/webappapis/scripting/events/event-handler-handleEvent-ignored.html": [
+ [
+ "html/webappapis/scripting/events/event-handler-handleEvent-ignored.html",
+ {}
+ ]
+ ],
"html/webappapis/scripting/events/event-handler-javascript.html": [
[
"html/webappapis/scripting/events/event-handler-javascript.html",
@@ -371544,6 +371590,24 @@
{}
]
],
+ "layout-instability/clip-negative-bottom-margin.html": [
+ [
+ "layout-instability/clip-negative-bottom-margin.html",
+ {}
+ ]
+ ],
+ "layout-instability/composited-element-movement.html": [
+ [
+ "layout-instability/composited-element-movement.html",
+ {}
+ ]
+ ],
+ "layout-instability/fully-clipped-visual-rect.html": [
+ [
+ "layout-instability/fully-clipped-visual-rect.html",
+ {}
+ ]
+ ],
"layout-instability/idlharness.window.js": [
[
"layout-instability/idlharness.window.html",
@@ -371561,6 +371625,24 @@
}
]
],
+ "layout-instability/ignore-fixed-and-sticky.html": [
+ [
+ "layout-instability/ignore-fixed-and-sticky.html",
+ {}
+ ]
+ ],
+ "layout-instability/local-shift-without-viewport-shift.html": [
+ [
+ "layout-instability/local-shift-without-viewport-shift.html",
+ {}
+ ]
+ ],
+ "layout-instability/multi-clip-visual-rect.html": [
+ [
+ "layout-instability/multi-clip-visual-rect.html",
+ {}
+ ]
+ ],
"layout-instability/observe-layout-shift.html": [
[
"layout-instability/observe-layout-shift.html",
@@ -371569,12 +371651,42 @@
}
]
],
+ "layout-instability/partially-clipped-visual-rect.html": [
+ [
+ "layout-instability/partially-clipped-visual-rect.html",
+ {}
+ ]
+ ],
"layout-instability/rtl-distance.html": [
[
"layout-instability/rtl-distance.html",
{}
]
],
+ "layout-instability/shift-into-viewport.html": [
+ [
+ "layout-instability/shift-into-viewport.html",
+ {}
+ ]
+ ],
+ "layout-instability/shift-outside-viewport.html": [
+ [
+ "layout-instability/shift-outside-viewport.html",
+ {}
+ ]
+ ],
+ "layout-instability/shift-while-scrolled.html": [
+ [
+ "layout-instability/shift-while-scrolled.html",
+ {}
+ ]
+ ],
+ "layout-instability/shift-with-counterscroll.html": [
+ [
+ "layout-instability/shift-with-counterscroll.html",
+ {}
+ ]
+ ],
"layout-instability/simple-block-movement.html": [
[
"layout-instability/simple-block-movement.html",
@@ -389090,6 +389202,12 @@
}
]
],
+ "portals/about-blank-cannot-host.html": [
+ [
+ "portals/about-blank-cannot-host.html",
+ {}
+ ]
+ ],
"portals/csp/frame-src.sub.html": [
[
"portals/csp/frame-src.sub.html",
@@ -459929,7 +460047,7 @@
"support"
],
".github/workflows/epochs.yml": [
- "78aaf16d18a43c4baaf4512d067acc3b16c75e27",
+ "a93a1e8defb4fdeeb9f7740db1cc5c520aa07e5e",
"support"
],
".github/workflows/manifest.yml": [
@@ -492345,7 +492463,7 @@
"testharness"
],
"cookies/http-state/path-tests.html": [
- "b30d8362252c59b318b00669c0c542c78b429594",
+ "0a4794a4c0e5b108e46e90d2f05049fcd206a6eb",
"testharness"
],
"cookies/http-state/resources/all-tests.html.py-str": [
@@ -579205,7 +579323,7 @@
"testharness"
],
"css/css-grid/parsing/grid-shorthand-valid.html": [
- "435959af25e0f03b8f53844f907430daa3d36d97",
+ "80ee50a6e273f1f4ae1a86e6a95fcc5a984d4f10",
"testharness"
],
"css/css-grid/parsing/grid-shorthand.html": [
@@ -579269,7 +579387,7 @@
"testharness"
],
"css/css-grid/parsing/grid-template-shorthand-valid.html": [
- "042268f334816172b077edf341b1c091196f5197",
+ "8790627f4a6d13444d9232af6bca5af172149c54",
"testharness"
],
"css/css-grid/parsing/grid-template-shorthand.html": [
@@ -581620,6 +581738,10 @@
"e00170ed331bcbca450a4de5ef41c415cc88d2b9",
"testharness"
],
+ "css/css-masking/animations/mask-position-interpolation.html": [
+ "d832048ca37b2693218d1c2891d9cb3fa8ba8609",
+ "testharness"
+ ],
"css/css-masking/clip-path-svg-content/clip-path-clip-nested-twice.svg": [
"269e8feed2d3c21774a7c94729c3551899ce4d92",
"reftest"
@@ -619173,11 +619295,19 @@
"testharness"
],
"css/cssom-view/MediaQueryList-addListener-removeListener.html": [
- "5446e48e6cfcf20d5005ecfa4f75523f61ab83e2",
+ "1144e3a78322ceb7b49056c0530835bb2301fc30",
+ "testharness"
+ ],
+ "css/cssom-view/MediaQueryList-extends-EventTarget-interop.html": [
+ "7dae2afbd723883ef2230ac47f68987ff6f03d08",
+ "testharness"
+ ],
+ "css/cssom-view/MediaQueryList-extends-EventTarget.html": [
+ "34b6ef15c052ef8140973bd4d1e52b8c91b10832",
"testharness"
],
"css/cssom-view/MediaQueryListEvent.html": [
- "24cce3cc0973cf7478c92ce05137926ea0b78f77",
+ "0afa09f087a2de0d2d8fcf6c095688cb750f8d80",
"testharness"
],
"css/cssom-view/Screen-pixelDepth-Screen-colorDepth001.html": [
@@ -619397,7 +619527,7 @@
"testharness"
],
"css/cssom-view/matchMedia.html": [
- "14df3d02425ddf32caa904cfcfe3d8e2fae0c803",
+ "0a94c9850c8fcc72eb01d0df929e914b71cf8a2c",
"testharness"
],
"css/cssom-view/mouseEvent.html": [
@@ -619477,7 +619607,7 @@
"support"
],
"css/cssom-view/resources/matchMedia.js": [
- "8013699b7dee114da3313ccfba61d57e7e860e5b",
+ "8623a6597a0d88c683eaaf2cd7d7515bb0f2cd7c",
"support"
],
"css/cssom-view/screenLeftTop.html": [
@@ -620185,7 +620315,7 @@
"testharness"
],
"css/cssom/idlharness.html": [
- "3204fb8c7e750d5b121c34ba068e070e7cbddc5a",
+ "ce13d30cfad18ca0d48298694ec2477a7d6d68b5",
"testharness"
],
"css/cssom/inline-style-001.html": [
@@ -634784,6 +634914,10 @@
"361006a7240496e9be747faca5056fe2a62a2cff",
"testharness"
],
+ "dom/events/Event-dispatch-order-at-target.html": [
+ "79673c32564cbe785858266d4737de6bd5f7bade",
+ "testharness"
+ ],
"dom/events/Event-dispatch-order.html": [
"ca94434595c6ee19fb0f6982f56da0d005b4586c",
"testharness"
@@ -640061,7 +640195,7 @@
"testharness"
],
"feature-policy/feature-policy-for-sandbox/resources/helper.js": [
- "9de8416535613fc1d46396953750cc9ab6a7990b",
+ "eec189871ff82d18c6e8a3cc86ccf9c08597ca42",
"support"
],
"feature-policy/feature-policy-for-sandbox/resources/opened_window.html": [
@@ -641977,7 +642111,7 @@
"testharness"
],
"fetch/metadata/portal.tentative.https.sub.html": [
- "b9128944733b0301606a57087cb40c143d3cb99a",
+ "4e50b6b24b356dac6c6c7f5b7d17b7f4f01431c1",
"testharness"
],
"fetch/metadata/prefetch.tentative.https.sub.html": [
@@ -656752,11 +656886,11 @@
"042851bbb492365e9d176aff8d678feb645f1d18",
"testharness"
],
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html": [
- "32409f220f0a273f165741e2d79ca60846d61648",
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html": [
+ "1e93cb5997df5c85a6b67d3b486ae441adfb33fd",
"testharness"
],
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html": [
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html": [
"abd4d7c5e0d76d04cd678b00a153d5a8f10bddf7",
"testharness"
],
@@ -656804,11 +656938,11 @@
"12c4e0ca50236caacae89c76da3b81effd7b44be",
"testharness"
],
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html": [
- "6af49b8d78ddf2acbad9e8fb875e8250c825cd33",
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html": [
+ "50e28f650c74ca734f63f970e61dfea77e7ab0bd",
"testharness"
],
- "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html": [
+ "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html": [
"9b9246c393ec9b4ee3b9762d6d06ea65ff0ff5d1",
"testharness"
],
@@ -657789,7 +657923,7 @@
"support"
],
"html/semantics/forms/form-submission-0/resources/form-submission.py": [
- "467875453c9dc64aac51add3f4a617d941820972",
+ "b296ac44c57c658ca9e3189e9f79b0f80677acba",
"support"
],
"html/semantics/forms/form-submission-0/resources/targetted-form.js": [
@@ -657801,7 +657935,7 @@
"testharness"
],
"html/semantics/forms/form-submission-0/submit-entity-body.html": [
- "f6f3858d4ff025cfbb2ba6b0745df51c6d39436b",
+ "be9c5f0696eda41b652c9653fee1a70a2304e8f5",
"testharness"
],
"html/semantics/forms/form-submission-0/submit-file.sub.html": [
@@ -659136,6 +659270,10 @@
"4a3693bd2dafe710b82054bfadd8bcaa97b16db5",
"testharness"
],
+ "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html": [
+ "ab200020b4f05321d4ee7c17c4a8f11c6f5931db",
+ "testharness"
+ ],
"html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html": [
"57cc45478e03ce1cdbb755281b2f434b38582563",
"testharness"
@@ -663312,12 +663450,16 @@
"9b81d42ff729399d57e182abc8b8950cef503e12",
"testharness"
],
+ "html/webappapis/scripting/events/event-handler-handleEvent-ignored.html": [
+ "8039bac7adc137154d92173b29e7283baf6db22c",
+ "testharness"
+ ],
"html/webappapis/scripting/events/event-handler-javascript.html": [
"657a37839d2f3ed78968d1f0739f8594aa391cda",
"testharness"
],
"html/webappapis/scripting/events/event-handler-onresize.html": [
- "8686716e19ac86748a1e9988767f073e2cd3348b",
+ "0e44e7272f02513c6de0c5aecc96f09005ad7396",
"testharness"
],
"html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html": [
@@ -665117,7 +665259,7 @@
"support"
],
"interfaces/WebCryptoAPI.idl": [
- "0b515fc12e701b4b20c616e2ae4ce29f50a205b6",
+ "fecb3b72d3afea791a0f0648bcefa6dc014fe330",
"support"
],
"interfaces/WebIDL.idl": [
@@ -665589,7 +665731,7 @@
"support"
],
"interfaces/web-nfc.idl": [
- "340dab647d6c5156ada9af62b77f419063aeefa7",
+ "455720c641e69af2e68b9c9a0eb2cbd740267e26",
"support"
],
"interfaces/web-share.idl": [
@@ -666272,14 +666414,42 @@
"dabc8068931ff3b15eb4b80481ed2102a7725a62",
"testharness"
],
+ "layout-instability/clip-negative-bottom-margin.html": [
+ "2c329d9fcd66d86bf8c350c2ee419e28ef6596f4",
+ "testharness"
+ ],
+ "layout-instability/composited-element-movement.html": [
+ "c9906903358d8c2b94877f536e733320d0ada75b",
+ "testharness"
+ ],
+ "layout-instability/fully-clipped-visual-rect.html": [
+ "bfd74a2407e2d91cdb2a13b86945b040aeb6dcca",
+ "testharness"
+ ],
"layout-instability/idlharness.window.js": [
"7d97446a57808576722a823f604effa94bb95e76",
"testharness"
],
+ "layout-instability/ignore-fixed-and-sticky.html": [
+ "1b39dc9e6e9320a7932986d3a0063b7a4e556129",
+ "testharness"
+ ],
+ "layout-instability/local-shift-without-viewport-shift.html": [
+ "37729f1c13c298b5a2d95c46b7a4f199d8943022",
+ "testharness"
+ ],
+ "layout-instability/multi-clip-visual-rect.html": [
+ "36475d4c826c11807e9c0a7fbf4457c33c92c2c0",
+ "testharness"
+ ],
"layout-instability/observe-layout-shift.html": [
"1c35fe2aa234c96fce8798e6a1c35362f418e6f1",
"testharness"
],
+ "layout-instability/partially-clipped-visual-rect.html": [
+ "3b18b98dd93312c37b9e2f25918df50266a09243",
+ "testharness"
+ ],
"layout-instability/resources/slow-image.py": [
"ee7988c551f6429eea2b929af083ad30cbd5c73d",
"support"
@@ -666292,6 +666462,22 @@
"a6f0040e950649015119ecacc465e75303b5ff9b",
"testharness"
],
+ "layout-instability/shift-into-viewport.html": [
+ "6ace93ad54c2f6b173df060e39be097eca4b6867",
+ "testharness"
+ ],
+ "layout-instability/shift-outside-viewport.html": [
+ "49242913760a76d124eac0eeb3de8bb4e8eb8a19",
+ "testharness"
+ ],
+ "layout-instability/shift-while-scrolled.html": [
+ "88eeedea87782939d0191c64f7771e7e4f8828c3",
+ "testharness"
+ ],
+ "layout-instability/shift-with-counterscroll.html": [
+ "8ad1a463443ef1b6b8b8ca06a9435157cb38a1f5",
+ "testharness"
+ ],
"layout-instability/simple-block-movement.html": [
"0f9257e27ce5d553d8176f084e537e47b331416e",
"testharness"
@@ -666612,14 +666798,6 @@
"d94a036be00f404bd4d51350a85f70c180e9c776",
"reftest"
],
- "mathml/presentation-markup/direction/direction-009-ref.html": [
- "8b80b7e6bead29d97540896d5ac1ae14b46881f1",
- "support"
- ],
- "mathml/presentation-markup/direction/direction-009.html": [
- "c0ca31d40a82e5af2e23a4c5dee83f9e2bb593cb",
- "reftest"
- ],
"mathml/presentation-markup/direction/direction-010-ref.html": [
"4f595ed49f698a7a70392edb5e72dd1df8471368",
"support"
@@ -667128,6 +667306,14 @@
"f9354266a7c6c42a75519e9771eb2c61536ad8e5",
"testharness"
],
+ "mathml/presentation-markup/tokens/ms-001-ref.html": [
+ "bbd42a93eedbbabb7aff8fa1aa60f5c954e48210",
+ "support"
+ ],
+ "mathml/presentation-markup/tokens/ms-001.html": [
+ "b0b03f225525ffacf1d8f73da03a3848b39e96f8",
+ "reftest"
+ ],
"mathml/relations/css-styling/attribute-mapping-001.html": [
"3424e8c1a8cbb775a91839db6b3951dfe869af95",
"testharness"
@@ -680224,6 +680410,10 @@
"29134d490f7bdfb09255e190fe91576629057c78",
"support"
],
+ "portals/about-blank-cannot-host.html": [
+ "207d477697d823d6611b4d8dc6681b3e2fc90a73",
+ "testharness"
+ ],
"portals/csp/frame-src.sub.html": [
"34f1474d4b37f6a867b858a0bfc88e03db48153a",
"testharness"
@@ -680269,7 +680459,7 @@
"testharness"
],
"portals/portal-activate-data.html": [
- "38204edb2c3c2ac17aec54cedd3b6f9f6d42c698",
+ "b3b9223b5199df329e770f224161632c6ee5604a",
"testharness"
],
"portals/portal-activate-event-constructor.html": [
@@ -680301,7 +680491,7 @@
"testharness"
],
"portals/portals-activate-resolution.html": [
- "44ccea3bc521e14f7c826f14c3e815494df65ae7",
+ "db77a990e532a3d1b88f57300094cbd60215d69d",
"testharness"
],
"portals/portals-activate-twice.html": [
@@ -680337,7 +680527,7 @@
"testharness"
],
"portals/portals-navigate-after-adoption.html": [
- "083eeaa14821b5916fc452a8a09bfa6ed308c191",
+ "5ad30d7928a6c4eda0cbcb5afad9c29234b9a057",
"testharness"
],
"portals/portals-nested.html": [
@@ -680377,17 +680567,25 @@
"testharness"
],
"portals/portals-set-src-after-activate.html": [
- "8da6b341840162dc7348b95cfed060c075a75135",
+ "70a16436a67f254372be5f861d83d9e9b66f895f",
"testharness"
],
"portals/references/portals-rendering.html": [
"4a8414ab5656593811772c3728e4ee83eb034457",
"support"
],
+ "portals/resources/blank-host.html": [
+ "d9f3a61eb8488ba78df7439ff612fa600ff53008",
+ "support"
+ ],
"portals/resources/eval-portal.html": [
"98c2013915eae38bea2b8722bb8f80378ae894a0",
"support"
],
+ "portals/resources/open-blank-host.js": [
+ "f7580bd15212234c36b55a368efa0c729bd64e5b",
+ "support"
+ ],
"portals/resources/portal-activate-data-portal.html": [
"f57e4b196be471783316a6749a58ebd4a5b962a7",
"support"
@@ -694233,7 +694431,7 @@
"support"
],
"resources/chromium/sms_mock.js": [
- "bdfbc2052fa102a0e502937a610a9c64d79d1bbe",
+ "d8476cf37ad0edde630634e6821fdc68b7e69114",
"support"
],
"resources/chromium/string16.mojom.js": [
@@ -699553,7 +699751,7 @@
"testharness"
],
"sms/interceptor.https.html": [
- "6da2d71c52a90f7d0906ea99397976cb6e1573e3",
+ "94f1951a1380290a7c30fdbf85cd512d9064b8e3",
"testharness"
],
"sms/resources/helper.js": [
@@ -699569,7 +699767,7 @@
"testharness"
],
"sms/sms_receiver.idl": [
- "64048523f901f8509e85e4dc1ddc1f7c59ab3489",
+ "ca8cfdd798c8e7d85c8251ea08acb063fc25ae77",
"support"
],
"speech-api/META.yml": [
@@ -710417,7 +710615,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/servodriver.py": [
- "ea345efa44fd4ec57cde5abc90c92d998c4a6c73",
+ "2953de18174ef75d505db0b8d518fe3339f7065e",
"support"
],
"tools/wptrunner/wptrunner/browsers/webkit.py": [
diff --git a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
index 03f2f3fe9d1..1193e3dfa5c 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
@@ -1,5 +1,5 @@
[perspective-interpolation.html]
- expected: CRASH
+ expected: ERROR
[ perspective interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini
new file mode 100644
index 00000000000..4b646ae6a9b
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini
@@ -0,0 +1,4 @@
+[MediaQueryList-extends-EventTarget-interop.html]
+ [listeners are called in order they were added, ignoring capture parameter]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/dom/events/Event-dispatch-order-at-target.html.ini b/tests/wpt/metadata/dom/events/Event-dispatch-order-at-target.html.ini
new file mode 100644
index 00000000000..38fe82e7126
--- /dev/null
+++ b/tests/wpt/metadata/dom/events/Event-dispatch-order-at-target.html.ini
@@ -0,0 +1,4 @@
+[Event-dispatch-order-at-target.html]
+ [Listeners are invoked in correct order (AT_TARGET phase)]
+ 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 81b7704b14e..7c6560d5882 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -309,15 +309,9 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*]
- expected: FAIL
-
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;" text/plain]
- expected: FAIL
-
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
@@ -327,3 +321,18 @@
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
+ [<iframe>: combined response Content-Type: text/html */*]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ expected: FAIL
+
+ [<iframe>: combined response Content-Type: text/html;x=" 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 8d0261f22a0..5c001592859 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,6 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript; charset=windows-1252 text/javascript]
+ [separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini
new file mode 100644
index 00000000000..51f8272a6de
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_3.html]
+ [Multiple history traversals, last would be aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
new file mode 100644
index 00000000000..385376c7321
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_4.html]
+ [Multiple history traversals, last would be aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
new file mode 100644
index 00000000000..16fa2c5cfc1
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
@@ -0,0 +1,4 @@
+[creating_browsing_context_test_01.html]
+ [first argument: absolute url]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini
index bf50d59df41..e02f179ec25 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini
@@ -1,5 +1,24 @@
[open-features-negative-innerwidth-innerheight.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
expected: FAIL
+ [features "innerheight=-404.5" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "innerwidth=-404.5" should NOT set "width=404"]
+ expected: TIMEOUT
+
+ [features "innerwidth=-404" should NOT set "width=404"]
+ expected: TIMEOUT
+
+ [features "innerheight=-404e1" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "innerheight=-404" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "innerwidth=-404e1" should NOT set "width=404"]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini
index e150c9d848f..23eefb8eaf9 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini
@@ -1,5 +1,24 @@
[open-features-negative-screenx-screeny.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
expected: FAIL
+ [features "screenx=-204" should NOT set "left=204"]
+ expected: TIMEOUT
+
+ [features "screeny=-204" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "screeny=-204.5" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "screeny=-0" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "screenx=-0" should NOT set "left=204"]
+ expected: TIMEOUT
+
+ [features "screenx=-204.5" should NOT set "left=204"]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
index ad8840fbb68..940516ddd33 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
@@ -1,5 +1,24 @@
[open-features-negative-top-left.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: negative values for `top`, `left`]
expected: FAIL
+ [features "top=-204" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "top=-204.5" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "left=-204" should NOT set "left=204"]
+ expected: TIMEOUT
+
+ [features "top=-0" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "left=-204.5" should NOT set "left=204"]
+ expected: TIMEOUT
+
+ [features "left=-0" should NOT set "left=204"]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini
index d1ed9088b2b..9027336b453 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini
@@ -1,5 +1,24 @@
[open-features-negative-width-height.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: negative values for `width`, `height`]
expected: FAIL
+ [features "height=-404" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "height=-404e1" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "height=-404.5" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "width=-404" should NOT set "width=404"]
+ expected: TIMEOUT
+
+ [features "width=-404e1" should NOT set "width=404"]
+ expected: TIMEOUT
+
+ [features "width=-404.5" should NOT set "width=404"]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini
index a70e9dbad4d..4e44584b123 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini
@@ -1,32 +1,48 @@
[open-features-non-integer-height.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `height`]
expected: FAIL
[features "height=405*3" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "height=405.32" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "height=405e1" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "height=405/5" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "height=405^4" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "height=405.5" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "height=405e-1" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "height=405 " should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "height=405LLl" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
+
+ [features "height=/404" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
+ expected: TIMEOUT
+
+ [top=0,left=0: absence of feature "height" should be treated same as "height=0"]
+ expected: TIMEOUT
+
+ [features "height=_404" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "height=L404" should NOT set "height=404"]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini
index 779531b4a98..fcaeae5336d 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini
@@ -1,32 +1,42 @@
[open-features-non-integer-innerheight.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
expected: FAIL
[features "innerheight=405e-1" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerheight=405LLl" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerheight=405^4" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerheight=405e1" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerheight=405 " should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerheight=405/5" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerheight=405.32" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerheight=405.5" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerheight=405*3" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
+
+ [features "innerheight=_404" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "innerheight=L404" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "innerheight=/404" should NOT set "height=404"]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini
index 7a1b258d52e..42327fedd27 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini
@@ -1,32 +1,42 @@
[open-features-non-integer-innerwidth.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
expected: FAIL
[features "innerwidth=405e-1" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerwidth=405*3" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerwidth=405.5" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerwidth=405e1" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerwidth=405.32" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerwidth=405 " should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerwidth=405LLl" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerwidth=405/5" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "innerwidth=405^4" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
+
+ [features "innerwidth=/404" should NOT set "width=404"]
+ expected: TIMEOUT
+
+ [features "innerwidth=_404" should NOT set "width=404"]
+ expected: TIMEOUT
+
+ [features "innerwidth=L404" should NOT set "width=404"]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini
index caba4124f0b..a8e4fe06618 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini
@@ -1,32 +1,42 @@
[open-features-non-integer-left.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `left`]
expected: FAIL
[features "left=105e1" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "left=105 " should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "left=105/5" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "left=105e-1" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "left=105^4" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "left=105LLl" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "left=105.32" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "left=105*3" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "left=105.5" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
+
+ [features "left=L104" should NOT set "left=104"]
+ expected: TIMEOUT
+
+ [features "left=/104" should NOT set "left=104"]
+ expected: TIMEOUT
+
+ [features "left=_104" should NOT set "left=104"]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini
index 9ace8a4cbdb..64a08faf0e6 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini
@@ -1,32 +1,42 @@
[open-features-non-integer-screenx.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
expected: FAIL
[features "screenx=105.5" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "screenx=105e1" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "screenx=105 " should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "screenx=105*3" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "screenx=105e-1" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "screenx=105^4" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "screenx=105LLl" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "screenx=105/5" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "screenx=105.32" should set "left=105"]
- expected: FAIL
+ expected: TIMEOUT
+
+ [features "screenx=_104" should NOT set "left=104"]
+ expected: TIMEOUT
+
+ [features "screenx=L104" should NOT set "left=104"]
+ expected: TIMEOUT
+
+ [features "screenx=/104" should NOT set "left=104"]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini
index a82bd0f981a..4f22ef4ef29 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini
@@ -1,32 +1,42 @@
[open-features-non-integer-screeny.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
expected: FAIL
[features "screeny=405^4" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "screeny=405e-1" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "screeny=405LLl" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "screeny=405e1" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "screeny=405 " should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "screeny=405/5" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "screeny=405*3" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "screeny=405.32" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "screeny=405.5" should set "height=405"]
- expected: FAIL
+ expected: TIMEOUT
+
+ [features "screeny=_404" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "screeny=L404" should NOT set "height=404"]
+ expected: TIMEOUT
+
+ [features "screeny=/404" should NOT set "height=404"]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini
index 10f617db69e..8540f53d8d6 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini
@@ -1,32 +1,42 @@
[open-features-non-integer-top.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `top`]
expected: FAIL
[features "top=105/5" should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "top=105*3" should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "top=105LLl" should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "top=105e-1" should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "top=105.32" should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "top=105e1" should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "top=105 " should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "top=105^4" should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
[features "top=105.5" should set "top=105"]
- expected: FAIL
+ expected: TIMEOUT
+
+ [features "top=/104" should NOT set "top=104"]
+ expected: TIMEOUT
+
+ [features "top=_104" should NOT set "top=104"]
+ expected: TIMEOUT
+
+ [features "top=L104" should NOT set "top=104"]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini
index 28f93ee71b5..9d841e61bc0 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini
@@ -1,32 +1,48 @@
[open-features-non-integer-width.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `width`]
expected: FAIL
[features "width=405^4" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "width=405.5" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "width=405e1" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "width=405 " should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "width=405.32" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "width=405LLl" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "width=405*3" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "width=405e-1" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
[features "width=405/5" should set "width=405"]
- expected: FAIL
+ expected: TIMEOUT
+
+ [top=0,left=0: absence of feature "width" should be treated same as "width=0"]
+ expected: TIMEOUT
+
+ [features "width=_404" should NOT set "width=404"]
+ expected: TIMEOUT
+
+ [top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
+ expected: TIMEOUT
+
+ [features "width=/404" should NOT set "width=404"]
+ expected: TIMEOUT
+
+ [features "width=L404" should NOT set "width=404"]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
index 442db3cb549..2532dceabac 100644
--- a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
+++ b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
@@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
+ expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL
diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
index 6b68e9094e4..d1ca01ebc5f 100644
--- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
+++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
@@ -1,4 +1,5 @@
[supported-elements.html]
+ expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
@@ -9,7 +10,7 @@
expected: FAIL
[Area element should support autofocus]
- expected: FAIL
+ expected: TIMEOUT
[Host element with delegatesFocus should support autofocus]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html.ini
new file mode 100644
index 00000000000..30a7275385a
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html.ini
@@ -0,0 +1,5 @@
+[iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html]
+ expected: TIMEOUT
+ [<a download> triggered download in sandbox is allowed by allow-downloads.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html.ini
deleted file mode 100644
index 7d9c4f6072b..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html]
- expected: TIMEOUT
- [<a download> triggered download in sandbox is allowed by allow-downloads-without-user-activation.]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html.ini
new file mode 100644
index 00000000000..c98551372ad
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html.ini
@@ -0,0 +1,5 @@
+[iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html]
+ expected: TIMEOUT
+ [Navigation resulted download in sandbox is allowed by allow-downloads.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html.ini
deleted file mode 100644
index 609b809273a..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html]
- expected: TIMEOUT
- [Navigation resulted download in sandbox is allowed by allow-downloads-without-user-activation.]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
index fc37df7e3fa..f42f518d257 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
@@ -1,6 +1,5 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
- expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 9df1ac56f2a..3f7e3e9544f 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
deleted file mode 100644
index 8cc42056d34..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-[non-active-document.html]
- [DOMParser]
- expected: FAIL
-
- [createHTMLDocument]
- expected: FAIL
-
- [<template>]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
index 941d0dee0c8..df89cd21511 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
@@ -1,5 +1,5 @@
[form-double-submit-3.html]
expected: ERROR
[<button> should have the same double-submit protection as <input type=submit>]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini
index 47a7bbb7975..dce74c6dd71 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini
@@ -1,5 +1,5 @@
[form-double-submit.html]
expected: ERROR
[default submit action should supersede onclick submit()]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
deleted file mode 100644
index 9e522297c94..00000000000
--- a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[toggleEvent.html]
- [Calling open twice on 'details' fires only one toggle event]
- expected: FAIL
-
- [Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini
new file mode 100644
index 00000000000..bab4ff15d5b
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini
@@ -0,0 +1,8 @@
+[anchor-with-inline-element.html]
+ expected: TIMEOUT
+ [Clicking on anchor with embedded inline element should navigate instead of opening details]
+ expected: NOTRUN
+
+ [Expected <a> containing <i> to navigate]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index 66bd350083b..a56bad443a2 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html]
+ expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
deleted file mode 100644
index 663a1f8fa30..00000000000
--- a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[018.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, javascript:]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/webmessaging/without-ports/018.html.ini b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini
deleted file mode 100644
index 663a1f8fa30..00000000000
--- a/tests/wpt/metadata/webmessaging/without-ports/018.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[018.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, javascript:]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
new file mode 100644
index 00000000000..80f9a4f15b8
--- /dev/null
+++ b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
@@ -0,0 +1,2 @@
+[Worker-constructor.html]
+ expected: ERROR
diff --git a/tests/wpt/web-platform-tests/.github/workflows/epochs.yml b/tests/wpt/web-platform-tests/.github/workflows/epochs.yml
index 78aaf16d18a..a93a1e8defb 100644
--- a/tests/wpt/web-platform-tests/.github/workflows/epochs.yml
+++ b/tests/wpt/web-platform-tests/.github/workflows/epochs.yml
@@ -7,7 +7,7 @@ on:
jobs:
update:
# Do not run this job on forks.
- if: github.repository == "web-platform-tests/wpt"
+ if: github.repository == 'web-platform-tests/wpt'
runs-on: ubuntu-18.04
steps:
- name: Checkout
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html
index b30d8362252..0a4794a4c0e 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html
+++ b/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html
@@ -4,6 +4,7 @@
<meta charset=utf-8>
<title>Tests basic cookie setting functionality</title>
<meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+ <meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-shorthand-valid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-shorthand-valid.html
index 435959af25e..80ee50a6e27 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-shorthand-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-shorthand-valid.html
@@ -14,6 +14,8 @@
<script>
// <'grid-template'> values
+test_valid_value("grid", 'none');
+test_valid_value("grid", 'none / none', 'none');
test_valid_value("grid", 'auto / auto');
test_valid_value("grid", 'none / [a] 0px');
test_valid_value("grid", 'none / [] 0px', 'none / 0px');
@@ -25,6 +27,30 @@ test_valid_value("grid", '[a] "a" 10px []', '[a] "a" 10px');
test_valid_value("grid", '"a" 10px');
test_valid_value("grid", '[] "a" 10px', '"a" 10px');
test_valid_value("grid", '[a] "a" 10px [a]');
+test_valid_value("grid", '"a"');
+test_valid_value("grid", '"a" auto', '"a"');
+test_valid_value("grid", '"a" / 10px');
+test_valid_value("grid", '"a" / 20%');
+test_valid_value("grid", '"a" / 5fr');
+test_valid_value("grid", '[a] "a"');
+test_valid_value("grid", '[a] "a" [a]');
+test_valid_value("grid", '[] "a"', '"a"');
+test_valid_value("grid", '"a" [] [] "b"', '"a" "b"');
+test_valid_value("grid", '"a" [] "b"', '"a" "b"');
+test_valid_value("grid", '"a" [a] [b] "b"', '"a" [a b] "b"');
+test_valid_value("grid", '"a" [a] "b"');
+test_valid_value("grid", '"a" / 0', '"a" / 0px');
+test_valid_value("grid", '"a" 10px / 10px');
+test_valid_value("grid", '"a" [a] "b" 10px');
+test_valid_value("grid", '"a" [a] "b" 10px [a]');
+test_valid_value("grid", '"a" [a] [a] "b" 10px', '"a" [a a] "b" 10px');
+test_valid_value("grid", '"a" [a] [] "b" 10px', '"a" [a] "b" 10px');
+test_valid_value("grid", '"a" 10px [a] "b" [a]');
+test_valid_value("grid", '"a" [a] "b" [a]');
+test_valid_value("grid", '[a] "a" [a] "b" [a]');
+test_valid_value("grid", '"a" "a" [a] "b" [a]');
+test_valid_value("grid", '"a" [a] "b" [a] / 0', '"a" [a] "b" [a] / 0px');
+test_valid_value("grid", '"a" "a" [a] [a] "b" / auto', '"a" "a" [a a] "b" / auto');
// FIXME: add more values to test full syntax
diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-shorthand-valid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-shorthand-valid.html
index 042268f3348..8790627f4a6 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-shorthand-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-shorthand-valid.html
@@ -13,6 +13,8 @@
<body>
<script>
+test_valid_value("grid-template", 'none');
+test_valid_value("grid-template", 'none / none', 'none');
test_valid_value("grid-template", 'auto / auto');
test_valid_value("grid-template", 'none / [a] 0px');
test_valid_value("grid-template", 'none / [] 0px', 'none / 0px');
@@ -24,6 +26,30 @@ test_valid_value("grid-template", '[a] "a" 10px []', '[a] "a" 10px');
test_valid_value("grid-template", '"a" 10px');
test_valid_value("grid-template", '[] "a" 10px', '"a" 10px');
test_valid_value("grid-template", '[a] "a" 10px [a]');
+test_valid_value("grid-template", '"a"');
+test_valid_value("grid-template", '"a" auto', '"a"');
+test_valid_value("grid-template", '"a" / 10px');
+test_valid_value("grid-template", '"a" / 20%');
+test_valid_value("grid-template", '"a" / 5fr');
+test_valid_value("grid-template", '[a] "a"');
+test_valid_value("grid-template", '[a] "a" [a]');
+test_valid_value("grid-template", '[] "a"', '"a"');
+test_valid_value("grid-template", '"a" [] [] "b"', '"a" "b"');
+test_valid_value("grid-template", '"a" [] "b"', '"a" "b"');
+test_valid_value("grid-template", '"a" [a] [b] "b"', '"a" [a b] "b"');
+test_valid_value("grid-template", '"a" [a] "b"');
+test_valid_value("grid-template", '"a" / 0', '"a" / 0px');
+test_valid_value("grid-template", '"a" 10px / 10px');
+test_valid_value("grid-template", '"a" [a] "b" 10px');
+test_valid_value("grid-template", '"a" [a] "b" 10px [a]');
+test_valid_value("grid-template", '"a" [a] [a] "b" 10px', '"a" [a a] "b" 10px');
+test_valid_value("grid-template", '"a" [a] [] "b" 10px', '"a" [a] "b" 10px');
+test_valid_value("grid-template", '"a" 10px [a] "b" [a]');
+test_valid_value("grid-template", '"a" [a] "b" [a]');
+test_valid_value("grid-template", '[a] "a" [a] "b" [a]');
+test_valid_value("grid-template", '"a" "a" [a] "b" [a]');
+test_valid_value("grid-template", '"a" [a] "b" [a] / 0', '"a" [a] "b" [a] / 0px');
+test_valid_value("grid-template", '"a" "a" [a] [a] "b" / auto', '"a" "a" [a a] "b" / auto');
// FIXME: add more values to test full syntax
diff --git a/tests/wpt/web-platform-tests/css/css-masking/animations/mask-position-interpolation.html b/tests/wpt/web-platform-tests/css/css-masking/animations/mask-position-interpolation.html
new file mode 100644
index 00000000000..d832048ca37
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-masking/animations/mask-position-interpolation.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<meta charset="UTF-8">
+<title>mask-position-interpolation</title>
+<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-mask-position">
+<meta name="assert" content="mask-position supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.container {
+ display: inline-block;
+ border: 2px solid black;
+}
+.parent {
+ mask-position: 30px 10px;
+}
+.target {
+ width: 120px;
+ height: 120px;
+ mask-position: 10px 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <div class="container">
+ <div class="target"></div>
+ </div>
+</template>
+<script>
+// neutral
+test_interpolation({
+ property: 'mask-position',
+ from: neutralKeyframe,
+ to: '20px 20px',
+}, [
+ {at: -0.25, expect: '7.5px 32.5px'},
+ {at: 0, expect: '10px 30px'},
+ {at: 0.25, expect: '12.5px 27.5px'},
+ {at: 0.5, expect: '15px 25px'},
+ {at: 0.75, expect: '17.5px 22.5px'},
+ {at: 1, expect: '20px 20px'},
+ {at: 1.25, expect: '22.5px 17.5px'},
+]);
+
+// initial
+test_interpolation({
+ property: 'mask-position',
+ from: 'initial',
+ to: '20px 20px',
+}, [
+ {at: -0.25, expect: 'calc(0% - 5px) calc(0% - 5px)'},
+ {at: 0, expect: '0% 0%'},
+ {at: 0.25, expect: 'calc(0% + 5px) calc(0% + 5px)'},
+ {at: 0.5, expect: 'calc(0% + 10px) calc(0% + 10px)'},
+ {at: 0.75, expect: 'calc(0% + 15px) calc(0% + 15px)'},
+ {at: 1, expect: 'calc(0% + 20px) calc(0% + 20px)'},
+ {at: 1.25, expect:'calc(0% + 25px) calc(0% + 25px)'},
+]);
+
+// inherit
+test_interpolation({
+ property: 'mask-position',
+ from: 'inherit',
+ to: '20px 20px',
+}, [
+ {at: -0.25, expect: '32.5px 7.5px'},
+ {at: 0, expect: '30px 10px'},
+ {at: 0.25, expect: '27.5px 12.5px'},
+ {at: 0.5, expect: '25px 15px'},
+ {at: 0.75, expect: '22.5px 17.5px'},
+ {at: 1, expect: '20px 20px'},
+ {at: 1.25, expect: '17.5px 22.5px'},
+]);
+
+// unset
+test_interpolation({
+ property: 'mask-position',
+ from: 'unset',
+ to: '20px 20px',
+}, [
+ {at: -0.25, expect: 'calc(0% - 5px) calc(0% - 5px)'},
+ {at: 0, expect: '0% 0%'},
+ {at: 0.25, expect: 'calc(0% + 5px) calc(0% + 5px)'},
+ {at: 0.5, expect: 'calc(0% + 10px) calc(0% + 10px)'},
+ {at: 0.75, expect: 'calc(0% + 15px) calc(0% + 15px)'},
+ {at: 1, expect: 'calc(0% + 20px) calc(0% + 20px)'},
+ {at: 1.25, expect:'calc(0% + 25px) calc(0% + 25px)'},
+]);
+
+// Test equal number of position values as background images.
+test_interpolation({
+ property: 'mask-position',
+ from: '0px 0px, 0px 0px, 0px 0px, 0px 0px',
+ to: '80px 80px, 80px 80px, 80px 80px, 80px 80px',
+}, [
+ {at: -0.25, expect: '-20px -20px, -20px -20px, -20px -20px, -20px -20px'},
+ {at: 0, expect: ' 0px 0px, 0px 0px, 0px 0px, 0px 0px'},
+ {at: 0.25, expect: ' 20px 20px, 20px 20px, 20px 20px, 20px 20px'},
+ {at: 0.5, expect: ' 40px 40px, 40px 40px, 40px 40px, 40px 40px'},
+ {at: 0.75, expect: ' 60px 60px, 60px 60px, 60px 60px, 60px 60px'},
+ {at: 1, expect: ' 80px 80px, 80px 80px, 80px 80px, 80px 80px'},
+ {at: 1.25, expect: '100px 100px, 100px 100px, 100px 100px, 100px 100px'},
+]);
+
+// Test single position value repeated over background images.
+test_interpolation({
+ property: 'mask-position',
+ from: 'top 0px left 0px',
+ to: 'left 80px top 80px',
+}, [
+ {at: -0.25, expect: '-20px -20px'},
+ {at: 0, expect: ' 0px 0px'},
+ {at: 0.25, expect: ' 20px 20px'},
+ {at: 0.5, expect: ' 40px 40px'},
+ {at: 0.75, expect: ' 60px 60px'},
+ {at: 1, expect: ' 80px 80px'},
+ {at: 1.25, expect: '100px 100px'},
+]);
+
+// Test mismatched numbers of position values.
+test_interpolation({
+ property: 'mask-position',
+ from: '0px 0px, 80px 0px',
+ to: '40px 40px, 80px 80px, 0px 80px',
+}, [
+ {at: -0.25, expect:
+ '-10px -10px, 80px -20px, 0px -20px, 90px -10px, -20px -20px, 100px -20px'},
+ {at: 0, expect:
+ ' 0px 0px, 80px 0px, 0px 0px, 80px 0px, 0px 0px, 80px 0px'},
+ {at: 0.25, expect:
+ ' 10px 10px, 80px 20px, 0px 20px, 70px 10px, 20px 20px, 60px 20px'},
+ {at: 0.5, expect:
+ ' 20px 20px, 80px 40px, 0px 40px, 60px 20px, 40px 40px, 40px 40px'},
+ {at: 0.75, expect:
+ ' 30px 30px, 80px 60px, 0px 60px, 50px 30px, 60px 60px, 20px 60px'},
+ {at: 1, expect:
+ ' 40px 40px, 80px 80px, 0px 80px, 40px 40px, 80px 80px, 0px 80px'},
+ {at: 1.25, expect:
+ ' 50px 50px, 80px 100px, 0px 100px, 30px 50px, 100px 100px, -20px 100px'},
+]);
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-addListener-removeListener.html b/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-addListener-removeListener.html
index 5446e48e6cf..1144e3a7832 100644
--- a/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-addListener-removeListener.html
+++ b/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-addListener-removeListener.html
@@ -3,7 +3,7 @@
<meta name="flags" content="dom">
<title>CSS Test: CSSOM View MediaQueryList::{add,remove}Listener</title>
<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com">
-<link rel="help" href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface">
+<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/matchMedia.js"></script>
@@ -11,12 +11,6 @@
<script>
"use strict";
-test(function() {
- const mql = window.matchMedia("all");
- assert_inherits(mql, "addListener");
- assert_equals(typeof mql.addListener, "function");
-}, "MediaQueryList::addListener is a function");
-
promise_test(async t => {
const iframe = await createIFrame(t, 200, 100);
const heightMQL = iframe.contentWindow.matchMedia("(max-height: 50px)");
@@ -81,8 +75,7 @@ promise_test(async t => {
triggerMQLEvent(mql);
await waitForChangesReported();
- assert_equals(calls[0], "1st");
- assert_equals(calls[1], "2nd");
+ assert_array_equals(calls, ["1st", "2nd"]);
}, "listeners are called in order they were added");
promise_test(async t => {
@@ -102,11 +95,48 @@ promise_test(async t => {
assert_equals(called, 1);
}, "listener that was added twice is called only once");
-test(function() {
- const mql = window.matchMedia("all");
- assert_inherits(mql, "removeListener");
- assert_equals(typeof mql.removeListener, "function");
-}, "MediaQueryList::removeListener is a function");
+promise_test(async t => {
+ const iframe = await createIFrame(t, 100);
+ const media = `(min-width: 200px)`;
+
+ const mql1 = iframe.contentWindow.matchMedia(media);
+ const mql2 = iframe.contentWindow.matchMedia(media);
+ const calls = [];
+
+ mql2.addListener(() => {
+ calls.push("mql2");
+ });
+
+ mql1.addListener(() => {
+ calls.push("mql1");
+ });
+
+ iframe.width = "200"; // 100x100 => 200x100
+ await waitForChangesReported();
+
+ assert_array_equals(calls, ["mql1", "mql2"]);
+}, "listeners are called in order their MQLs were created");
+
+promise_test(async t => {
+ const iframe = await createIFrame(t, 200);
+ const media = `(max-height: 150px)`;
+
+ const mql1 = iframe.contentWindow.matchMedia(media);
+ const mql2 = iframe.contentWindow.matchMedia(media);
+
+ let calls = 0;
+ const listener = () => {
+ calls++;
+ };
+
+ mql1.addListener(listener);
+ mql2.removeListener(listener);
+
+ iframe.height = "50"; // 200x200 => 200x50
+ await waitForChangesReported();
+
+ assert_equals(calls, 1);
+}, "removing listener from one MQL doesn't remove it from all MQLs");
promise_test(async t => {
const mql = await createMQL(t);
diff --git a/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html b/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html
new file mode 100644
index 00000000000..7dae2afbd72
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="flags" content="dom">
+<title>CSS Test: CSSOM View MediaQueryList extends EventTarget (interop)</title>
+<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/matchMedia.js"></script>
+<div id="log"></div>
+<script>
+"use strict";
+
+test(() => {
+ const mql = window.matchMedia("all");
+
+ let receivedEvent;
+ mql.addListener(event => {
+ receivedEvent = event;
+ });
+
+ const dispatchedEvent = new Event("change");
+ mql.dispatchEvent(dispatchedEvent);
+
+ assert_equals(receivedEvent, dispatchedEvent);
+}, "dispatchEvent triggers listener added with addListener");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ const listener = {
+ handleEvent() {
+ calls++;
+ },
+ };
+
+ mql.addListener(listener);
+ mql.addEventListener("change", listener);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 1, "triggerMQLEvent");
+
+ mql.dispatchEvent(new Event("change"));
+ assert_equals(calls, 2, "dispatchEvent");
+}, "listener added with addListener and addEventListener is called once");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ const listener = () => {
+ calls++;
+ };
+
+ mql.addListener(listener);
+ mql.addEventListener("change", listener, true);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 2, "triggerMQLEvent");
+
+ mql.dispatchEvent(new Event("change"));
+ assert_equals(calls, 4, "dispatchEvent");
+}, "listener added with addListener and addEventListener (capture) is called twice");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ const listener = {
+ handleEvent() {
+ calls++;
+ },
+ };
+
+ mql.addListener(listener);
+ mql.removeEventListener("change", listener);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 0, "triggerMQLEvent");
+
+ mql.dispatchEvent(new Event("change"));
+ assert_equals(calls, 0, "dispatchEvent");
+}, "removeEventListener removes listener added with addListener");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ const listener = () => {
+ calls++;
+ };
+
+ mql.addListener(listener);
+ mql.removeEventListener("change", listener, true);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 1, "triggerMQLEvent");
+
+ mql.dispatchEvent(new Event("change"));
+ assert_equals(calls, 2, "dispatchEvent");
+}, "removeEventListener (capture) doesn't remove listener added with addListener");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ const listener = {
+ handleEvent() {
+ calls++;
+ },
+ };
+
+ mql.addEventListener("change", listener);
+ mql.removeListener(listener);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 0, "triggerMQLEvent");
+
+ mql.dispatchEvent(new Event("change"));
+ assert_equals(calls, 0, "dispatchEvent");
+}, "removeListener removes listener added with addEventListener");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ const listener = () => {
+ calls++;
+ };
+
+ mql.addEventListener("change", listener, true);
+ mql.removeListener(listener);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 1, "triggerMQLEvent");
+
+ mql.dispatchEvent(new Event("change"));
+ assert_equals(calls, 2, "dispatchEvent");
+}, "removeListener doesn't remove listener added with addEventListener (capture)");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = [];
+ mql.addListener(() => {
+ calls.push("addListener");
+ });
+ mql.addEventListener("change", {
+ handleEvent() {
+ calls.push("addEventListener");
+ },
+ }, true);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_array_equals(calls, ["addEventListener", "addListener"], "triggerMQLEvent");
+
+ calls = [];
+ mql.dispatchEvent(new Event("change"));
+ assert_array_equals(calls, ["addEventListener", "addListener"], "dispatchEvent");
+}, "listeners are called in order they were added, ignoring capture parameter");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget.html b/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget.html
new file mode 100644
index 00000000000..34b6ef15c05
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="flags" content="dom">
+<title>CSS Test: CSSOM View MediaQueryList extends EventTarget</title>
+<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/matchMedia.js"></script>
+<div id="log"></div>
+<script>
+"use strict";
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let _event;
+ mql.onchange = event => {
+ _event = event;
+ };
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(_event.media, mql.media);
+ assert_equals(_event.matches, mql.matches);
+}, "onchange adds listener");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ mql.onchange = () => {
+ calls++;
+ };
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 1);
+
+ mql.onchange = null;
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 1);
+}, "onchange removes listener");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ mql.addEventListener("change", {
+ handleEvent() {
+ calls++;
+ },
+ });
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 1);
+}, 'listeners for "change" type are called');
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+ mql.addEventListener("matches", t.unreached_func("should not be called"));
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+}, 'listeners with different type are not called');
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let calls = 0;
+ mql.addEventListener("change", {
+ handleEvent() {
+ calls++;
+ },
+ }, {once: true});
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 1);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+ assert_equals(calls, 1);
+}, 'addEventListener "once" option is respected');
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+ const listener = t.unreached_func("should not be called");
+
+ mql.addEventListener("change", listener);
+ mql.removeEventListener("change", listener);
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+}, "removeEventListener removes listener");
+
+test(() => {
+ const mql = window.matchMedia("all");
+
+ let receivedEvent;
+ mql.addEventListener("custom", event => {
+ receivedEvent = event;
+ event.preventDefault();
+ }, true);
+
+ const dispatchedEvent = new CustomEvent("custom", {
+ cancelable: true,
+ detail: {},
+ });
+
+ const defaultAction = mql.dispatchEvent(dispatchedEvent);
+
+ assert_equals(receivedEvent, dispatchedEvent);
+ assert_false(defaultAction);
+}, "dispatchEvent works as expected");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryListEvent.html b/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryListEvent.html
index 24cce3cc097..0afa09f087a 100644
--- a/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryListEvent.html
+++ b/tests/wpt/web-platform-tests/css/cssom-view/MediaQueryListEvent.html
@@ -2,18 +2,19 @@
<meta charset="utf-8">
<meta name="flags" content="dom">
<title>CSS Test: CSSOM View MediaQueryListEvent</title>
+<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#mediaquerylistevent">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
-<link rel="help" href="https://drafts.csswg.org/cssom-view/#mediaquerylistevent">
+<script src="resources/matchMedia.js"></script>
<div id="log"></div>
<script>
"use strict";
-test(t => {
+test(() => {
assert_equals(new MediaQueryListEvent("test").type, "test");
}, 'type can be different from "change"');
-test(t => {
+test(() => {
const event = new MediaQueryListEvent("change");
assert_equals(event.media, "");
@@ -22,7 +23,7 @@ test(t => {
assert_false(event.cancelable);
}, "init dictionary default values");
-test(t => {
+test(() => {
const event = new MediaQueryListEvent("change", {
media: "test",
matches: true,
@@ -35,4 +36,55 @@ test(t => {
assert_true(event.bubbles);
assert_true(event.cancelable);
}, "init dictionary overrides");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let _event;
+ mql.addListener(event => {
+ _event = event;
+ });
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+
+ assert_true(_event instanceof getWindow(mql).MediaQueryListEvent);
+ assert_equals(_event.type, "change");
+ assert_false(_event.bubbles);
+ assert_false(_event.cancelable);
+}, "argument of addListener");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let _event;
+ mql.onchange = event => {
+ _event = event;
+ };
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+
+ assert_true(_event instanceof getWindow(mql).MediaQueryListEvent);
+ assert_equals(_event.type, "change");
+ assert_false(_event.bubbles);
+ assert_false(_event.cancelable);
+}, "argument of onchange");
+
+promise_test(async t => {
+ const mql = await createMQL(t);
+
+ let _event;
+ mql.addEventListener("change", event => {
+ _event = event;
+ });
+
+ triggerMQLEvent(mql);
+ await waitForChangesReported();
+
+ assert_true(_event instanceof getWindow(mql).MediaQueryListEvent);
+ assert_equals(_event.type, "change");
+ assert_false(_event.bubbles);
+ assert_false(_event.cancelable);
+}, 'constructor of "change" event');
</script>
diff --git a/tests/wpt/web-platform-tests/css/cssom-view/matchMedia.html b/tests/wpt/web-platform-tests/css/cssom-view/matchMedia.html
index 14df3d02425..0a94c9850c8 100644
--- a/tests/wpt/web-platform-tests/css/cssom-view/matchMedia.html
+++ b/tests/wpt/web-platform-tests/css/cssom-view/matchMedia.html
@@ -3,9 +3,9 @@
<meta name="flags" content="dom">
<title>CSS Test: CSSOM View matchMedia and MediaQueryList</title>
<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com">
-<link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-window-matchmedia">
-<link rel="help" href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface">
-<link rel="help" href="http://www.w3.org/TR/cssom-1/#serializing-media-queries">
+<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-window-matchmedia">
+<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
+<link rel="help" href="https://www.w3.org/TR/cssom-1/#serializing-media-queries">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/matchMedia.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/cssom-view/resources/matchMedia.js b/tests/wpt/web-platform-tests/css/cssom-view/resources/matchMedia.js
index 8013699b7de..8623a6597a0 100644
--- a/tests/wpt/web-platform-tests/css/cssom-view/resources/matchMedia.js
+++ b/tests/wpt/web-platform-tests/css/cssom-view/resources/matchMedia.js
@@ -1,15 +1,20 @@
+"use strict";
+
+{
+// private variables are defined with `const` so they don't leak outside this block statement
const IFRAME_DEFAULT_SIZE = "200";
const iframes = new WeakMap();
-async function createMQL(t) {
+// helpers are defined with `var` so they are globally accessible
+var createMQL = async t => {
const iframe = await createIFrame(t);
const mql = iframe.contentWindow.matchMedia(`(max-width: ${IFRAME_DEFAULT_SIZE}px)`);
assert_true(mql.matches, "MQL should match on newly created <iframe>");
iframes.set(mql, iframe);
return mql;
-}
+};
-function createIFrame(t, width = IFRAME_DEFAULT_SIZE, height = width) {
+var createIFrame = (t, width = IFRAME_DEFAULT_SIZE, height = width) => {
assert_not_equals(document.body, null, "<body> element is missing");
const iframe = document.createElement("iframe");
@@ -30,16 +35,24 @@ function createIFrame(t, width = IFRAME_DEFAULT_SIZE, height = width) {
document.body.appendChild(iframe);
});
-}
+};
-function triggerMQLEvent(mql) {
+var triggerMQLEvent = mql => {
const iframe = iframes.get(mql);
assert_not_equals(iframe, undefined, "Passed MQL instance was not created with createMQL");
iframe.width = iframe.width === IFRAME_DEFAULT_SIZE ? "250" : IFRAME_DEFAULT_SIZE;
-}
+};
-function waitForChangesReported() {
+var getWindow = mql => {
+ const iframe = iframes.get(mql);
+ assert_not_equals(iframe, undefined, "Passed MQL instance was not created with createMQL");
+ return iframe.contentWindow;
+};
+
+var waitForChangesReported = () => {
return new Promise(resolve => {
step_timeout(resolve, 75);
});
+};
+
}
diff --git a/tests/wpt/web-platform-tests/css/cssom/idlharness.html b/tests/wpt/web-platform-tests/css/cssom/idlharness.html
index 3204fb8c7e7..ce13d30cfad 100644
--- a/tests/wpt/web-platform-tests/css/cssom/idlharness.html
+++ b/tests/wpt/web-platform-tests/css/cssom/idlharness.html
@@ -4,6 +4,7 @@
<title>CSSOM automated IDL tests</title>
<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
<link rel="help" href="https://drafts.csswg.org/cssom-1/#idl-index">
+<meta name="timeout" content="long">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/WebIDLParser.js></script>
diff --git a/tests/wpt/web-platform-tests/dom/events/Event-dispatch-order-at-target.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-order-at-target.html
new file mode 100644
index 00000000000..79673c32564
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-order-at-target.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Listeners are invoked in correct order (AT_TARGET phase)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+"use strict";
+
+test(() => {
+ const el = document.createElement("div");
+ const expectedOrder = ["capturing", "bubbling"];
+
+ let actualOrder = [];
+ el.addEventListener("click", evt => {
+ assert_equals(evt.eventPhase, Event.AT_TARGET);
+ actualOrder.push("bubbling");
+ }, false);
+ el.addEventListener("click", evt => {
+ assert_equals(evt.eventPhase, Event.AT_TARGET);
+ actualOrder.push("capturing");
+ }, true);
+
+ el.dispatchEvent(new Event("click", {bubbles: true}));
+ assert_array_equals(actualOrder, expectedOrder, "bubbles: true");
+
+ actualOrder = [];
+ el.dispatchEvent(new Event("click", {bubbles: false}));
+ assert_array_equals(actualOrder, expectedOrder, "bubbles: false");
+}, "Listeners are invoked in correct order (AT_TARGET phase)");
+</script>
diff --git a/tests/wpt/web-platform-tests/feature-policy/feature-policy-for-sandbox/resources/helper.js b/tests/wpt/web-platform-tests/feature-policy/feature-policy-for-sandbox/resources/helper.js
index 9de84165356..eec189871ff 100644
--- a/tests/wpt/web-platform-tests/feature-policy/feature-policy-for-sandbox/resources/helper.js
+++ b/tests/wpt/web-platform-tests/feature-policy/feature-policy-for-sandbox/resources/helper.js
@@ -7,7 +7,7 @@ const ignore_features_for_auxilary_context = ["popups", "scripts"];
// Feature-policies that represent specific sandbox flags.
const sandbox_features = [
- "downloads-without-user-activation", "forms", "modals", "orientation-lock",
+ "downloads", "forms", "modals", "orientation-lock",
"pointer-lock", "popups", "presentation", "scripts", "top-navigation"];
// TODO(ekaramad): Figure out different inheritance requirements for different
diff --git a/tests/wpt/web-platform-tests/fetch/metadata/portal.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/metadata/portal.tentative.https.sub.html
index b9128944733..4e50b6b24b3 100644
--- a/tests/wpt/web-platform-tests/fetch/metadata/portal.tentative.https.sub.html
+++ b/tests/wpt/web-platform-tests/fetch/metadata/portal.tentative.https.sub.html
@@ -12,6 +12,8 @@
function create_test(host, expectations) {
async_test(t => {
+ assert_precondition("HTMLPortalElement" in window, "Portals are not supported.");
+
let p = document.createElement('portal');
p.addEventListener('message', t.step_func(e => {
assert_header_equals(e.data, expectations, `{{host}} -> ${host} portal`);
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html
index 32409f220f0..1e93cb5997d 100644
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
-<title>&lt;a download&gt; triggered download in sandbox is allowed by allow-downloads-without-user-activation.</title>
+<title>&lt;a download&gt; triggered download in sandbox is allowed by allow-downloads.</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-iframe-sandbox">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-iframe-element">
<script src="/resources/testharness.js"></script>
@@ -14,7 +14,7 @@ async_test(t => {
const token = "{{$id:uuid()}}";
var iframe = document.createElement("iframe");
iframe.srcdoc = "<a>Download</a>";
- iframe.sandbox = "allow-same-origin allow-downloads-without-user-activation";
+ iframe.sandbox = "allow-same-origin allow-downloads";
iframe.onload = t.step_func(function () {
iframe.contentWindow.addEventListener(
"unload", t.unreached_func("Unexpected navigation."));
@@ -26,6 +26,6 @@ async_test(t => {
});
document.body.appendChild(iframe);
-}, "<a download> triggered download in sandbox is allowed by allow-downloads-without-user-activation.");
+}, "<a download> triggered download in sandbox is allowed by allow-downloads.");
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html
index abd4d7c5e0d..abd4d7c5e0d 100644
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html
index 6af49b8d78d..50e28f650c7 100644
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
-<title>Navigation resulted download in sandbox is allowed by allow-downloads-without-user-activation.</title>
+<title>Navigation resulted download in sandbox is allowed by allow-downloads.</title>
<meta name="timeout" content="long" />
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-iframe-sandbox">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-iframe-element">
@@ -15,7 +15,7 @@ async_test(t => {
const token = "{{$id:uuid()}}";
var iframe = document.createElement("iframe");
iframe.srcdoc = "<a>Download</a>";
- iframe.sandbox = "allow-same-origin allow-downloads-without-user-activation";
+ iframe.sandbox = "allow-same-origin allow-downloads";
iframe.onload = t.step_func(function () {
iframe.contentWindow.addEventListener(
"unload", t.unreached_func("Unexpected navigation."));
@@ -29,6 +29,6 @@ async_test(t => {
});
document.body.appendChild(iframe);
-}, "Navigation resulted download in sandbox is allowed by allow-downloads-without-user-activation.");
+}, "Navigation resulted download in sandbox is allowed by allow-downloads.");
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html
index 9b9246c393e..9b9246c393e 100644
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/form-submission.py b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/form-submission.py
index 467875453c9..b296ac44c57 100644
--- a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/form-submission.py
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/form-submission.py
@@ -6,5 +6,7 @@ def main(request, response):
else:
result = request.POST.first('foo') == 'bar'
+ result = result and request.url_parts.query == 'query=1'
+
return ([("Content-Type", "text/plain")],
"OK" if result else "FAIL")
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/submit-entity-body.html b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/submit-entity-body.html
index f6f3858d4ff..be9c5f0696e 100644
--- a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/submit-entity-body.html
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/submit-entity-body.html
@@ -96,7 +96,7 @@ function run_simple_test() {
var testframe = document.getElementById("testframe");
var testdocument = testframe.contentWindow.document;
testdocument.body.innerHTML =
- "<form id=testform method=post action=\"/html/semantics/forms/form-submission-0/resources/form-submission.py\" enctype=\"" + test_obj.enctype + "\">" +
+ "<form id=testform method=post action=\"/html/semantics/forms/form-submission-0/resources/form-submission.py?query=1\" enctype=\"" + test_obj.enctype + "\">" +
test_obj.input +
test_obj.submitelement +
"</form>";
diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html
new file mode 100644
index 00000000000..ab200020b4f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>summary element: clicking on anchor containing inline element</title>
+<link rel="author" title="Yu Han" href="mailto:yuzhehan@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/C/#the-summary-element">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<details id="details_i">
+ <summary>Anchor text is wrapped with &lt;i&gt; tag <a href="#with_i_tag"><i id="with_i">permalink</i></a></summary>
+ <p>asdf</p>
+</details>
+
+<details id="details_span">
+ <summary>This one uses &lt;span&gt;. <a href="#with_span_tag"><span id="with_span">permalink</span></a></summary>
+ <p>asdf</p>
+</details>
+
+<details id="details_svg">
+ <summary>
+ <svg style="width: 100px;" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
+ <a href="#inside_svg_w_circle">
+ <circle id="svg_circle" cx="50" cy="40" r="35"/>
+ </a>
+ <a href="#inside_svg_w_text">
+ <text id="svg_text" x="50" y="90" text-anchor="middle">
+ &lt;circle&gt;
+ </text>
+ </a>
+ </svg>
+ </summary>
+ <p>asdf</p>
+</details>
+
+<script>
+function testClickingOnInlineElement(detailsId, targetId, expected, testName) {
+ const details = document.getElementById(detailsId);
+ const target = document.getElementById(targetId);
+ const test = async_test(testName);
+
+ const promise = new Promise((resolve, reject) => {
+ window.onhashchange = test.step_func_done(() => {
+ assert_false(details.open);
+ assert_true(location.hash === expected);
+ resolve();
+ });
+ });
+
+ if (target.click) {
+ target.click();
+ }
+ else {
+ // svg element don't have click method
+ target.dispatchEvent(new MouseEvent('click', {
+ view: window,
+ bubbles: true,
+ cancelable: true
+ }));
+ }
+ return promise;
+};
+
+async function testAll() {
+ try {
+ await testClickingOnInlineElement("details_i", "with_i", "#with_i_tag", "Expected <a> containing <i> to navigate");
+ await testClickingOnInlineElement("details_span", "with_span", "#with_span_tag", "Expected <a> containing <span> to navigate");
+ await testClickingOnInlineElement("details_svg", "svg_circle", "#inside_svg_w_circle", "Expected <a>, inside svg, containing <circle> to navigate");
+ await testClickingOnInlineElement("details_svg", "svg_text", "#inside_svg_w_text", "Expected <a>, inside svg, containing <text> to navigate");
+ } catch (exception) {
+ assert_unreached("should NOT-THROW exception");
+ }
+};
+
+var allTests = async_test("Clicking on anchor with embedded inline element should navigate instead of opening details");
+testAll().then(()=>{ allTests.done(); });
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-handleEvent-ignored.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-handleEvent-ignored.html
new file mode 100644
index 00000000000..8039bac7adc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-handleEvent-ignored.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>"handleEvent" property of EventHandler should be ignored</title>
+<link rel="help" href="https://html.spec.whatwg.org/#eventhandler">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+"use strict";
+
+test(t => {
+ const handler = Object.create(null, {
+ handleEvent: {
+ get: t.unreached_func('"handleEvent" property should not be looked up'),
+ },
+ });
+
+ const el = document.createElement("div");
+ el.onmouseenter = handler;
+ el.dispatchEvent(new MouseEvent("mouseenter"));
+}, 'plain object "mouseenter" handler');
+
+async_test(t => {
+ const handler = Object.create(Function.prototype, {
+ handleEvent: {
+ get: t.unreached_func('"handleEvent" property should not be looked up'),
+ },
+ });
+ assert_true(handler instanceof Function);
+
+ window.onmessage = handler;
+ window.postMessage({}, "*");
+
+ step_timeout(() => {
+ t.done();
+ }, 50);
+}, 'non-callable "message" handler that is instance of Function');
+</script>
diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onresize.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onresize.html
index 8686716e19a..0e44e7272f0 100644
--- a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onresize.html
+++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-onresize.html
@@ -6,7 +6,7 @@
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
-var t = async_test("body.onresize should set the window.onload handler")
+var t = async_test("body.onresize should set the window.onresize handler")
window.onresize = t.step_func(function() {
assert_unreached("This handler should be overwritten.")
})
diff --git a/tests/wpt/web-platform-tests/interfaces/WebCryptoAPI.idl b/tests/wpt/web-platform-tests/interfaces/WebCryptoAPI.idl
index 0b515fc12e7..fecb3b72d3a 100644
--- a/tests/wpt/web-platform-tests/interfaces/WebCryptoAPI.idl
+++ b/tests/wpt/web-platform-tests/interfaces/WebCryptoAPI.idl
@@ -4,7 +4,7 @@
// Source: Web Cryptography API (https://w3c.github.io/webcrypto/Overview.html)
partial interface mixin WindowOrWorkerGlobalScope {
- readonly attribute Crypto crypto;
+ [SameObject] readonly attribute Crypto crypto;
};
[Exposed=(Window,Worker)]
@@ -160,7 +160,7 @@ dictionary RsaHashedImportParams : Algorithm {
dictionary RsaPssParams : Algorithm {
// The desired length of the random salt
- [EnforceRange] required unsigned long saltLength;
+ required [EnforceRange] unsigned long saltLength;
};
dictionary RsaOaepParams : Algorithm {
@@ -206,7 +206,7 @@ dictionary AesCtrParams : Algorithm {
required BufferSource counter;
// The length, in bits, of the rightmost part of the counter block
// that is incremented.
- [EnforceRange] required octet length;
+ required [EnforceRange] octet length;
};
dictionary AesKeyAlgorithm : KeyAlgorithm {
@@ -216,12 +216,12 @@ dictionary AesKeyAlgorithm : KeyAlgorithm {
dictionary AesKeyGenParams : Algorithm {
// The length, in bits, of the key.
- [EnforceRange] required unsigned short length;
+ required [EnforceRange] unsigned short length;
};
dictionary AesDerivedKeyParams : Algorithm {
// The length, in bits, of the key.
- [EnforceRange] required unsigned short length;
+ required [EnforceRange] unsigned short length;
};
dictionary AesCbcParams : Algorithm {
@@ -272,6 +272,6 @@ dictionary HkdfParams : Algorithm {
dictionary Pbkdf2Params : Algorithm {
required BufferSource salt;
- [EnforceRange] required unsigned long iterations;
+ required [EnforceRange] unsigned long iterations;
required HashAlgorithmIdentifier hash;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl
index 340dab647d6..455720c641e 100644
--- a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl
+++ b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl
@@ -85,7 +85,7 @@ enum NDEFPushTarget {
};
dictionary NDEFScanOptions {
- USVString id = "";
+ USVString id;
USVString recordType;
USVString mediaType = "";
AbortSignal? signal;
diff --git a/tests/wpt/web-platform-tests/layout-instability/clip-negative-bottom-margin.html b/tests/wpt/web-platform-tests/layout-instability/clip-negative-bottom-margin.html
new file mode 100644
index 00000000000..2c329d9fcd6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/clip-negative-bottom-margin.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>Layout Instability: clip with negative bottom margin</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#scroller { overflow: scroll; width: 200px; height: 500px; }
+#space { height: 1000px; margin-bottom: -500px; }
+#j { width: 150px; height: 150px; background: yellow; }
+
+</style>
+<div id='scroller'>
+ <div id='space'></div>
+ <div id='j'></div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Increase j's top margin by 100px. Since j is fully clipped by the scroller,
+ // this should not generate a shift.
+ document.querySelector("#j").style.marginTop = "100px";
+
+ await waitForAnimationFrames(3);
+ assert_equals(watcher.score, 0);
+}, "Clip with negative bottom margin.");
+
+</script>
+
+
diff --git a/tests/wpt/web-platform-tests/layout-instability/composited-element-movement.html b/tests/wpt/web-platform-tests/layout-instability/composited-element-movement.html
new file mode 100644
index 00000000000..c9906903358
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/composited-element-movement.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<title>Layout Instability: element with compositing layer hint</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#shift {
+ position: relative;
+ width: 500px;
+ height: 200px;
+ background: yellow;
+}
+#container {
+ position: absolute;
+ width: 350px;
+ height: 400px;
+ right: 50px;
+ top: 100px;
+ background: #ccc;
+}
+.promote { will-change: transform; }
+
+</style>
+<div id="container" class="promote">
+ <div id="space"></div>
+ <div id="shift" class="promote"></div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Induce a shift.
+ document.querySelector("#space").style = "height: 100px";
+
+ // #shift is 400x200 after viewport intersection with correct application of
+ // composited #container offset, and 100px lower after shifting, so impact
+ // region is 400 * (200 + 100).
+ const expectedScore = computeExpectedScore(400 * (200 + 100), 100);
+
+ // Observer fires after the frame is painted.
+ assert_equals(watcher.score, 0);
+ await watcher.promise;
+ assert_equals(watcher.score, expectedScore);
+}, "Element with compositing layer hint.");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/fully-clipped-visual-rect.html b/tests/wpt/web-platform-tests/layout-instability/fully-clipped-visual-rect.html
new file mode 100644
index 00000000000..bfd74a2407e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/fully-clipped-visual-rect.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Layout Instability: fully clipped visual rect</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#clip { width: 0px; height: 600px; overflow: hidden; }
+#j { position: relative; width: 300px; height: 200px; }
+
+</style>
+<div id='clip'><div id='j'></div></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Shift an element that is fully clipped by its container.
+ document.querySelector("#j").style.top = "200px";
+
+ await waitForAnimationFrames(3);
+ assert_equals(watcher.score, 0);
+}, "Fully clipped visual rect.");
+
+</script>
+
+
diff --git a/tests/wpt/web-platform-tests/layout-instability/ignore-fixed-and-sticky.html b/tests/wpt/web-platform-tests/layout-instability/ignore-fixed-and-sticky.html
new file mode 100644
index 00000000000..1b39dc9e6e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/ignore-fixed-and-sticky.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<title>Layout Instability: ignore fixed and sticky positioning</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { height: 2000px; }
+#f1, #f2 {
+ position: fixed;
+ width: 300px;
+ height: 100px;
+ left: 100px;
+}
+#f1 { top: 0; }
+#f2 { top: 150px; will-change: transform; }
+#s1 {
+ position: sticky;
+ width: 200px;
+ height: 100px;
+ left: 450px;
+ top: 0;
+}
+
+</style>
+<div id='f1'>fixed</div>
+<div id='f2'>fixed composited</div>
+<div id='s1'>sticky</div>
+normal
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Scroll down by 50px.
+ document.scrollingElement.scrollTop = 50;
+
+ // Force a layout.
+ document.body.style.height = "2500px";
+
+ // No layout shift should occur as a result of the scroll-triggered
+ // repositioning of fixed and sticky elements.
+ await waitForAnimationFrames(3);
+ assert_equals(watcher.score, 0);
+}, 'Ignore fixed and sticky.');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/local-shift-without-viewport-shift.html b/tests/wpt/web-platform-tests/layout-instability/local-shift-without-viewport-shift.html
new file mode 100644
index 00000000000..37729f1c13c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/local-shift-without-viewport-shift.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Layout Instability: local shift without viewport shift</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#c { position: relative; width: 300px; height: 100px; transform: scale(0.1); }
+#j { position: relative; width: 100px; height: 10px; }
+
+</style>
+<div id='c'>
+ <div id='j'></div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ document.querySelector("#j").style.top = "4px";
+
+ // Make sure no shift score is reported, since the element didn't move in the
+ // viewport.
+ await waitForAnimationFrames(3);
+ assert_equals(watcher.score, 0);
+}, "Local shift without viewport shift.");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/multi-clip-visual-rect.html b/tests/wpt/web-platform-tests/layout-instability/multi-clip-visual-rect.html
new file mode 100644
index 00000000000..36475d4c826
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/multi-clip-visual-rect.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>Layout Instability: multi clip visual rect</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#outer { width: 200px; height: 600px; overflow: hidden; }
+#inner { width: 300px; height: 150px; overflow: hidden; }
+#j { position: relative; width: 300px; height: 600px; }
+
+</style>
+<div id='outer'><div id='inner'><div id='j'></div></div></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ document.querySelector("#j").style.top = "-200px";
+
+ // Note that, while the element moves up 200px, its visibility is
+ // clipped at 0px,150px height, so the additional 200px of vertical
+ // move distance is not included in the score.
+ // (clip width 200) * (clip height 150)
+ const expectedScore = computeExpectedScore(200 * 150, 200);
+
+ await watcher.promise;
+ assert_equals(watcher.score, expectedScore);
+}, "Multi clip visual rect.");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/partially-clipped-visual-rect.html b/tests/wpt/web-platform-tests/layout-instability/partially-clipped-visual-rect.html
new file mode 100644
index 00000000000..3b18b98dd93
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/partially-clipped-visual-rect.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Layout Instability: partially clipped visual rect</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#clip { width: 150px; height: 600px; overflow: hidden; }
+#j { position: relative; width: 300px; height: 200px; }
+
+</style>
+<div id='clip'><div id='j'></div></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ document.querySelector("#j").style.top = "200px";
+
+ // (clipped width 150px) * (height 200 + movement 200)
+ const expectedScore = computeExpectedScore(150 * (200 + 200), 200);
+
+ await watcher.promise;
+ assert_equals(watcher.score, expectedScore);
+}, "Partially clipped visual rect.");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/shift-into-viewport.html b/tests/wpt/web-platform-tests/layout-instability/shift-into-viewport.html
new file mode 100644
index 00000000000..6ace93ad54c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/shift-into-viewport.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift into viewport</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#j { position: relative; width: 600px; height: 200px; top: 600px; }
+
+</style>
+<div id='j'></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ document.querySelector("#j").style.top = "400px";
+
+ // The element moves from outside the viewport to within the viewport, which
+ // should generate a shift.
+ // (width 600) * (height 0 + move 200)
+ const expectedScore = computeExpectedScore(600 * 200, 200);
+
+ await watcher.promise;
+ assert_equals(watcher.score, expectedScore);
+}, "Shift into viewport.");
+
+</script>
+
diff --git a/tests/wpt/web-platform-tests/layout-instability/shift-outside-viewport.html b/tests/wpt/web-platform-tests/layout-instability/shift-outside-viewport.html
new file mode 100644
index 00000000000..49242913760
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/shift-outside-viewport.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift outside viewport</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#j { position: relative; width: 600px; height: 200px; top: 600px; }
+
+</style>
+<div id='j'></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ document.querySelector("#j").style.top = "800px";
+
+ // Since the element moves entirely outside of the viewport, it shouldn't
+ // generate a score.
+ await waitForAnimationFrames(3);
+ assert_equals(watcher.score, 0);
+}, "Shift outside viewport.");
+
+</script>
+
+
diff --git a/tests/wpt/web-platform-tests/layout-instability/shift-while-scrolled.html b/tests/wpt/web-platform-tests/layout-instability/shift-while-scrolled.html
new file mode 100644
index 00000000000..88eeedea877
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/shift-while-scrolled.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift while scrolled</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { height: 2000px; margin: 0; }
+#shift { position: relative; width: 300px; height: 200px; }
+
+</style>
+<div id="shift"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Scroll down by 100px.
+ document.scrollingElement.scrollTop = 100;
+ assert_equals(watcher.score, 0);
+
+ // Generate a layout shift.
+ document.querySelector("#shift").style = "top: 60px";
+
+ // Impact region: width * (height - scrollTop + moveDistance)
+ const expectedScore = computeExpectedScore(
+ 300 * (200 - 100 + 60), 60);
+
+ await watcher.promise;
+ assert_equals(watcher.score, expectedScore);
+}, 'Layout shift with non-zero scroll offset.');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/shift-with-counterscroll.html b/tests/wpt/web-platform-tests/layout-instability/shift-with-counterscroll.html
new file mode 100644
index 00000000000..8ad1a463443
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/shift-with-counterscroll.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift with counterscroll not counted</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#s {
+ overflow: scroll;
+ position: absolute;
+ left: 20px;
+ top: 20px;
+ width: 200px;
+ height: 200px;
+}
+#sp {
+ width: 170px;
+ height: 600px;
+}
+#ch {
+ position: relative;
+ background: yellow;
+ left: 10px;
+ top: 100px;
+ width: 150px;
+ height: 150px;
+}
+
+</style>
+<div id="s">
+ <div id="sp">
+ <div id="ch"></div>
+ </div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ let scroller = document.querySelector("#s");
+ let changer = document.querySelector("#ch");
+
+ changer.style.top = "200px";
+ scroller.scrollTop = 100;
+
+ await waitForAnimationFrames(3);
+ assert_equals(watcher.score, 0);
+}, "Shift with counterscroll not counted.");
+
+</script>
+
+
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/direction/direction-009-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/tokens/ms-001-ref.html
index 8b80b7e6bea..bbd42a93eed 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/direction/direction-009-ref.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/tokens/ms-001-ref.html
@@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8"/>
- <title>RTL ms lquote="X" rquote="p"</title>
+ <title>ms legacy lquote and rquote attributes (reference)</title>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
math {
@@ -14,7 +14,7 @@
<p>
<math>
- <ms lquote="p" rquote="X">É</ms>
+ <ms>X</ms>
</math>
</p>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/direction/direction-009.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/tokens/ms-001.html
index c0ca31d40a8..b0b03f22552 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/direction/direction-009.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/tokens/ms-001.html
@@ -2,12 +2,12 @@
<html>
<head>
<meta charset="utf-8"/>
- <title>RTL ms lquote="X" rquote="p"</title>
+ <title>ms legacy lquote and rquote attributes</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#attributes-common-to-html-and-mathml-elements">
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#string-literal-ms">
- <meta name="assert" content="Verify that a RTL ms element renders the same as if its left and right quotes were switched.">
- <link rel="match" href="direction-009-ref.html">
+ <meta name="assert" content="Verify that legacy lquote and rquote attributes are ignored on the ms element.">
+ <link rel="match" href="ms-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
math {
@@ -18,13 +18,13 @@
<body>
<p>
- <math dir="rtl">
- <ms lquote="X" rquote="p">É</ms>
+ <math>
+ <ms lquote="É" rquote="p">X</ms>
</math>
</p>
<script src="/mathml/support/feature-detection.js"></script>
- <script>MathMLFeatureDetection.ensure_for_match_reftest("has_dir");</script>
+ <script>MathMLFeatureDetection.ensure_for_match_reftest("has_ms");</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/portals/about-blank-cannot-host.html b/tests/wpt/web-platform-tests/portals/about-blank-cannot-host.html
new file mode 100644
index 00000000000..207d477697d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/portals/about-blank-cannot-host.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+promise_test(async (t) => {
+ let hostWindow = window.open();
+ assert_equals(hostWindow.location.href, "about:blank");
+
+ let portal = hostWindow.document.createElement("portal");
+ portal.src = "resources/simple-portal.html";
+ hostWindow.document.body.appendChild(portal);
+
+ await promise_rejects(t, "InvalidStateError", portal.activate());
+}, "about:blank cannot host a portal");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/portals/portal-activate-data.html b/tests/wpt/web-platform-tests/portals/portal-activate-data.html
index 38204edb2c3..b3b9223b519 100644
--- a/tests/wpt/web-platform-tests/portals/portal-activate-data.html
+++ b/tests/wpt/web-platform-tests/portals/portal-activate-data.html
@@ -2,6 +2,7 @@
<title>Tests passing of data along with portal activation</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="resources/open-blank-host.js"></script>
<body>
<canvas id="canvas"></canvas>
<script>
@@ -12,7 +13,7 @@ function nextMessage(target) {
}
async function openPortalAndActivate(logic, activateOptions) {
- const w = window.open();
+ const w = await openBlankPortalHost();
try {
const portal = w.document.createElement('portal');
portal.src = new URL('resources/portal-activate-data-portal.html?logic=' + encodeURIComponent(logic), location.href);
diff --git a/tests/wpt/web-platform-tests/portals/portals-activate-resolution.html b/tests/wpt/web-platform-tests/portals/portals-activate-resolution.html
index 44ccea3bc52..db77a990e53 100644
--- a/tests/wpt/web-platform-tests/portals/portals-activate-resolution.html
+++ b/tests/wpt/web-platform-tests/portals/portals-activate-resolution.html
@@ -1,9 +1,10 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="resources/open-blank-host.js"></script>
<script>
promise_test(async () => {
- var win = window.open();
+ var win = await openBlankPortalHost();
var portal = win.document.createElement("portal");
portal.src = new URL("resources/simple-portal.html", location.href)
diff --git a/tests/wpt/web-platform-tests/portals/portals-navigate-after-adoption.html b/tests/wpt/web-platform-tests/portals/portals-navigate-after-adoption.html
index 083eeaa1482..5ad30d7928a 100644
--- a/tests/wpt/web-platform-tests/portals/portals-navigate-after-adoption.html
+++ b/tests/wpt/web-platform-tests/portals/portals-navigate-after-adoption.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="resources/open-blank-host.js"></script>
<script>
function nextMessage(target) {
return new Promise((resolve, reject) => {
@@ -10,7 +11,7 @@ function nextMessage(target) {
async function openPortalAndActivate(logic) {
let {port1, port2} = new MessageChannel();
- const w = window.open();
+ const w = await openBlankPortalHost();
try {
const portal = w.document.createElement('portal');
portal.src = new URL('resources/eval-portal.html?logic=' + encodeURIComponent(logic), location.href);
diff --git a/tests/wpt/web-platform-tests/portals/portals-set-src-after-activate.html b/tests/wpt/web-platform-tests/portals/portals-set-src-after-activate.html
index 8da6b341840..70a16436a67 100644
--- a/tests/wpt/web-platform-tests/portals/portals-set-src-after-activate.html
+++ b/tests/wpt/web-platform-tests/portals/portals-set-src-after-activate.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="resources/open-blank-host.js"></script>
<script>
function nextMessage(target) {
return new Promise((resolve, reject) => {
@@ -9,7 +10,7 @@ function nextMessage(target) {
}
promise_test(async () => {
- const w = window.open();
+ const w = await openBlankPortalHost();
try {
const portal = w.document.createElement('portal');
portal.src = new URL('resources/simple-portal-adopts-predecessor.html', location.href);
diff --git a/tests/wpt/web-platform-tests/portals/resources/blank-host.html b/tests/wpt/web-platform-tests/portals/resources/blank-host.html
new file mode 100644
index 00000000000..d9f3a61eb84
--- /dev/null
+++ b/tests/wpt/web-platform-tests/portals/resources/blank-host.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<!--
+ This is a blank page used when a test needs a new window to host and activate
+ a portal. Tests cannot simply use window.open() without a URL as about:blank
+ may not host a portal.
+-->
+<body>
+</body>
diff --git a/tests/wpt/web-platform-tests/portals/resources/open-blank-host.js b/tests/wpt/web-platform-tests/portals/resources/open-blank-host.js
new file mode 100644
index 00000000000..f7580bd1521
--- /dev/null
+++ b/tests/wpt/web-platform-tests/portals/resources/open-blank-host.js
@@ -0,0 +1,14 @@
+// Portal tests often need to create portals in a context other than the one
+// in which the tests are running. This is because the host context may be
+// discarded during the course of the test.
+
+// Opens a blank page for use as a portal host.
+// Tests cannot simply use window.open() without a URL as about:blank may not
+// host a portal.
+async function openBlankPortalHost() {
+ let hostWindow = window.open('/portals/resources/blank-host.html');
+ await new Promise((resolve) => {
+ hostWindow.addEventListener('load', resolve, {once: true});
+ });
+ return hostWindow;
+}
diff --git a/tests/wpt/web-platform-tests/resources/chromium/sms_mock.js b/tests/wpt/web-platform-tests/resources/chromium/sms_mock.js
index bdfbc2052fa..d8476cf37ad 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/sms_mock.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/sms_mock.js
@@ -8,7 +8,7 @@ const SmsProvider = (() => {
this.mojoReceiver_ = new blink.mojom.SmsReceiverReceiver(this);
this.interceptor_ = new MojoInterfaceInterceptor(
- blink.mojom.SmsReceiver.$interfaceName, "context", true)
+ blink.mojom.SmsReceiver.$interfaceName, "context", true);
this.interceptor_.oninterfacerequest = (e) => {
this.mojoReceiver_.$.bindHandle(e.handle);
@@ -18,15 +18,16 @@ const SmsProvider = (() => {
this.returnValues_ = {};
}
- receive() {
+ async receive() {
let call = this.returnValues_.receive ?
this.returnValues_.receive.shift() : null;
- if (!call) {
- throw new Error("Unexpected call.");
- }
+ if (!call)
+ return;
return call();
}
+ async abort() {}
+
pushReturnValuesForTesting(callName, value) {
this.returnValues_[callName] = this.returnValues_[callName] || [];
this.returnValues_[callName].push(value);
diff --git a/tests/wpt/web-platform-tests/sms/interceptor.https.html b/tests/wpt/web-platform-tests/sms/interceptor.https.html
index 6da2d71c52a..94f1951a138 100644
--- a/tests/wpt/web-platform-tests/sms/interceptor.https.html
+++ b/tests/wpt/web-platform-tests/sms/interceptor.https.html
@@ -114,4 +114,21 @@ promise_test(async t => {
}
}, 'Deal with cancelled requests');
+promise_test(async t => {
+ const controller = new AbortController();
+ const signal = controller.signal;
+
+ controller.abort();
+ await promise_rejects(t, 'AbortError', navigator.sms.receive({signal}));
+}, 'Should abort request');
+
+promise_test(async t => {
+ const controller = new AbortController();
+ const signal = controller.signal;
+
+ let error = navigator.sms.receive({signal});
+ controller.abort();
+ await promise_rejects(t, 'AbortError', error);
+}, 'Should abort request even while request is in progress.');
+
</script>
diff --git a/tests/wpt/web-platform-tests/sms/sms_receiver.idl b/tests/wpt/web-platform-tests/sms/sms_receiver.idl
index 64048523f90..ca8cfdd798c 100644
--- a/tests/wpt/web-platform-tests/sms/sms_receiver.idl
+++ b/tests/wpt/web-platform-tests/sms/sms_receiver.idl
@@ -13,7 +13,7 @@ interface SMS {
};
dictionary SMSReceiverOptions {
- // TODO(b/976401): Implement abort controller.
+ AbortSignal signal;
};
[
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py
index ea345efa44f..2953de18174 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/servodriver.py
@@ -163,9 +163,7 @@ class ServoWebDriverBrowser(Browser):
command=" ".join(self.command))
def is_alive(self):
- if self.runner:
- return self.runner.is_running()
- return False
+ return self.proc.poll() is None
def cleanup(self):
self.stop()