aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2020-05-15 08:19:23 +0000
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2020-05-15 10:39:22 +0000
commitdb12fbb0be4e0c689070a27221f27de6cb447618 (patch)
tree04d0ca1bbcc8476a43e7c75b7d24e436b2bc186f
parente1cc38bea8a701108b6f2fa809f341769613b55f (diff)
downloadservo-db12fbb0be4e0c689070a27221f27de6cb447618.tar.gz
servo-db12fbb0be4e0c689070a27221f27de6cb447618.zip
Update web-platform-tests to revision 73bd4355b891665829c66e1b83d64bcc29197a16
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini14
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini5
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini (renamed from tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini)2
-rw-r--r--tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini12
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini19
-rw-r--r--tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini18
-rw-r--r--tests/wpt/metadata-layout-2020/url/a-element.html.ini18
-rw-r--r--tests/wpt/metadata-layout-2020/url/failure.html.ini90
-rw-r--r--tests/wpt/metadata-layout-2020/url/url-constructor.html.ini18
-rw-r--r--tests/wpt/metadata-layout-2020/webdriver/tests/perform_actions/pointer_tripleclick.py.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini5
-rw-r--r--tests/wpt/metadata/MANIFEST.json615
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini4
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini14
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini5
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini)2
-rw-r--r--tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini12
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini9
-rw-r--r--tests/wpt/metadata/url/a-element-xhtml.xhtml.ini18
-rw-r--r--tests/wpt/metadata/url/a-element.html.ini18
-rw-r--r--tests/wpt/metadata/url/failure.html.ini90
-rw-r--r--tests/wpt/metadata/url/url-constructor.html.ini18
-rw-r--r--tests/wpt/metadata/webdriver/tests/perform_actions/pointer_tripleclick.py.ini4
-rw-r--r--tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini5
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html6
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers2
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html4
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html11
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html.headers2
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js31
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html11
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html4
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-empty-accept-ch.https.html20
-rw-r--r--tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html20
-rw-r--r--tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html44
-rw-r--r--tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html.headers2
-rw-r--r--tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py2
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs-manual.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image-manual.https.html)18
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe-manual.https.html)14
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe-manual.https.html)14
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe-manual.https.html)18
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe-manual.https.html)20
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read-manual.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText-manual.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read-manual.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText.https.html (renamed from tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText-manual.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js2
-rw-r--r--tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js2
-rw-r--r--tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js2
-rw-r--r--tests/wpt/web-platform-tests/compression/third_party/pako/LICENSE (renamed from tests/wpt/web-platform-tests/compression/pako/LICENSE)0
-rw-r--r--tests/wpt/web-platform-tests/compression/third_party/pako/README (renamed from tests/wpt/web-platform-tests/compression/pako/README)0
-rw-r--r--tests/wpt/web-platform-tests/compression/third_party/pako/pako_inflate.min.js (renamed from tests/wpt/web-platform-tests/compression/pako/pako_inflate.min.js)0
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/floats/line-pushed-by-floats-crash.html10
-rw-r--r--tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht2
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html87
-rw-r--r--tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-invalid.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-valid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-anchoring/focus-prioritized.html46
-rw-r--r--tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html1
-rw-r--r--tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection-xhtml.xhtml (renamed from tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection.xhtml)0
-rw-r--r--tests/wpt/web-platform-tests/event-timing/auxclick.html1
-rw-r--r--tests/wpt/web-platform-tests/event-timing/click.html17
-rw-r--r--tests/wpt/web-platform-tests/event-timing/contextmenu.html21
-rw-r--r--tests/wpt/web-platform-tests/event-timing/dblclick.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/mousedown.html17
-rw-r--r--tests/wpt/web-platform-tests/event-timing/mouseenter.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/mouseleave.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/mouseout.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/mouseover.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/mouseup.html17
-rw-r--r--tests/wpt/web-platform-tests/event-timing/pointerdown.html17
-rw-r--r--tests/wpt/web-platform-tests/event-timing/pointerenter.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/pointerleave.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/pointerout.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/pointerover.html18
-rw-r--r--tests/wpt/web-platform-tests/event-timing/pointerup.html17
-rw-r--r--tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js104
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml348
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html2
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html2
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html2
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html77
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html2
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js6
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html2
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/constraints/input-pattern-dynamic-value.html17
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html17
-rw-r--r--tests/wpt/web-platform-tests/interfaces/web-share.idl1
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webauthn.idl3
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webrtc.idl15
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html48
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html4
-rw-r--r--tests/wpt/web-platform-tests/scroll-animations/element-based-offset-clamp.html214
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html1
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/lint.py37
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/rules.py9
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.html4
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.js6
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.xhtml5
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/b.html4
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir2/a.xhtml5
-rw-r--r--tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py59
-rw-r--r--tests/wpt/web-platform-tests/url/resources/urltestdata.json77
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html7
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_tripleclick.py34
-rw-r--r--tests/wpt/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html66
-rw-r--r--tests/wpt/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html44
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html1
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js12
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html8
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html19
-rw-r--r--tests/wpt/web-platform-tests/webrtc/simulcast/h264.https.html23
-rw-r--r--tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js7
-rw-r--r--tests/wpt/web-platform-tests/webrtc/simulcast/vp8.https.html23
146 files changed, 2397 insertions, 794 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini
deleted file mode 100644
index f29da48a2a0..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-003.html]
- [Miss float below something else]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini
index f8e7e539aae..4a1e8110f6f 100644
--- a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini
@@ -2,6 +2,3 @@
[Hit test intersecting scaled box]
expected: FAIL
- [Hit test within unscaled box]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini
new file mode 100644
index 00000000000..e38782d8c85
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini
@@ -0,0 +1,4 @@
+[elementFromPoint-001.html]
+ [CSSOM View - 5 - extensions to the Document interface]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
index 23c61ede1a1..c131078eace 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
@@ -17,6 +17,3 @@
[test the top of layer]
expected: FAIL
- [test some point of the element: top left corner]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
new file mode 100644
index 00000000000..e181af5397f
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
@@ -0,0 +1,4 @@
+[elementsFromPoint-invalid-cases.html]
+ [The root element is the last element returned for otherwise empty queries within the viewport]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
index b46b01e499c..a08d89ae8c0 100644
--- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
@@ -315,24 +315,24 @@
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: combined response Content-Type: */* text/html]
+ [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html */*]
+ [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ [<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
+ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
+ [<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
+ [<iframe>: separate response Content-Type: text/plain ]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
index 8d0261f22a0..c7413d589dc 100644
--- a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
@@ -56,6 +56,9 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript; charset=windows-1252 text/javascript]
+ [separate text/javascript;charset=windows-1252 error text/javascript]
+ expected: FAIL
+
+ [separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
index 1d1d4af041d..30e1b851fd4 100644
--- a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -8,9 +8,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
- [X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
- expected: FAIL
-
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+ [Multiple history traversals from the same task]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
index 75d75b4cda2..dc2e45516de 100644
--- a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_2.html]
+[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
index af14e19a466..f45aaafe1c5 100644
--- a/tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
@@ -1,20 +1,16 @@
[supported-elements.html]
- expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
[Host element with delegatesFocus including no focusable descendants should be skipped]
- expected: NOTRUN
+ expected: FAIL
[Element with tabindex should support autofocus]
- expected: TIMEOUT
+ expected: FAIL
[Area element should support autofocus]
- expected: NOTRUN
+ expected: FAIL
[Host element with delegatesFocus should support autofocus]
- expected: NOTRUN
-
- [Non-HTMLElement should not support autofocus]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
index 42ebcc9d57e..88f4ddd0e9a 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
@@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-1.html]
- expected: TIMEOUT
+ expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
index daa518bd0e3..c6f45be1eb2 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
@@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html]
- expected: CRASH
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index 338d283eb0e..295031c1812 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,4 +1,5 @@
[iframe_sandbox_popups_escaping-3.html]
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index f4f994c5d6f..7a36937927c 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-3.html]
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini
new file mode 100644
index 00000000000..6d133b8ec69
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini
@@ -0,0 +1,4 @@
+[input-pattern-dynamic-value.html]
+ [input validation is updated after pattern attribute change]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini
deleted file mode 100644
index bcd2fd0eab8..00000000000
--- a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[077.html]
- [ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini
new file mode 100644
index 00000000000..425ded6efb7
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini
@@ -0,0 +1,19 @@
+[readwrite-readonly.html]
+ [The :read-write pseudo-class must not match input elements to which the readonly attribute does not apply]
+ expected: FAIL
+
+ [The :read-only pseudo-class must match input elements to which the readonly attribute does not apply]
+ expected: FAIL
+
+ [The :read-only pseudo-class must not match elements that are editable]
+ expected: FAIL
+
+ [The :read-only pseudo-class must not match elements that are editing hosts]
+ expected: FAIL
+
+ [The :read-write pseudo-class must match elements that are editing hosts]
+ expected: FAIL
+
+ [The :read-write pseudo-class must match elements that are editable]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini b/tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini
index f565058ace3..7c4fb302585 100644
--- a/tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini
+++ b/tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini
@@ -32,3 +32,21 @@
[Parsing: <file://xn--/p> against <about:blank>]
expected: FAIL
+ [Parsing: <http://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a^b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a^b> against <about:blank>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/url/a-element.html.ini b/tests/wpt/metadata-layout-2020/url/a-element.html.ini
index 557fc46d3c9..a2237c8fdef 100644
--- a/tests/wpt/metadata-layout-2020/url/a-element.html.ini
+++ b/tests/wpt/metadata-layout-2020/url/a-element.html.ini
@@ -32,3 +32,21 @@
[Parsing: <file://xn--/p> against <about:blank>]
expected: FAIL
+ [Parsing: <http://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a^b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a^b> against <about:blank>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/url/failure.html.ini b/tests/wpt/metadata-layout-2020/url/failure.html.ini
index d49972a78db..a4eb6b655e7 100644
--- a/tests/wpt/metadata-layout-2020/url/failure.html.ini
+++ b/tests/wpt/metadata-layout-2020/url/failure.html.ini
@@ -161,3 +161,93 @@
[Location's href: \\\\\\.\\Y: should throw]
expected: FAIL
+ [XHR: http://a>b should throw]
+ expected: FAIL
+
+ [Location's href: non-special://a>b should throw]
+ expected: FAIL
+
+ [Location's href: non-special://a^b should throw]
+ expected: FAIL
+
+ [URL's href: http://a<b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: non-special://a^b should throw]
+ expected: FAIL
+
+ [URL's href: http://a>b should throw]
+ expected: FAIL
+
+ [window.open(): http://a<b should throw]
+ expected: FAIL
+
+ [URL's href: non-special://a^b should throw]
+ expected: FAIL
+
+ [window.open(): non-special://a^b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: non-special://a>b should throw]
+ expected: FAIL
+
+ [XHR: http://a^b should throw]
+ expected: FAIL
+
+ [URL's href: non-special://a<b should throw]
+ expected: FAIL
+
+ [window.open(): http://a>b should throw]
+ expected: FAIL
+
+ [window.open(): non-special://a<b should throw]
+ expected: FAIL
+
+ [XHR: non-special://a>b should throw]
+ expected: FAIL
+
+ [XHR: non-special://a<b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: http://a>b should throw]
+ expected: FAIL
+
+ [Location's href: http://a<b should throw]
+ expected: FAIL
+
+ [XHR: non-special://a^b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: non-special://a<b should throw]
+ expected: FAIL
+
+ [window.open(): http://a^b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: http://a<b should throw]
+ expected: FAIL
+
+ [Location's href: http://a>b should throw]
+ expected: FAIL
+
+ [URL's href: http://a^b should throw]
+ expected: FAIL
+
+ [XHR: http://a<b should throw]
+ expected: FAIL
+
+ [Location's href: http://a^b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: http://a^b should throw]
+ expected: FAIL
+
+ [URL's href: non-special://a>b should throw]
+ expected: FAIL
+
+ [Location's href: non-special://a<b should throw]
+ expected: FAIL
+
+ [window.open(): non-special://a>b should throw]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/url/url-constructor.html.ini b/tests/wpt/metadata-layout-2020/url/url-constructor.html.ini
index 59eadbede84..32594acfcb0 100644
--- a/tests/wpt/metadata-layout-2020/url/url-constructor.html.ini
+++ b/tests/wpt/metadata-layout-2020/url/url-constructor.html.ini
@@ -32,3 +32,21 @@
[Parsing: <file://xn--/p> against <about:blank>]
expected: FAIL
+ [Parsing: <http://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a^b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a^b> against <about:blank>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/webdriver/tests/perform_actions/pointer_tripleclick.py.ini b/tests/wpt/metadata-layout-2020/webdriver/tests/perform_actions/pointer_tripleclick.py.ini
new file mode 100644
index 00000000000..83557144ecb
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/webdriver/tests/perform_actions/pointer_tripleclick.py.ini
@@ -0,0 +1,4 @@
+[pointer_tripleclick.py]
+ [test_tripleclick_at_coordinates]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini b/tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini
index 10dda3a6659..6d92f8835c6 100644
--- a/tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini
@@ -1,7 +1,8 @@
[shared-worker-in-data-url-context.window.html]
+ expected: TIMEOUT
[Create a shared worker in a data url frame]
- expected: FAIL
+ expected: TIMEOUT
[Create a data url shared worker in a data url frame]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 801d3a0d464..e4a11d75e8b 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -10,6 +10,13 @@
null,
{}
]
+ ],
+ "line-pushed-by-floats-crash.html": [
+ "ace28cc71c826eacc7bc5c624a8d45cd59198ba9",
+ [
+ null,
+ {}
+ ]
]
},
"floats-clear": {
@@ -2053,50 +2060,6 @@
]
},
"clipboard-apis": {
- "async-write-blobs-read-blobs-manual.https.html": [
- "f53d7f9c36e2b26082d180de227dd1675ca769dc",
- [
- null,
- {}
- ]
- ],
- "async-write-image-read-image-manual.https.html": [
- "71d14984953974a66f769edf9a3566fe526cdb6f",
- [
- null,
- {}
- ]
- ],
- "detached-iframe": {
- "read-on-detaching-iframe-manual.https.html": [
- "8361ceff125c69c4b7f79e8dec4e648deeac4f32",
- [
- null,
- {}
- ]
- ],
- "write-on-detaching-iframe-manual.https.html": [
- "4a3dbd7dc327fcee6b8305b9a837b80d933b0fa7",
- [
- null,
- {}
- ]
- ],
- "write-read-on-detached-iframe-manual.https.html": [
- "af12ff8d880df8f7e8fb72f10bb12ad6acff0060",
- [
- null,
- {}
- ]
- ],
- "writeText-readText-on-detached-iframe-manual.https.html": [
- "c2d8be1ace2528242eb015b37c9da0e11895e857",
- [
- null,
- {}
- ]
- ]
- },
"events": {
"copy-event-manual.html": [
"9f9f1950e7cad11da8cc9e8984f130e182d64d64",
@@ -2119,36 +2082,6 @@
{}
]
]
- },
- "text-write-read": {
- "async-write-read-manual.https.html": [
- "14488b1e71666089981430538596040accb704d0",
- [
- null,
- {}
- ]
- ],
- "async-write-readText-manual.https.html": [
- "c76df06a8b0216b7ae6d1c3944d3b063fb694b4f",
- [
- null,
- {}
- ]
- ],
- "async-writeText-read-manual.https.html": [
- "e74726ec5e7f3d37572fd247e85acd91db6e9d77",
- [
- null,
- {}
- ]
- ],
- "async-writeText-readText-manual.https.html": [
- "d2c43f0b6f20ad516e4058fe51fc8a0d6aa14d4c",
- [
- null,
- {}
- ]
- ]
}
},
"console": {
@@ -229075,7 +229008,7 @@
]
],
"drawImage-from-blob.tentative.html": [
- "633f7e4f7e3e8b5e36129f54fe7a0fb46642144a",
+ "e84fce715f12715adcd85129155cd1c22c4fbd48",
[
null,
[
@@ -229140,7 +229073,7 @@
]
],
"drawImage-with-src-rect.tentative.html": [
- "260f96e5cac13e800762ce55db08e36838f85abc",
+ "47d1f8b431b0072b8615ce85ca631a3bd5864698",
[
null,
[
@@ -245506,7 +245439,7 @@
[]
],
"accept-ch-feature-policy-navigation.https.html.headers": [
- "f9595a794d9c93dca09f371f5797399a9204ed53",
+ "1fa9c5cb80064e928b9288ada154ac3c3ccdcd3e",
[]
],
"accept-ch-feature-policy.sub.https.html.headers": [
@@ -245543,8 +245476,16 @@
"835ef396b8bae0294088bc0231422c8c0f446a45",
[]
],
+ "accept-ch-blank.html": [
+ "8a2e40ad9003058e71289f994ee51430246734d6",
+ []
+ ],
+ "accept-ch-blank.html.headers": [
+ "25215abdf7376ede28190981f543ae339552284d",
+ []
+ ],
"accept-ch-test.js": [
- "5275057c3e5b4b8b4eeee81942b8bdfefa79233e",
+ "879745706c01af6744abf3d0a641380dea4645d5",
[]
],
"accept-ch.html": [
@@ -245598,9 +245539,21 @@
"http-equiv-accept-ch.html.headers": [
"27140bf36e4dbd22b8f7190587f42a570c9d12bd",
[]
+ ],
+ "no-accept-ch.html": [
+ "16ed6c1a7cb1812559108c0369da2eaa63580984",
+ []
+ ],
+ "no-accept-ch.html.headers": [
+ "cb762eff806849df46dc758ef7b98b63f27f54c9",
+ []
]
}
},
+ "http-equiv-accept-ch-merge.https.html.headers": [
+ "8759b65606b192b0dcb73cfd465de8529a159ba0",
+ []
+ ],
"resources": {
"accept-ch-different.html": [
"05cc0b61b07c36fca5816e277df1dc98e70d9ba1",
@@ -245635,7 +245588,7 @@
[]
],
"expect-client-hints-headers-iframe.py": [
- "e72d77c47d9aae36c619e8e065e5685f7a9c166b",
+ "25c2b2f765ddb32c11d2c6a7645e4078b23ffce8",
[]
],
"expect-client-hints-headers.html": [
@@ -246105,19 +246058,21 @@
"19a0bfaed3f0aa1b498c275ac43100dbcb23010b",
[]
],
- "pako": {
- "LICENSE": [
- "a934ef8db478453e38b2f29af67610916fa9fc99",
- []
- ],
- "README": [
- "96028388ebb9d556db918bbe234e8b971734824a",
- []
- ],
- "pako_inflate.min.js": [
- "a191a78a8956cddf28adaf7542631123014a04bf",
- []
- ]
+ "third_party": {
+ "pako": {
+ "LICENSE": [
+ "a934ef8db478453e38b2f29af67610916fa9fc99",
+ []
+ ],
+ "README": [
+ "96028388ebb9d556db918bbe234e8b971734824a",
+ []
+ ],
+ "pako_inflate.min.js": [
+ "a191a78a8956cddf28adaf7542631123014a04bf",
+ []
+ ]
+ }
}
},
"conformance-checkers": {
@@ -283768,7 +283723,7 @@
[]
],
"available-002a.xht": [
- "ff9f51083ff78d5b457be2869c8c0cfe03663db0",
+ "e66aa54160fab42961ff320ad7a380ec12d4c8e2",
[]
],
"available-002b.xht": [
@@ -318531,7 +318486,7 @@
[]
],
"event-timing-test-utils.js": [
- "9f4a81714f71b554fdc7bda19405fe2efd4b3376",
+ "e2a69b5c5b49a17f93ccc22937f7f33b45848c24",
[]
],
"slow-image.py": [
@@ -322479,7 +322434,7 @@
[]
],
"drawImage-from-blob-ref.html": [
- "d1d3554c70a8a2fa30768f665fa7f2ca88f270e8",
+ "2bd6037835406fb2ecb2f3efdade315aa802ac64",
[]
],
"drawImage-from-element-orientation-none-ref.html": [
@@ -322499,7 +322454,7 @@
[]
],
"drawImage-with-src-rect-ref.html": [
- "d59dd2d9fd77a83ec02f87edd1aca2b7d1717604",
+ "19ffcc39c96aecdd212a9f8ca4023e62c91dff2b",
[]
]
}
@@ -323270,7 +323225,7 @@
[]
],
"templates.yaml": [
- "be8039b03f9d0222f4bfff6b4db531360a62303b",
+ "6b02200362e3413fc5a2a0b5fbbbf3737347d345",
[]
],
"tests.yaml": [
@@ -323358,7 +323313,7 @@
],
"resources": {
"blob-url-factory.html": [
- "7d90aacd8bbf207b25405bea8f2e9f0263570392",
+ "d2039064a8df63021b7c76f9eef5a619de32377d",
[]
],
"blob-url-factory.html.headers": [
@@ -323458,7 +323413,7 @@
[]
],
"script-factory.js": [
- "ab7286e57ac18ca4b34f6c6d75d17b6d9198f7c0",
+ "ac7a1fda06f6237973264abf6f2b1b62e746e6ab",
[]
],
"sw-store-to-cache-storage.js": [
@@ -333446,7 +333401,7 @@
[]
],
"web-share.idl": [
- "a29107f05987369128593b9fb2bd3bb13017eae0",
+ "c29a29d0b4ede94153a75860344ab4824e91b6d5",
[]
],
"webaudio.idl": [
@@ -333454,7 +333409,7 @@
[]
],
"webauthn.idl": [
- "73c96c87b91456199b5beb103ff89ae93b513738",
+ "a1d46a37cf44d7d9b8cd80b11a92b2d2f78602ef",
[]
],
"webdriver.idl": [
@@ -333486,7 +333441,7 @@
[]
],
"webrtc.idl": [
- "852ec06209ea13a0a618d32ff836624b92d65642",
+ "efb21f4a0cc55c336c0c145298d463d0263aa575",
[]
],
"webusb.idl": [
@@ -333920,11 +333875,11 @@
[]
],
"mo-form-minus-plus-ref.html": [
- "f83033373042444e28c26fc03c5f4acf38da131c",
+ "b46b307dbe3aea0fbab44de12278041e538ea3e5",
[]
],
"mo-form-ref.html": [
- "d48bd48a6e4a492e7fc31ae83d016cd12b9c8d56",
+ "608ad4bbadedf0cd1f7a848493add9636efac275",
[]
],
"mo-lspace-rspace-dynamic-ref.html": [
@@ -343415,11 +343370,11 @@
[]
],
"lint.py": [
- "74b3c8cf9301a9d5ee3f0356a8a5604eea41fa3c",
+ "6a5359bfb8a87728068fee64a69ba1de0c62e94d",
[]
],
"rules.py": [
- "6fbdc1c360dddc498a30a797eed029abee133a69",
+ "695f6cd4e5328caf2f085a115d31a9c0b4ae2712",
[]
],
"tests": {
@@ -343585,6 +343540,30 @@
]
},
"tests": {
+ "dir1": {
+ "a.html": [
+ "f412593b045ef475e0af5e5853de8ff58bcd7244",
+ []
+ ],
+ "a.js": [
+ "a855dab6a77cb28103cc158ff0f9ccde96b52595",
+ []
+ ],
+ "a.xhtml": [
+ "c8b4cc2e5223a86255efb531a4d5a4430f951b15",
+ []
+ ],
+ "b.html": [
+ "f412593b045ef475e0af5e5853de8ff58bcd7244",
+ []
+ ]
+ },
+ "dir2": {
+ "a.xhtml": [
+ "c8b4cc2e5223a86255efb531a4d5a4430f951b15",
+ []
+ ]
+ },
"relative-testharness-manual.html": [
"15693b990c1d5165aa510373d5c6955e0661b8a0",
[]
@@ -343596,7 +343575,7 @@
[]
],
"test_lint.py": [
- "43da2f9ff21904868431533eaae846a403b7379a",
+ "10d9728b405751bdb28db5e0193162ec7f6df486",
[]
],
"test_path_lints.py": [
@@ -350581,7 +350560,7 @@
[]
],
"urltestdata.json": [
- "dd40eaa5a9f179d6904776e619d6e7f618b2ebf4",
+ "1ed95583c12f3d1316e29857aa016e3a0e51a7f4",
[]
]
}
@@ -352258,7 +352237,7 @@
[]
],
"RTCPeerConnection-helper.js": [
- "29145c8b927dd0df3ec35b40c49d8ded2afaa559",
+ "679cb85b12adfa98d3fdbedf6abb6d68a687bb47",
[]
],
"RTCRtpCapabilities-helper.js": [
@@ -352311,7 +352290,7 @@
},
"simulcast": {
"simulcast.js": [
- "d8911f443e7521ed66be8f4e6079bb4318aada37",
+ "af804c03e865ae1be94cdc1045f359b30034590a",
[]
]
},
@@ -372390,7 +372369,7 @@
]
],
"accept-ch-feature-policy-navigation.https.html": [
- "dff960d28709ae6888f0da0b221e93c7b160e7e6",
+ "d217a16509eedac1a861956859c1527bf3baebc1",
[
null,
{}
@@ -372411,7 +372390,7 @@
]
],
"accept-ch-no-feature-policy-navigation.https.html": [
- "5fb6c22f50873ce597e6d5ed04c1ebeef64a17c1",
+ "13a37633eda8fd5375a917d996b4566971c08798",
[
null,
{}
@@ -372539,7 +372518,25 @@
]
],
"same-origin-iframe.https.html": [
- "25e29017f403816e0917979a7c4886ac28f65fc4",
+ "c7680945443e7477d6c9533cbe8012783a0a91a5",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "same-origin-navigation-empty-accept-ch.https.html": [
+ "e57f1c3dc6f707d2b531702d076852ef12c7f999",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "same-origin-navigation-no-accept-ch.https.html": [
+ "ab597701766fa802f0b7b3dc43c71d91b180777e",
[
null,
{
@@ -372591,6 +372588,13 @@
{}
]
],
+ "http-equiv-accept-ch-merge.https.html": [
+ "177a836557607569a865dfb25ca5a224be8878a0",
+ [
+ null,
+ {}
+ ]
+ ],
"http-equiv-accept-ch-non-secure.http.html": [
"909ab5f5f2a563348da0d0bb3377961f1015d031",
[
@@ -372655,6 +372659,24 @@
}
]
],
+ "async-write-blobs-read-blobs.https.html": [
+ "f9bf38d5d581dbb63be4139e7294374b0876051f",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "async-write-image-read-image.https.html": [
+ "881b8ababb2588b806bc121d0f9e95623766b4e8",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"clipboard-events-synthetic.html": [
"878682975266a3154756361a4e5d87c47482e393",
[
@@ -372676,6 +372698,80 @@
null,
{}
]
+ ],
+ "read-on-detaching-iframe.https.html": [
+ "8022f0e269c4f28142e80366bdcbd6c2d1d231d2",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "write-on-detaching-iframe.https.html": [
+ "0ed1098bcad03785e4917c1d7ad18c302136bdba",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "write-read-on-detached-iframe.https.html": [
+ "1859c4bd11b44582f66e3f5d55a42002fdba5bd4",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "writeText-readText-on-detached-iframe.https.html": [
+ "40854ccc7a31503f0b3b9b50ab4222d8b96fa79b",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ]
+ },
+ "text-write-read": {
+ "async-write-read.https.html": [
+ "1d170f2fa4a7a4a96c3615d41a3290ab0123fba7",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "async-write-readText.https.html": [
+ "3fe05a53742add1c8975faf72901a2ea3a6cba4a",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "async-writeText-read.https.html": [
+ "6745d7cdb67ba9c0123bbefe9dc86da4d37bcd79",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "async-writeText-readText.https.html": [
+ "f9fbdff879c18dad7502a37a1f8b87c07ec9193a",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
]
}
},
@@ -372804,7 +372900,7 @@
]
],
"compression-including-empty-chunk.tentative.any.js": [
- "61fe76959c972fce04af056f2e519f0bb7e21867",
+ "916118ea89376997dcc6f79b17cdbaf2cc136dee",
[
"compression/compression-including-empty-chunk.tentative.any.html",
{
@@ -372815,7 +372911,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -372835,7 +372931,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -372855,7 +372951,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -372875,7 +372971,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -372887,7 +372983,7 @@
]
],
"compression-multiple-chunks.tentative.any.js": [
- "eeb83869512ac7796e36d9dcdf285f529fb1986a",
+ "db1ab92a2b4cfbebaf08ff85b290f50e82f2873c",
[
"compression/compression-multiple-chunks.tentative.any.html",
{
@@ -372898,7 +372994,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -372918,7 +373014,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -372938,7 +373034,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -372958,7 +373054,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -373017,7 +373113,7 @@
]
],
"compression-stream.tentative.any.js": [
- "c63e377abbffe8e48620437f3487a45d1b27b5f6",
+ "8c02a6d699a6d2225131d75b87ea2c68e9d50c7d",
[
"compression/compression-stream.tentative.any.html",
{
@@ -373028,7 +373124,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -373048,7 +373144,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -373068,7 +373164,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -373088,7 +373184,7 @@
],
[
"script",
- "pako/pako_inflate.min.js"
+ "third_party/pako/pako_inflate.min.js"
],
[
"timeout",
@@ -386682,6 +386778,13 @@
{}
]
],
+ "grid-minimum-contribution-with-percentages.html": [
+ "146956c2959677eac24dfebee1b9034be0a25ccc",
+ [
+ null,
+ {}
+ ]
+ ],
"grid-percentage-rows-indefinite-height-001.html": [
"c0be13ead81d14acb8a976a022b745a61bb1be2c",
[
@@ -390427,6 +390530,20 @@
{}
]
],
+ "ruby-merge-invalid.html": [
+ "b618bcb5da23545cbde6d52fbfbd1e9251983e6e",
+ [
+ null,
+ {}
+ ]
+ ],
+ "ruby-merge-valid.html": [
+ "5694e87dff34647ea174a8aa4934c0bb99169663",
+ [
+ null,
+ {}
+ ]
+ ],
"ruby-position-invalid.html": [
"907c7deee31153e78f30eedfb645f6905495846f",
[
@@ -390726,6 +390843,13 @@
{}
]
],
+ "focus-prioritized.html": [
+ "36e3c7644a715486f027ac7d0dfb444d9b7ea5dd",
+ [
+ null,
+ {}
+ ]
+ ],
"fragment-scrolling-anchors.html": [
"74b633be987ac6a2dd63ebab3ddb427836f78b7a",
[
@@ -399653,7 +399777,7 @@
]
],
"outline-offset-computed.html": [
- "3ba35217ce1905b2e99f1a3055b169e46d4a9af3",
+ "39da9f73492acbc02d3c5299d9a2c5b076650512",
[
null,
{}
@@ -406140,15 +406264,15 @@
{}
]
],
- "Document-createCDATASection.html": [
- "72b3684c751c72b37b304d81ab38b932287714c4",
+ "Document-createCDATASection-xhtml.xhtml": [
+ "b0a5a7f2843bbc78499598597abb91b01bc38db1",
[
null,
{}
]
],
- "Document-createCDATASection.xhtml": [
- "b0a5a7f2843bbc78499598597abb91b01bc38db1",
+ "Document-createCDATASection.html": [
+ "72b3684c751c72b37b304d81ab38b932287714c4",
[
null,
{}
@@ -420915,7 +421039,7 @@
},
"event-timing": {
"auxclick.html": [
- "f0d8326b1307f9e30f444d725bdbdb614a1b2003",
+ "b88328e2aa36715e8165c6eb277be49f7d189655",
[
null,
{
@@ -420950,6 +421074,24 @@
}
]
],
+ "click.html": [
+ "e3eecabdf1878c8f0f7775b0b0d587ca90909fe7",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "contextmenu.html": [
+ "9aa05a3b1639e39dc66fbde83f1610affef4759e",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"crossiframe.html": [
"dfbd2897ad4bb5bfd4edeb2cdc17afc438e37962",
[
@@ -420960,6 +421102,15 @@
}
]
],
+ "dblclick.html": [
+ "d33fcfd30de051ae7227e843f27e2b27e017c951",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"disconnect-target.html": [
"b395cd4181b76cbb829fd91fc49162aeb5630679",
[
@@ -421111,6 +421262,60 @@
}
]
],
+ "mousedown.html": [
+ "e0f14f4c67db689e1868d8daf18ceafe943ab1f2",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "mouseenter.html": [
+ "804d5743742c73ec769613e41ce45bf190a473a9",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "mouseleave.html": [
+ "202cf73e2a616c5612232a7e1f987570eed9e2e3",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "mouseout.html": [
+ "dd321934b0b784280a5ed520b70d0bc0bb5c1839",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "mouseover.html": [
+ "741ee2d7ecd7fb938d2d4fe24ad6ca0056507b0f",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "mouseup.html": [
+ "653bef8fdb2f02536ce687491b9511aad94fb03d",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"only-observe-firstInput.html": [
"54a6036f91adb89c7b6528e40850937d70520b77",
[
@@ -421120,6 +421325,60 @@
}
]
],
+ "pointerdown.html": [
+ "3d7dcbe8cac2c72a98573275446dbe9d142cfc2d",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerenter.html": [
+ "bae1c51d51cde4d2314e310693328fd26dbd8be3",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerleave.html": [
+ "81e8f15ec0d16a53182f06e7f9553228cc0ab7ec",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerout.html": [
+ "b08f57699cc48d82350fabbe3be2589c2bb2c1f0",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerover.html": [
+ "0e1712239c095838a565cee8874cc3b5221948d1",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "pointerup.html": [
+ "4324a5beb7ab32c3f7baee699af3970901f7ae52",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"programmatic-click-not-observed.html": [
"4060d2d00dc1c0210854317bce5bbc5bc25fff57",
[
@@ -446362,7 +446621,7 @@
]
],
"coep-frame-javascript.https.html": [
- "d3e090bd7f7b08bbb75ec8541a1981d928a28e37",
+ "089019dc2e2585dfe4c62d7ea3f323c5aec7085b",
[
null,
{}
@@ -446376,7 +446635,7 @@
]
],
"data.https.html": [
- "c34f1336c8bd22aadd0e867b8fcced598a1c4786",
+ "13c0cce1858ceb8db2d9df515aaec200f653582f",
[
null,
{}
@@ -446397,7 +446656,7 @@
]
],
"javascript.https.html": [
- "9fe85db76f54507b1c80b9f7077a916b8795f0f9",
+ "60edf00312dd46efcb8d542bdccb1f669181efca",
[
null,
{}
@@ -446463,6 +446722,13 @@
}
]
],
+ "reporting-navigation.https.html": [
+ "503e52110bdb87387a7c800370f89c73469c9483",
+ [
+ null,
+ {}
+ ]
+ ],
"reporting-subresource-corp.https.html": [
"aa76bbe8d21d259ed0b9dcadb1d942635134ac79",
[
@@ -446547,7 +446813,7 @@
]
],
"srcdoc.https.html": [
- "3fbba961b2736ed8c9fb973d61dfac5e54267c40",
+ "2937c13381059a3609d431908afe15d1a21262f7",
[
null,
{}
@@ -446563,7 +446829,7 @@
]
],
"coep-blob-popup.https.html": [
- "c317f6bdf9baa9311abb93fe3a1fd174bb824b3b",
+ "eb74bab3e5c4e93fd1dedf4b1db4547b334499b7",
[
null,
{}
@@ -454881,6 +455147,13 @@
{}
]
],
+ "input-pattern-dynamic-value.html": [
+ "58e566c7386eb9e3ba05fc5881eacd8244cfd6d4",
+ [
+ null,
+ {}
+ ]
+ ],
"inputwillvalidate.html": [
"909fd889bbb0b41d218cc2d8e8c9ad4cbf102189",
[
@@ -459803,7 +460076,7 @@
]
],
"readwrite-readonly.html": [
- "d9bbadbe6174f47e4603b25c50d4144608c9f6e2",
+ "fc112f3ceb39cff15a1eb3d60c5551d6f9f8c587",
[
null,
{}
@@ -487788,6 +488061,13 @@
{}
]
],
+ "element-based-offset-clamp.html": [
+ "514eba09c78468f351cae4b38543389f7f33feb0",
+ [
+ null,
+ {}
+ ]
+ ],
"element-based-offset.html": [
"064ab4c5f3ae43c4ea4476997a85c3836a1419ee",
[
@@ -489621,10 +489901,12 @@
]
],
"idlharness-sw.https.html": [
- "33fd35b3adb47c0528939d6c81dd685ea3258dec",
+ "5209cc6702e147c023032398211a365874162227",
[
null,
- {}
+ {
+ "timeout": "long"
+ }
]
],
"idlharness-window.https.html": [
@@ -507248,7 +507530,7 @@
]
],
"getAnimations.html": [
- "37465540d26e4e0c9191b0eefe5a7bde58146f9c",
+ "fd8719299dbc0d2233f8f16bc08cfa3c20684746",
[
null,
{}
@@ -512002,7 +512284,7 @@
]
],
"RTCPeerConnection-addTransceiver.https.html": [
- "bc537c26867fe699388a7ba287606b007ab41afc",
+ "68a2623391b5fa511ed80d272245f860fbaeac8c",
[
null,
{}
@@ -512113,7 +512395,7 @@
]
],
"RTCPeerConnection-ondatachannel.html": [
- "2fd33ca541148ca6a7be5f5624e303795c7c458d",
+ "8ba98414cbb179696523116673d29bc8e436e704",
[
null,
{}
@@ -512347,7 +512629,7 @@
]
],
"RTCRtpParameters-encodings.html": [
- "00e80885cff30c7bae8c94ebf8fd3ac37e26603a",
+ "539b2692806934254c4ec4b8d8bb14ef1296207d",
[
null,
{}
@@ -512759,6 +513041,24 @@
"timeout": "long"
}
]
+ ],
+ "h264.https.html": [
+ "89e18bcd51cf029b4f9528164e6b90306f210526",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "vp8.https.html": [
+ "e3567e61c21d1b68e549fc8b045b48ea9b07ecc5",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
]
}
},
@@ -512844,6 +513144,22 @@
]
]
},
+ "webrtc-priority": {
+ "RTCPeerConnection-ondatachannel.html": [
+ "b153c3adac502f48d40610ba7178bb25faa103ee",
+ [
+ null,
+ {}
+ ]
+ ],
+ "RTCRtpParameters-encodings.html": [
+ "37c1b919b417fa03b2c9566839b529a3c0aae07c",
+ [
+ null,
+ {}
+ ]
+ ]
+ },
"webrtc-quic": {
"RTCQuicStream.https.html": [
"e99914ad40387316e82ed32ed4626888f1011e43",
@@ -548957,6 +549273,13 @@
{}
]
],
+ "pointer_tripleclick.py": [
+ "28eaf29f737ae5ca2530adf007b8d028215f9855",
+ [
+ null,
+ {}
+ ]
+ ],
"sequence.py": [
"3536abeb12bcf667e4b6eab2cb723baa10c9ffa7",
[
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini
deleted file mode 100644
index f29da48a2a0..00000000000
--- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-003.html]
- [Miss float below something else]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
index f8e7e539aae..4a1e8110f6f 100644
--- a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
@@ -2,6 +2,3 @@
[Hit test intersecting scaled box]
expected: FAIL
- [Hit test within unscaled box]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
new file mode 100644
index 00000000000..e38782d8c85
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
@@ -0,0 +1,4 @@
+[elementFromPoint-001.html]
+ [CSSOM View - 5 - extensions to the Document interface]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
index 5733d536fd3..85e94926cb3 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
@@ -21,6 +21,3 @@
[test the top of layer]
expected: FAIL
- [test some point of the element: top left corner]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
new file mode 100644
index 00000000000..e181af5397f
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
@@ -0,0 +1,4 @@
+[elementsFromPoint-invalid-cases.html]
+ [The root element is the last element returned for otherwise empty queries within the viewport]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index 08a0e7271d7..2bdf0b54a2c 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -315,24 +315,24 @@
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: combined response Content-Type: */* text/html]
+ [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html */*]
+ [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ [<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
+ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
+ [<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
+ [<iframe>: separate response Content-Type: text/plain ]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index 8d0261f22a0..c7413d589dc 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,6 +56,9 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript; charset=windows-1252 text/javascript]
+ [separate text/javascript;charset=windows-1252 error text/javascript]
+ expected: FAIL
+
+ [separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index 1d1d4af041d..30e1b851fd4 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -8,9 +8,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
- [X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
- expected: FAIL
-
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+ [Multiple history traversals from the same task]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
index 75d75b4cda2..dc2e45516de 100644
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_2.html]
+[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
index 8b743f36e1d..6b68e9094e4 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,20 +1,16 @@
[supported-elements.html]
- expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
[Element with tabindex should support autofocus]
- expected: TIMEOUT
+ expected: FAIL
[Host element with delegatesFocus including no focusable descendants should be skipped]
- expected: NOTRUN
+ expected: FAIL
[Area element should support autofocus]
- expected: NOTRUN
+ expected: FAIL
[Host element with delegatesFocus should support autofocus]
- expected: NOTRUN
-
- [Non-HTMLElement should not support autofocus]
- expected: NOTRUN
+ expected: FAIL
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..2a166bb97b7 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,6 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
- expected: TIMEOUT
+ expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
index daa518bd0e3..c6f45be1eb2 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
@@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html]
- expected: CRASH
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index f6a7aca3306..5f60c78e73c 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,5 +1,6 @@
[iframe_sandbox_popups_escaping-3.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: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index e440b1e38c6..dc856a3d5a3 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.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/forms/constraints/input-pattern-dynamic-value.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini
new file mode 100644
index 00000000000..6d133b8ec69
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini
@@ -0,0 +1,4 @@
+[input-pattern-dynamic-value.html]
+ [input validation is updated after pattern attribute change]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini
deleted file mode 100644
index bcd2fd0eab8..00000000000
--- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[077.html]
- [ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini
index 568d614c625..b8cebc3e4f4 100644
--- a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini
+++ b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini
@@ -1,15 +1,6 @@
[readwrite-readonly.html]
type: testharness
bug: https://github.com/servo/servo/issues/10732
- [The :read-only pseudo-class must not match input elements to which the readonly attribute applies, and that are mutable]
- expected: FAIL
-
- [The :read-only pseudo-class must match input elements after the readonly attribute has been added]
- expected: FAIL
-
- [The :read-only pseudo-class must match input elements after the readonly attribute has been removed]
- expected: FAIL
-
[The :read-write pseudo-class must match elements that are editable]
expected: FAIL
diff --git a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini
index 7754f5c26d8..b84126a1e7a 100644
--- a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini
+++ b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini
@@ -42,3 +42,21 @@
[Parsing: <file://xn--/p> against <about:blank>]
expected: FAIL
+ [Parsing: <http://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a^b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a^b> against <about:blank>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/url/a-element.html.ini b/tests/wpt/metadata/url/a-element.html.ini
index dfe589459e2..f39e7394ed1 100644
--- a/tests/wpt/metadata/url/a-element.html.ini
+++ b/tests/wpt/metadata/url/a-element.html.ini
@@ -42,3 +42,21 @@
[Parsing: <file://xn--/p> against <about:blank>]
expected: FAIL
+ [Parsing: <http://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a^b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a^b> against <about:blank>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/url/failure.html.ini b/tests/wpt/metadata/url/failure.html.ini
index b9e60154b11..83d958ccc64 100644
--- a/tests/wpt/metadata/url/failure.html.ini
+++ b/tests/wpt/metadata/url/failure.html.ini
@@ -165,3 +165,93 @@
[Location's href: \\\\\\.\\Y: should throw]
expected: FAIL
+ [XHR: http://a>b should throw]
+ expected: FAIL
+
+ [Location's href: non-special://a>b should throw]
+ expected: FAIL
+
+ [Location's href: non-special://a^b should throw]
+ expected: FAIL
+
+ [URL's href: http://a<b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: non-special://a^b should throw]
+ expected: FAIL
+
+ [URL's href: http://a>b should throw]
+ expected: FAIL
+
+ [window.open(): http://a<b should throw]
+ expected: FAIL
+
+ [URL's href: non-special://a^b should throw]
+ expected: FAIL
+
+ [window.open(): non-special://a^b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: non-special://a>b should throw]
+ expected: FAIL
+
+ [XHR: http://a^b should throw]
+ expected: FAIL
+
+ [URL's href: non-special://a<b should throw]
+ expected: FAIL
+
+ [window.open(): http://a>b should throw]
+ expected: FAIL
+
+ [window.open(): non-special://a<b should throw]
+ expected: FAIL
+
+ [XHR: non-special://a>b should throw]
+ expected: FAIL
+
+ [XHR: non-special://a<b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: http://a>b should throw]
+ expected: FAIL
+
+ [Location's href: http://a<b should throw]
+ expected: FAIL
+
+ [XHR: non-special://a^b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: non-special://a<b should throw]
+ expected: FAIL
+
+ [window.open(): http://a^b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: http://a<b should throw]
+ expected: FAIL
+
+ [Location's href: http://a>b should throw]
+ expected: FAIL
+
+ [URL's href: http://a^b should throw]
+ expected: FAIL
+
+ [XHR: http://a<b should throw]
+ expected: FAIL
+
+ [Location's href: http://a^b should throw]
+ expected: FAIL
+
+ [URL's constructor's base argument: http://a^b should throw]
+ expected: FAIL
+
+ [URL's href: non-special://a>b should throw]
+ expected: FAIL
+
+ [Location's href: non-special://a<b should throw]
+ expected: FAIL
+
+ [window.open(): non-special://a>b should throw]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/url/url-constructor.html.ini b/tests/wpt/metadata/url/url-constructor.html.ini
index 45b05b4b739..94aba66b81c 100644
--- a/tests/wpt/metadata/url/url-constructor.html.ini
+++ b/tests/wpt/metadata/url/url-constructor.html.ini
@@ -33,3 +33,21 @@
[Parsing: <file://xn--/p> against <about:blank>]
expected: FAIL
+ [Parsing: <http://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a^b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a>b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <non-special://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a<b> against <about:blank>]
+ expected: FAIL
+
+ [Parsing: <http://a^b> against <about:blank>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webdriver/tests/perform_actions/pointer_tripleclick.py.ini b/tests/wpt/metadata/webdriver/tests/perform_actions/pointer_tripleclick.py.ini
new file mode 100644
index 00000000000..83557144ecb
--- /dev/null
+++ b/tests/wpt/metadata/webdriver/tests/perform_actions/pointer_tripleclick.py.ini
@@ -0,0 +1,4 @@
+[pointer_tripleclick.py]
+ [test_tripleclick_at_coordinates]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini b/tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini
index 10dda3a6659..6d92f8835c6 100644
--- a/tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini
+++ b/tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini
@@ -1,7 +1,8 @@
[shared-worker-in-data-url-context.window.html]
+ expected: TIMEOUT
[Create a shared worker in a data url frame]
- expected: FAIL
+ expected: TIMEOUT
[Create a data url shared worker in a data url frame]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html
index dff960d2870..d217a16509e 100644
--- a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html
@@ -8,12 +8,12 @@
(async () => {
await test_frame(
"HTTPS_REMOTE_ORIGIN",
- "device-memory=true&dpr=false&viewport-width=false",
+ "device-memory=true&dpr=false&viewport-width=false&sec-ch-ua=false&sec-ch-ua-mobile=false",
"",
"Client hints loaded on cross-origin iframe request with feature policy.");
await test_frame(
"HTTPS_ORIGIN",
- "device-memory=true&dpr=false&viewport-width=true",
+ "device-memory=true&dpr=false&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=false",
"",
"Client hints loaded on same-origin iframe request with feature policy.");
await test_frame(
@@ -23,7 +23,7 @@
"Iframe trying to set Accept-CH-Lifetime.", "/client-hints/resources/iframe-accept-ch-lifetime.html");
await test_frame(
"HTTPS_REMOTE_ORIGIN",
- "device-memory=true&dpr=false&viewport-width=false",
+ "device-memory=true&dpr=false&viewport-width=false&sec-ch-ua=false&sec-ch-ua-mobile=false",
"",
"Client hints loaded on cross-origin iframe request with feature policy after attempting to set independently.");
})();
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers
index f9595a794d9..1fa9c5cb800 100644
--- a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers
@@ -1,3 +1,3 @@
Accept-CH: Device-Memory, DPR, Viewport-Width
Accept-CH-Lifetime: 1
-Feature-Policy: ch-device-memory *; ch-dpr 'none'; ch-viewport-width 'self'; ch-lang 'none'
+Feature-Policy: ch-device-memory *; ch-dpr 'none'; ch-viewport-width 'self'; ch-lang 'none'; ch-ua 'self'; ch-ua-mobile 'none'
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html
index 5fb6c22f508..13a37633eda 100644
--- a/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html
@@ -8,12 +8,12 @@
(async () => {
await test_frame(
"HTTPS_REMOTE_ORIGIN",
- "device-memory=false&dpr=false&viewport-width=false",
+ "device-memory=false&dpr=false&viewport-width=false&sec-ch-ua=true&sec-ch-ua-mobile=true",
"",
"Client hints not loaded on cross-origin iframe request with no feature policy.");
await test_frame(
"HTTPS_ORIGIN",
- "device-memory=true&dpr=true&viewport-width=true",
+ "device-memory=true&dpr=true&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=true",
"",
"Client hints loaded on same-origin iframe request with no feature policy.");
})();
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html
new file mode 100644
index 00000000000..8a2e40ad900
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html
@@ -0,0 +1,11 @@
+<html>
+<body>
+
+<!-- Page with an empty accept-ch header, which disables client hints -->
+<script>
+ window.top.opener.postMessage('Loaded', '*');
+</script>
+
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html.headers
new file mode 100644
index 00000000000..25215abdf73
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html.headers
@@ -0,0 +1,2 @@
+Accept-CH:
+Access-Control-Allow-Origin: *
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js
index 5275057c3e5..879745706c0 100644
--- a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js
@@ -1,5 +1,7 @@
const echo = "/client-hints/accept-ch-stickiness/resources/echo-client-hints-received.py";
const accept = "/client-hints/accept-ch-stickiness/resources/accept-ch.html";
+const accept_blank = "/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html";
+const no_accept = "/client-hints/accept-ch-stickiness/resources/no-accept-ch.html";
const httpequiv_accept = "/client-hints/accept-ch-stickiness/resources/http-equiv-accept-ch.html";
const expect = "/client-hints/accept-ch-stickiness/resources/expect-client-hints-headers.html"
const do_not_expect = "/client-hints/accept-ch-stickiness/resources/do-not-expect-client-hints-headers.html"
@@ -49,30 +51,26 @@ function verify_subresource_state(expect_url, test_name) {
});
}, test_name + " got client hints according to expectations.");
}
-const run_test = test => {
- // First, verify the initial state to make sure that the browser does not have
- // client hints preferences cached from a previous run of the test.
- verify_initial_state(test.initial_url, test.name);
- // Then, attempt to set Accept-CH
+function attempt_set(test_type, accept_url, test_name, test_name_suffix) {
promise_test(t => {
return new Promise(resolve => {
- if (test.type == "navigation") {
- const win = window.open(test.accept_url);
+ if (test_type == "navigation") {
+ const win = window.open(accept_url);
assert_not_equals(win, null, "Popup windows not allowed?");
addEventListener('message', t.step_func(() => {
win.close();
resolve();
}), false);
- } else if (test.type == "iframe") {
+ } else if (test_type == "iframe") {
const iframe = document.createElement("iframe");
iframe.addEventListener('load', t.step_func(() => {
resolve();
}), false);
- iframe.src = test.accept_url;
+ iframe.src = accept_url;
document.body.appendChild(iframe);
- } else if (test.type == "subresource") {
- fetch(test.accept_url).then(r => {
+ } else if (test_type == "subresource") {
+ fetch(accept_url).then(r => {
assert_equals(r.status, 200, "subresource response status")
// Verify that the browser did not include client hints in the request
// headers, just because we can..
@@ -85,7 +83,16 @@ const run_test = test => {
assert_unreached("unknown test type");
}
});
- }, test.name + " set Accept-CH");
+ }, test_name + " set Accept-CH" + test_name_suffix);
+}
+
+const run_test = test => {
+ // First, verify the initial state to make sure that the browser does not have
+ // client hints preferences cached from a previous run of the test.
+ verify_initial_state(test.initial_url, test.name);
+
+ // Then, attempt to set Accept-CH
+ attempt_set(test.type, test.accept_url, test.name, "");
// Finally, verify that CH are actually sent (or not) on requests
verify_navigation_state(test.expect_url, test.name);
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html
new file mode 100644
index 00000000000..16ed6c1a7cb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html
@@ -0,0 +1,11 @@
+<html>
+<body>
+
+<!-- Page with out an accept-ch header; client hints are unaffected -->
+<script>
+ window.top.opener.postMessage('Loaded', '*');
+</script>
+
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html.headers
new file mode 100644
index 00000000000..cb762eff806
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html.headers
@@ -0,0 +1 @@
+Access-Control-Allow-Origin: *
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html
index 25e29017f40..c7680945443 100644
--- a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html
@@ -8,10 +8,10 @@
<script src="resources/accept-ch-test.js"></script>
<script>
-run_test({ name: "same origin iframe",
+run_test({ name: "same origin iframe can't set accept-ch",
initial_url: echo,
accept_url: accept,
- expect_url: expect,
+ expect_url: do_not_expect,
type: "iframe" });
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-empty-accept-ch.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-empty-accept-ch.https.html
new file mode 100644
index 00000000000..e57f1c3dc6f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-empty-accept-ch.https.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta name="timeout" content="long">
+<title>Accept-CH Persistence test</title>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="resources/accept-ch-test.js"></script>
+
+<script>
+// Tests that an empty accept-ch header disables client hints.
+const test_name = "empty-ch on navigation";
+verify_initial_state(echo, test_name);
+attempt_set("navigation", accept, test_name, " to non-empty first");
+attempt_set("navigation", accept_blank, test_name, " to empty second");
+verify_navigation_state(do_not_expect, test_name);
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html
new file mode 100644
index 00000000000..ab597701766
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta name="timeout" content="long">
+<title>Accept-CH Persistence test</title>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="resources/accept-ch-test.js"></script>
+
+<script>
+// Tests that a non-existing accept-ch header doesn't affect client hints.
+const test_name = "empty-ch on navigation";
+verify_initial_state(echo, test_name);
+attempt_set("navigation", accept, test_name, " to non-empty first");
+attempt_set("navigation", no_accept, test_name, " w/o header second");
+verify_navigation_state(expect, test_name);
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html b/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html
new file mode 100644
index 00000000000..177a8365576
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html
@@ -0,0 +1,44 @@
+<html>
+<head>
+<meta http-equiv="Accept-CH" content="viewport-width, rtt">
+<meta http-equiv="Accept-CH" content="downlink, ect, lang">
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script>
+
+// Test of merge of http-equiv headers on top of accept-ch provided ones.
+//
+// resources/echo-client-hints-received.py sets the response headers depending on the set
+// of client hints it receives in the request headers.
+
+promise_test(t => {
+ return fetch(get_host_info()["HTTPS_ORIGIN"] + "/client-hints/resources/echo-client-hints-received.py").then(r => {
+ assert_equals(r.status, 200)
+ // Verify that the browser includes client hints in the headers.
+ assert_true(r.headers.has("device-memory-received"), "device-memory-received");
+ assert_true(r.headers.has("dpr-received"), "dpr-received");
+ assert_true(r.headers.has("lang-received"), "lang-received");
+ assert_true(r.headers.has("viewport-width-received"), "viewport-width-received");
+
+ assert_true(r.headers.has("rtt-received"), "rtt-received");
+ var rtt = parseInt(r.headers.get("rtt-received"));
+ assert_greater_than_equal(rtt, 0);
+ assert_less_than_equal(rtt, 3000);
+ assert_equals(rtt % 50, 0, 'rtt must be a multiple of 50 msec');
+
+ assert_true(r.headers.has("downlink-received"), "downlink-received");
+ var downlinkKbps = r.headers.get("downlink-received") * 1000;
+ assert_greater_than_equal(downlinkKbps, 0);
+ assert_less_than_equal(downlinkKbps, 10000);
+
+ assert_in_array(r.headers.get("ect-received"), ["slow-2g", "2g",
+ "3g", "4g"], 'ect-received is unexpected');
+ });
+}, "Accept-CH header test");
+
+</script>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html.headers b/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html.headers
new file mode 100644
index 00000000000..8759b65606b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html.headers
@@ -0,0 +1,2 @@
+Accept-CH: device-memory, dpr
+
diff --git a/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py b/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py
index e72d77c47d9..25c2b2f765d 100644
--- a/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py
+++ b/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py
@@ -3,7 +3,7 @@ def main(request, response):
Simple handler that returns an HTML response that passes when the required
Client Hints are received as request headers.
"""
- values = [ "Device-Memory", "DPR", "Viewport-Width" ]
+ values = [ "Device-Memory", "DPR", "Viewport-Width", "Sec-CH-UA", "Sec-CH-UA-Mobile" ]
result = "PASS"
log = ""
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs.https.html
index f53d7f9c36e..f9bf38d5d58 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs.https.html
@@ -6,6 +6,8 @@
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<script>
async function loadBlob(fileName) {
@@ -14,6 +16,9 @@ async function loadBlob(fileName) {
}
promise_test(async t => {
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const blobText = new Blob(['test text'], {type: 'text/plain'});
const blobImage = await loadBlob('resources/greenbox.png');
@@ -37,8 +42,3 @@ promise_test(async t => {
assert_equals(blobImageOutput.type, 'image/png');
}, 'Verify write and read clipboard (multiple types)');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image.https.html
index 71d14984953..881b8ababb2 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image.https.html
@@ -7,7 +7,8 @@
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
-
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<p>
<p>The bottom image should display the same image as the top image.</p>
<p>Original Image:</p>
@@ -39,6 +40,9 @@ async function loadBlob(fileName) {
}
promise_test(async t => {
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const blobInput = await loadBlob('resources/greenbox.png');
assert_equals(blobInput.type, 'image/png');
@@ -63,15 +67,13 @@ promise_test(async t => {
}, 'Verify write and read clipboard [image/png Blob]');
promise_test(async t => {
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const invalidPngBlob = new Blob(['this text is not a valid png image'],
- {type: "image/png"});
+ {type: 'image/png'});
const clipboardItemInput = new ClipboardItem({'image/png' : invalidPngBlob});
- await promise_rejects_dom(t, "DataError",
+ await promise_rejects_dom(t, 'DataError',
navigator.clipboard.write([clipboardItemInput]));
}, 'Verify write error on malformed data [image/png ClipboardItem]');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe.https.html
index 8361ceff125..8022f0e269c 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe.https.html
@@ -4,6 +4,8 @@
<link rel='help' href='https://w3c.github.io/clipboard-apis/#async-clipboard-api'>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<iframe id="iframe"></iframe>
<script>
'use strict';
@@ -12,9 +14,12 @@ promise_test(async t => {
// Note: This tests proper behavior on a detaching iframe. text/plain is
// chosen for simplicity, and the test should fail the same way no matter what
// the input type is.
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const iframe = document.getElementById('iframe');
const iframeClipboard = iframe.contentWindow.navigator.clipboard;
- const blobInput = new Blob(["test string"], {type: 'text/plain'});
+ const blobInput = new Blob(['test string'], {type: 'text/plain'});
const clipboardItemInput = new ClipboardItem({'text/plain': blobInput});
// Clipboard API must only be available in focused documents.
// reference: https://www.w3.org/TR/clipboard-apis/#privacy-async
@@ -25,10 +30,5 @@ promise_test(async t => {
// while the read operation is running.
iframeClipboard.read([clipboardItemInput]);
iframe.parentNode.removeChild(iframe);
-}, "Verify read fails on detaching iframe");
+}, 'Verify read fails on detaching iframe');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe.https.html
index 4a3dbd7dc32..0ed1098bcad 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe.https.html
@@ -4,6 +4,8 @@
<link rel='help' href='https://w3c.github.io/clipboard-apis/#async-clipboard-api'>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<iframe id="iframe"></iframe>
<script>
'use strict';
@@ -12,9 +14,12 @@ promise_test(async t => {
// Note: This tests proper behavior on a detaching iframe. text/plain is
// chosen for simplicity, and the test should fail the same way no matter what
// the input type is.
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const iframe = document.getElementById('iframe');
const iframeClipboard = iframe.contentWindow.navigator.clipboard;
- const blobInput = new Blob(["test string"], {type: 'text/plain'});
+ const blobInput = new Blob(['test string'], {type: 'text/plain'});
const clipboardItemInput = new ClipboardItem({'text/plain': blobInput});
// Clipboard API must only be available in focused documents.
// reference: https://www.w3.org/TR/clipboard-apis/#privacy-async
@@ -25,10 +30,5 @@ promise_test(async t => {
// while the write operation is running.
iframeClipboard.write([clipboardItemInput]);
iframe.parentNode.removeChild(iframe);
-}, "Verify write fails on detaching iframe");
+}, 'Verify write fails on detaching iframe');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe.https.html
index af12ff8d880..1859c4bd11b 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe.https.html
@@ -4,6 +4,8 @@
<link rel='help' href='https://w3c.github.io/clipboard-apis/#async-clipboard-api'>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<iframe id="iframe"></iframe>
<script>
'use strict';
@@ -12,9 +14,12 @@ promise_test(async t => {
// Note: This tests proper detached iframe behavior. text/plain is chosen for
// simplicity, and the test should fail the same way no matter what the input
// type is.
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const iframe = document.getElementById('iframe');
const iframeClipboard = iframe.contentWindow.navigator.clipboard;
- const blobInput = new Blob(["test string"], {type: 'text/plain'});
+ const blobInput = new Blob(['test string'], {type: 'text/plain'});
const clipboardItemInput = new ClipboardItem({'text/plain': blobInput});
// Clipboard API must only be available in focused documents.
// reference: https://www.w3.org/TR/clipboard-apis/#privacy-async
@@ -25,18 +30,13 @@ promise_test(async t => {
const readResultAttached = await iframeClipboard.read();
assert_not_equals(readResultAttached, undefined);
assert_equals(readResultAttached.length, 1,
- "attached iframes should be able to read and write normally");
+ 'attached iframes should be able to read and write normally');
iframe.parentNode.removeChild(iframe);
// Writing onto a detached iframe's clipboard should fail, but not crash.
await iframeClipboard.write([clipboardItemInput]);
const readResultDetached = await iframeClipboard.read();
assert_equals(readResultDetached, undefined,
- "reading from detached iframes should output undefined");
-}, "Verify read and write fail on detached iframe");
+ 'reading from detached iframes should output undefined');
+}, 'Verify read and write fail on detached iframe');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe.https.html
index c2d8be1ace2..40854ccc7a3 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe.https.html
@@ -4,11 +4,16 @@
<link rel='help' href='https://w3c.github.io/clipboard-apis/#async-clipboard-api'>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<iframe id="iframe"></iframe>
<script>
'use strict';
promise_test(async t => {
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const iframe = document.getElementById('iframe');
// Clipboard API must only be available in focused documents.
// reference: https://www.w3.org/TR/clipboard-apis/#privacy-async
@@ -16,23 +21,18 @@ promise_test(async t => {
const iframeClipboard = iframe.contentWindow.navigator.clipboard;
// Writing and reading should succeed on same-origin iframes.
- const attachedWriteText = "attached write text"
+ const attachedWriteText = 'attached write text'
await iframeClipboard.writeText(attachedWriteText);
const attachedWriteResult = await iframeClipboard.readText();
assert_equals(attachedWriteResult, attachedWriteText,
- "attached iframes should be able to readText and writeText normally");
+ 'attached iframes should be able to readText and writeText normally');
iframe.parentNode.removeChild(iframe);
// Writing onto a detached iframe's clipboard should fail, but not crash.
- const detachedWriteText = "detached write text";
+ const detachedWriteText = 'detached write text';
await iframeClipboard.writeText(detachedWriteText);
const readResultDetached = await iframeClipboard.readText();
assert_equals(readResultDetached, undefined,
- "reading from detached iframes should output undefined");
-}, "Verify readText and writeText fails on detached iframe");
+ 'reading from detached iframes should output undefined');
+}, 'Verify readText and writeText fails on detached iframe');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read.https.html
index 14488b1e716..1d170f2fa4a 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read.https.html
@@ -7,9 +7,14 @@
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<script>
async function readWriteTest(textInput) {
promise_test(async t => {
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const blobInput = new Blob([textInput], {type: 'text/plain'});
const clipboardItemInput = new ClipboardItem({'text/plain': blobInput});
@@ -30,8 +35,3 @@ async function readWriteTest(textInput) {
readWriteTest('Clipboard write ([text/plain ClipboardItem]) -> read ([text/plain ClipboardItem]) test');
readWriteTest('non-Latin1 text encoding test データ');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText.https.html
index c76df06a8b0..3fe05a53742 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText.https.html
@@ -6,9 +6,14 @@
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<script>
async function readWriteTest(textInput) {
promise_test(async t => {
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
const blobInput = new Blob([textInput], {type: 'text/plain'});
const clipboardItem = new ClipboardItem({'text/plain': blobInput});
@@ -22,8 +27,3 @@ async function readWriteTest(textInput) {
readWriteTest('Clipboard write ([text/plain ClipboardItem) -> read text test');
readWriteTest('non-Latin1 text encoding test データ');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read.https.html
index e74726ec5e7..6745d7cdb67 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read.https.html
@@ -6,9 +6,14 @@
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<script>
async function readWriteTest(textInput) {
promise_test(async t => {
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
await navigator.clipboard.writeText(textInput);
const clipboardItems = await navigator.clipboard.read();
assert_equals(clipboardItems.length, 1);
@@ -26,8 +31,3 @@ async function readWriteTest(textInput) {
readWriteTest('Clipboard write text -> read ([text/plain ClipboardItem]) test');
readWriteTest('non-Latin1 text encoding test データ');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText.https.html
index d2c43f0b6f2..f9fbdff879c 100644
--- a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText-manual.https.html
+++ b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText.https.html
@@ -4,9 +4,14 @@
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<script>
async function readWriteTest(textInput) {
promise_test(async t => {
+ test_driver.set_permission({name: 'clipboard-read'}, 'granted');
+ test_driver.set_permission({name: 'clipboard-write'}, 'granted');
+
await navigator.clipboard.writeText(textInput);
const textOutput = await navigator.clipboard.readText();
@@ -17,8 +22,3 @@ async function readWriteTest(textInput) {
readWriteTest('Clipboard write text -> read text test');
readWriteTest('non-Latin1 text encoding test データ');
</script>
-<p>
- Note: This is a manual test because it writes/reads to the shared system
- clipboard and thus cannot be run async with other tests that might interact
- with the clipboard.
-</p>
diff --git a/tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js b/tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js
index 61fe76959c9..916118ea893 100644
--- a/tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js
+++ b/tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js
@@ -1,5 +1,5 @@
// META: global=window,worker
-// META: script=pako/pako_inflate.min.js
+// META: script=third_party/pako/pako_inflate.min.js
// META: timeout=long
'use strict';
diff --git a/tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js b/tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js
index eeb83869512..db1ab92a2b4 100644
--- a/tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js
+++ b/tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js
@@ -1,5 +1,5 @@
// META: global=window,worker
-// META: script=pako/pako_inflate.min.js
+// META: script=third_party/pako/pako_inflate.min.js
// META: timeout=long
'use strict';
diff --git a/tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js b/tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js
index c63e377abbf..8c02a6d699a 100644
--- a/tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js
+++ b/tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js
@@ -1,5 +1,5 @@
// META: global=window,worker
-// META: script=pako/pako_inflate.min.js
+// META: script=third_party/pako/pako_inflate.min.js
// META: timeout=long
'use strict';
diff --git a/tests/wpt/web-platform-tests/compression/pako/LICENSE b/tests/wpt/web-platform-tests/compression/third_party/pako/LICENSE
index a934ef8db47..a934ef8db47 100644
--- a/tests/wpt/web-platform-tests/compression/pako/LICENSE
+++ b/tests/wpt/web-platform-tests/compression/third_party/pako/LICENSE
diff --git a/tests/wpt/web-platform-tests/compression/pako/README b/tests/wpt/web-platform-tests/compression/third_party/pako/README
index 96028388ebb..96028388ebb 100644
--- a/tests/wpt/web-platform-tests/compression/pako/README
+++ b/tests/wpt/web-platform-tests/compression/third_party/pako/README
diff --git a/tests/wpt/web-platform-tests/compression/pako/pako_inflate.min.js b/tests/wpt/web-platform-tests/compression/third_party/pako/pako_inflate.min.js
index a191a78a895..a191a78a895 100644
--- a/tests/wpt/web-platform-tests/compression/pako/pako_inflate.min.js
+++ b/tests/wpt/web-platform-tests/compression/third_party/pako/pako_inflate.min.js
diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats/line-pushed-by-floats-crash.html b/tests/wpt/web-platform-tests/css/CSS2/floats/line-pushed-by-floats-crash.html
new file mode 100644
index 00000000000..ace28cc71c8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/floats/line-pushed-by-floats-crash.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1064987">
+<body style="width: 100px;">
+ <div style="float: right; width: 10px;"></div>
+ <span>
+ <div style="display: inline-block; width: 1000px; height: 10px;"></div>
+ </span>
+ <span style="position: absolute;"></span>
+ <span style="float: left; height: 10px; column-gap: 65536px; column-count: 65536;"></span>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht b/tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht
index ff9f51083ff..e66aa54160f 100644
--- a/tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht
+++ b/tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht
@@ -13,7 +13,7 @@
@import url("test-fonts.css");
@font-face {
font-family: "WOFF Test";
- src: url("support/available-002.woff2#1") format("woff2");
+ src: url("available-002.woff2#1") format("woff2");
}
body {
font-size: 20px;
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html
new file mode 100644
index 00000000000..146956c2959
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: minimum contribution with percentages</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" />
+<link rel="help" href="https://drafts.csswg.org/css-grid/#minimum-contribution">
+<meta name="assert" content="Checks that the minimum contribution is the minimum size when the preferred size is 'auto' or contains a percentage.">
+<style>
+#grid {
+ display: grid;
+ height: 50px;
+ width: 50px;
+ grid: auto / auto;
+}
+#item {
+ background: cyan;
+}
+#content {
+ height: 100px;
+ width: 100px;
+}
+.min {
+ min-height: calc(100% + 50px);
+ min-width: calc(100% + 50px);
+}
+.max {
+ max-height: calc(100% - 50px);
+ max-width: calc(100% - 50px);
+}
+.size {
+ height: calc(100% + 10px);
+ width: calc(100% + 10px);
+}
+</style>
+<div id="log"></div>
+<div id="grid">
+ <div id="item">
+ <div id="content"></div>
+ </div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+"use strict";
+const cs = getComputedStyle(document.getElementById("grid"));
+const item = document.getElementById("item");
+function check(name, size) {
+ item.className = name;
+ test(function() {
+ assert_equals(cs.gridTemplateColumns, size + "px", "grid-template-columns");
+ }, name + " - columns");
+ test(function() {
+ assert_equals(cs.gridTemplateRows, size + "px", "grid-template-rows");
+ }, name + " - rows");
+}
+
+// The minimum contribution is the automatic minimum size (100px)
+// because the preferred size is 'auto'.
+check("auto", 100);
+
+// The minimum contribution is the minimum size (50px)
+// because the preferred size is 'auto'.
+check("min", 50);
+
+// The minimum contribution is the automatic minimum size (100px)
+// because the preferred size is 'auto'.
+check("max", 100);
+
+// The minimum contribution is the automatic minimum size (100px)
+// because the preferred size depends on the containing block.
+check("size", 100);
+
+// The minimum contribution is the minimum size (50px)
+// because the preferred size is 'auto'.
+check("min max", 50);
+
+// The minimum contribution is the minimum size (50px)
+// because the preferred size depends on the containing block.
+check("min size", 50);
+
+// The minimum contribution is the automatic minimum size (100px)
+// because the preferred size depends on the containing block.
+check("max size", 100);
+
+// The minimum contribution is the minimum size (50px)
+// because the preferred size depends on the containing block.
+check("min max size", 50);
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-invalid.html b/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-invalid.html
new file mode 100644
index 00000000000..b618bcb5da2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-invalid.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Ruby Layout: parsing ruby-merge with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-ruby-1/#ruby-align-property">
+<meta name="assert" content="ruby-merge supports only the grammar 'separate | merge | auto'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("ruby-merge", "none");
+test_invalid_value("ruby-merge", "collapse");
+test_invalid_value("ruby-merge", "10px");
+
+test_invalid_value("ruby-merge", "merge separate");
+test_invalid_value("ruby-merge", "merge auto");
+test_invalid_value("ruby-merge", "auto separate");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-valid.html b/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-valid.html
new file mode 100644
index 00000000000..5694e87dff3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Ruby Layout: parsing ruby-merge with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-ruby-1/#ruby-align-property">
+<meta name="assert" content="ruby-merge supports the full grammar 'separate | merge | auto'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("ruby-align", "separate");
+test_valid_value("ruby-align", "merge");
+test_valid_value("ruby-align", "auto");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/focus-prioritized.html b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/focus-prioritized.html
new file mode 100644
index 00000000000..36e3c7644a7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/focus-prioritized.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<meta charset="utf8">
+<title>CSS Scroll Anchoring: prioritize focused element</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/#anchor-node-selection">
+<meta name="assert" content="anchor selection prioritized focused element">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+body { height: 4000px }
+.spacer { height: 100px }
+#growing { height: 100px }
+#focused { height: 10px }
+</style>
+
+<div class=spacer></div>
+<div class=spacer></div>
+<div class=spacer></div>
+<div class=spacer></div>
+<div id=growing></div>
+<div class=spacer></div>
+<div id=focused tabindex=0></div>
+<div class=spacer></div>
+<div class=spacer></div>
+
+<script>
+async_test((t) => {
+ document.scrollingElement.scrollTop = 150;
+ focused.focus();
+
+ const target_rect = focused.getBoundingClientRect();
+ growing.style.height = "3000px";
+
+ requestAnimationFrame(() => {
+ t.step(() => {
+ const new_rect = focused.getBoundingClientRect();
+ assert_equals(new_rect.x, target_rect.x, "x coordinate");
+ assert_equals(new_rect.y, target_rect.y, "y coordinate");
+ assert_not_equals(document.scrollingElement.scrollTop, 150, "scroll adjusted");
+ });
+ t.done();
+ });
+}, "Anchor selection prioritized focused element.");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html b/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html
index 3ba35217ce1..39da9f73492 100644
--- a/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html
+++ b/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html
@@ -17,6 +17,7 @@
</style>
<div id="target"></div>
<script>
+test_computed_value("outline-offset", "2.5px");
test_computed_value("outline-offset", "10px");
test_computed_value("outline-offset", "0.5em", "20px");
test_computed_value("outline-offset", "calc(10px + 0.5em)", "30px");
diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection.xhtml b/tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection-xhtml.xhtml
index b0a5a7f2843..b0a5a7f2843 100644
--- a/tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection.xhtml
+++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection-xhtml.xhtml
diff --git a/tests/wpt/web-platform-tests/event-timing/auxclick.html b/tests/wpt/web-platform-tests/event-timing/auxclick.html
index f0d8326b130..b88328e2aa3 100644
--- a/tests/wpt/web-platform-tests/event-timing/auxclick.html
+++ b/tests/wpt/web-platform-tests/event-timing/auxclick.html
@@ -9,7 +9,6 @@
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-test-utils.js></script>
<div id='target'>Click me</div>
-<button id='button'>Click me</button>
<script>
promise_test(async t => {
return testEventType(t, 'auxclick');
diff --git a/tests/wpt/web-platform-tests/event-timing/click.html b/tests/wpt/web-platform-tests/event-timing/click.html
new file mode 100644
index 00000000000..e3eecabdf18
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/click.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing click.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div id='target'>Click me</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'click');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/contextmenu.html b/tests/wpt/web-platform-tests/event-timing/contextmenu.html
new file mode 100644
index 00000000000..9aa05a3b163
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/contextmenu.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing contextmenu.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div id='target' contextmenu="mymenu">Menu
+<menu type="context" id="mymenu">
+ <menuitem label="label"></menuitem>
+</menu>
+</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'contextmenu');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/dblclick.html b/tests/wpt/web-platform-tests/event-timing/dblclick.html
new file mode 100644
index 00000000000..d33fcfd30de
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/dblclick.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing dblclick.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Click me</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'dblclick');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/mousedown.html b/tests/wpt/web-platform-tests/event-timing/mousedown.html
new file mode 100644
index 00000000000..e0f14f4c67d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/mousedown.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing mousedown.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div id='target'>Click me</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'mousedown');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/mouseenter.html b/tests/wpt/web-platform-tests/event-timing/mouseenter.html
new file mode 100644
index 00000000000..804d5743742
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/mouseenter.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing mouseenter.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'mouseenter');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/mouseleave.html b/tests/wpt/web-platform-tests/event-timing/mouseleave.html
new file mode 100644
index 00000000000..202cf73e2a6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/mouseleave.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing mouseleave.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'mouseleave');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/mouseout.html b/tests/wpt/web-platform-tests/event-timing/mouseout.html
new file mode 100644
index 00000000000..dd321934b0b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/mouseout.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing mouseout.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'mouseout', true /* looseCount */);
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/mouseover.html b/tests/wpt/web-platform-tests/event-timing/mouseover.html
new file mode 100644
index 00000000000..741ee2d7ecd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/mouseover.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing mouseover.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'mouseover', true /* looseCount */);
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/mouseup.html b/tests/wpt/web-platform-tests/event-timing/mouseup.html
new file mode 100644
index 00000000000..653bef8fdb2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/mouseup.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing mouseup.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'mouseup');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/pointerdown.html b/tests/wpt/web-platform-tests/event-timing/pointerdown.html
new file mode 100644
index 00000000000..3d7dcbe8cac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/pointerdown.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing pointerdown.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'pointerdown');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/pointerenter.html b/tests/wpt/web-platform-tests/event-timing/pointerenter.html
new file mode 100644
index 00000000000..bae1c51d51c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/pointerenter.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing pointerenter.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'pointerenter');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/pointerleave.html b/tests/wpt/web-platform-tests/event-timing/pointerleave.html
new file mode 100644
index 00000000000..81e8f15ec0d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/pointerleave.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing pointerleave.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'pointerleave');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/pointerout.html b/tests/wpt/web-platform-tests/event-timing/pointerout.html
new file mode 100644
index 00000000000..b08f57699cc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/pointerout.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing pointerout.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'pointerout', true /* looseCount */);
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/pointerover.html b/tests/wpt/web-platform-tests/event-timing/pointerover.html
new file mode 100644
index 00000000000..0e1712239c0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/pointerover.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing pointerover.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div>Outside target!</div>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'pointerover', true /* looseCount */);
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/pointerup.html b/tests/wpt/web-platform-tests/event-timing/pointerup.html
new file mode 100644
index 00000000000..4324a5beb7a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/event-timing/pointerup.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<title>Event Timing pointerup.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-actions.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src=resources/event-timing-test-utils.js></script>
+<div id='target'>Target</div>
+<script>
+ promise_test(async t => {
+ return testEventType(t, 'pointerup');
+ })
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js b/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js
index 9f4a81714f7..e2a69b5c5b4 100644
--- a/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js
+++ b/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js
@@ -22,8 +22,8 @@ function mainThreadBusy(duration) {
// to check that the event also happens to correspond to the first event. In this case, the
// timings of the 'first-input' entry should be equal to those of this entry. |minDuration|
// is used to compared against entry.duration.
-function verifyEvent(entry, eventType, targetId, isFirst=false, minDuration=104) {
- assert_true(entry.cancelable);
+function verifyEvent(entry, eventType, targetId, isFirst=false, minDuration=104, notCancelable=false) {
+ assert_equals(entry.cancelable, !notCancelable, 'cancelable property');
assert_equals(entry.name, eventType);
assert_equals(entry.entryType, 'event');
assert_greater_than_equal(entry.duration, minDuration,
@@ -122,51 +122,119 @@ async function testDuration(t, id, numEntries, dur, fastDur, slowDur) {
return Promise.all([observerPromise, clicksPromise]);
}
-function applyAction(actions, eventType, target) {
+// Apply events that trigger an event of the given |eventType| to be dispatched to the |target|. Some
+// of these assume that the target is not on the top left corner of the screen, which means that
+// (0, 0) of the viewport is outside of the |target|.
+function applyAction(eventType, target) {
+ const actions = new test_driver.Actions();
if (eventType === 'auxclick') {
actions.pointerMove(0, 0, {origin: target})
.pointerDown({button: actions.ButtonType.MIDDLE})
.pointerUp({button: actions.ButtonType.MIDDLE});
+ } else if (eventType === 'click' || eventType === 'mousedown' || eventType === 'mouseup'
+ || eventType === 'pointerdown' || eventType === 'pointerup'
+ || eventType === 'touchstart' || eventType === 'touchend') {
+ actions.pointerMove(0, 0, {origin: target})
+ .pointerDown()
+ .pointerUp();
+ } else if (eventType === 'contextmenu') {
+ actions.pointerMove(0, 0, {origin: target})
+ .pointerDown({button: actions.ButtonType.RIGHT})
+ .pointerUp({button: actions.ButtonType.RIGHT});
+ } else if (eventType === 'dblclick') {
+ actions.pointerMove(0, 0, {origin: target})
+ .pointerDown()
+ .pointerUp()
+ .pointerDown()
+ .pointerUp()
+ // Reset by clicking outside of the target.
+ .pointerMove(0, 0)
+ .pointerDown()
+ .pointerUp();
+ } else if (eventType === 'mouseenter' || eventType === 'mouseover'
+ || eventType === 'pointerenter' || eventType === 'pointerover') {
+ // Move outside of the target and then back inside.
+ actions.pointerMove(0, 0)
+ .pointerMove(0, 0, {origin: target});
+ } else if (eventType === 'mouseleave' || eventType === 'mouseout'
+ || eventType === 'pointerleave' || eventType === 'pointerout') {
+ actions.pointerMove(0, 0, {origin: target})
+ .pointerMove(0, 0);
} else {
assert_unreached('The event type ' + eventType + ' is not supported.');
}
+ return actions.send();
+}
+
+function requiresListener(eventType) {
+ return ['mouseenter', 'mouseleave', 'pointerdown', 'pointerenter', 'pointerleave', 'pointerout', 'pointerover', 'pointerup'].includes(eventType);
+}
+
+function notCancelable(eventType) {
+ return ['mouseenter', 'mouseleave', 'pointerenter', 'pointerleave'].includes(eventType);
}
// Tests the given |eventType| by creating events whose target are the element with id 'target'.
-// The test assumes that such element already exists.
-async function testEventType(t, eventType) {
+// The test assumes that such element already exists. |looseCount| is set for events for which
+// events would occur for other elements besides the target, so the counts will be larger.
+async function testEventType(t, eventType, looseCount=false) {
assert_implements(window.EventCounts, "Event Counts isn't supported");
assert_equals(performance.eventCounts.get(eventType), 0);
const target = document.getElementById('target');
- const actions = new test_driver.Actions();
+ if (requiresListener(eventType)) {
+ target.addEventListener(eventType, () =>{});
+ }
+ assert_equals(performance.eventCounts.get(eventType), 0, 'No events yet.');
// Trigger two 'fast' events of the type.
- applyAction(actions, eventType, target);
- applyAction(actions, eventType, target);
- await actions.send();
- assert_equals(performance.eventCounts.get('auxclick'), 2);
+ await applyAction(eventType, target);
+ await applyAction(eventType, target);
+ if (looseCount) {
+ assert_greater_than_equal(performance.eventCounts.get(eventType), 2,
+ `Should have at least 2 ${eventType} events`)
+ } else {
+ assert_equals(performance.eventCounts.get(eventType), 2, `Should have 2 ${eventType} events`);
+ }
// The durationThreshold used by the observer. A slow events needs to be slower than that.
const durationThreshold = 16;
// Now add an event handler to cause a slow event.
target.addEventListener(eventType, () => {
mainThreadBusy(durationThreshold + 4);
});
- return new Promise(async resolve => {
+ const observerPromise = new Promise(async resolve => {
new PerformanceObserver(t.step_func(entryList => {
let eventTypeEntries = entryList.getEntriesByName(eventType);
if (eventTypeEntries.length === 0)
return;
- assert_equals(eventTypeEntries.length, 1);
- verifyEvent(eventTypeEntries[0],
+ let entry = null;
+ if (!looseCount) {
+ entry = eventTypeEntries[0];
+ assert_equals(eventTypeEntries.length, 1);
+ } else {
+ // The other events could also be considered slow. Find the one with the correct target.
+ eventTypeEntries.forEach(e => {
+ if (e.target === document.getElementById('target'))
+ entry = e;
+ });
+ if (!entry)
+ return;
+ }
+ verifyEvent(entry,
eventType,
'target',
false /* isFirst */,
- durationThreshold);
- assert_equals(performance.eventCounts.get(eventType), 3);
+ durationThreshold,
+ notCancelable(eventType));
+ if (looseCount) {
+ assert_greater_than_equal(performance.eventCounts.get(eventType), 3,
+ `Should have at least 3 ${eventType} events`)
+ } else {
+ assert_equals(performance.eventCounts.get(eventType), 3, `Should have 3 ${eventType} events`);
+ }
resolve();
})).observe({type: 'event', durationThreshold: durationThreshold});
- // Cause a slow event.
- applyAction(actions, eventType, target);
- actions.send();
});
+ // Cause a slow event.
+ let actionPromise = applyAction(eventType, target);
+ return Promise.all([actionPromise, observerPromise]);
} \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html
index 633f7e4f7e3..e84fce715f1 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html
@@ -10,7 +10,7 @@
function makeBlob() {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
- xhr.open("GET", '/css/css-images/image-orientation/support/exif-orientation-3-lr.jpg');
+ xhr.open("GET", '/css/css-images/image-orientation/support/exif-orientation-8-llo.jpg');
xhr.responseType = 'blob';
xhr.send();
xhr.onload = function() {
@@ -22,7 +22,7 @@
window.onload = function() {
var cfb = document.getElementById("canvasWithFileBitmap");
makeBlob().then(function(blob){createImageBitmap(blob).then(bitmap => {
- cfb.getContext("2d").drawImage(bitmap, 0, 0);
+ cfb.getContext("2d").drawImage(bitmap, 0, 0, 150, 150 * bitmap.height / bitmap.width);
window.requestAnimationFrame(() => {
document.documentElement.removeAttribute("class");
});
@@ -32,6 +32,6 @@
</script>
</head>
<body>
- <canvas id="canvasWithFileBitmap" width="300" height="300"></canvas>
+ <canvas id="canvasWithFileBitmap" width="150" height="300"></canvas>
</body>
</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html
index 260f96e5cac..47d1f8b431b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html
@@ -19,7 +19,7 @@
</script>
</head>
<body>
- <img id="img-element" src="../../../css/css-images/image-orientation/support/exif-orientation-3-lr.jpg">
+ <img id="img-element" src="/css/css-images/image-orientation/support/exif-orientation-3-lr.jpg">
<canvas id="bitmap-canvas"></canvas>
</body>
</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html
index d1d3554c70a..2bd60378354 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html
@@ -5,6 +5,6 @@
<title>createImageBitmap and drawImage from a blob with image orientation: from-image, reference</title>
</head>
<body>
- <img id="img-element" src="/css/css-images/image-orientation/support/exif-orientation-3-lr.jpg">
+ <img id="img-element" style="width: 150px; height: 300px;" src="/css/css-images/image-orientation/support/exif-orientation-8-llo.jpg">
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html
index d59dd2d9fd7..19ffcc39c96 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html
@@ -16,7 +16,7 @@
</script>
</head>
<body>
- <img id="img-element" src="../../../../css/css-images/image-orientation/support/exif-orientation-3-lr-pre-rotated.jpg">
+ <img id="img-element" src="/css/css-images/image-orientation/support/exif-orientation-3-lr-pre-rotated.jpg">
<canvas id="bitmap-canvas"></canvas>
</body>
</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml
index be8039b03f9..6b02200362e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml
@@ -1,87 +1,6 @@
# Copyright (c) 2010 Philip Taylor
# Released under the BSD license and W3C Test Suite License: see LICENSE.txt
-framed: |
- <!DOCTYPE html>
- <title>Canvas test: %(name)s</title>
- <script src="../tests.js"></script>
- <link rel="stylesheet" href="../tests.css">
- %(fonts)s<body class="framed show_output">
- <h1>
- <a href="%(name)s.html" target="_parent">%(name_wrapped)s</a>
- </h1>
- <p><a href="#" id="show_output" onclick="document.body.className += ' show_output'; return false">[show output]</a>
- %(fonthack)s<p class="output">Actual output:</p>
- <canvas id="c" class="output" %(canvas)s>%(fallback)s</canvas>
- %(expected)s
- <ul id="d"></ul>
- <script>
- _addTest(function(canvas, ctx) {
-
- %(code)s
-
- });
- </script>
- %(images)s
-
-standalone: |
- <!DOCTYPE html>
- <title>Canvas test: %(name)s</title>
- <script src="../tests.js"></script>
- <link rel="stylesheet" href="../tests.css">
- <link rel="prev" href="%(prev)s.html" title="%(prev)s">
- <link rel="next" href="%(next)s.html" title="%(next)s">
- %(fonts)s<body class="show_output">
- <p>
- <a href="%(prev)s.html" accesskey="p" title="[p] %(prev)s">&lt;</a>
- <a href="index.html">[index]</a>
- <a href="%(next)s.html" accesskey="n" title="[n] %(next)s">&gt;</a>
- <h1>%(backrefs)s</h1>
- <p class="desc">%(desc)s</p>
- <div class="refs">References:
- <ul>
- %(refs)s
- </ul>
- </div>
- %(notes)s
- %(fonthack)s<p class="output">Actual output:</p>
- <canvas id="c" class="output" %(canvas)s>%(fallback)s</canvas>
- %(expected)s
- <ul id="d"></ul>
- <script>
- _addTest(function(canvas, ctx) {
-
- %(code)s
-
- });
- </script>
- %(images)s
-
-minimal: |
- <!DOCTYPE html>
- <html class="minimal">
- <title>Canvas test: %(name)s</title>
- <script src="../tests.js"></script>
- <link rel="stylesheet" href="../tests.css">
- <link rel="prev" href="minimal.%(prev)s.html" title="%(prev)s">
- <link rel="next" href="minimal.%(next)s.html" title="%(next)s">
- %(fonts)s<body>
- <p id="passtext">Pass</p>
- <p id="failtext">Fail</p>
- <!-- TODO: handle "script did not run" case -->
- %(fonthack)s<p class="output">These images should be identical:</p>
- <canvas id="c" class="output" %(canvas)s>%(fallback)s</canvas>
- %(expected)s
- <ul id="d"></ul>
- <script>
- _addTest(function(canvas, ctx) {
-
- %(code)s
-
- });
- </script>
- %(images)s
-
w3c: |
<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
@@ -109,270 +28,3 @@ w3c: |
});
</script>
%(scripts)s%(images)s
-
-mochitest: |
- <!DOCTYPE HTML>
- <title>%(mochi_name_fn)s</title>
- %(mochi_desc)s<script src="/MochiKit/MochiKit.js"></script>
- <script src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" href="/tests/SimpleTest/test.css">
- %(fonts)s<body><!-- [[[ test_%(mochi_name)s.html ]]] -->
-
- <p>Canvas test: %(mochi_name)s</p>
- %(mochi_desc)s%(fonthack)s<canvas id="c" %(canvas)s>%(fallback)s</canvas>
- <script>
-
- function %(mochi_name_fn)s() {
-
- var canvas = document.getElementById('c');
- var ctx = canvas.getContext('2d');
-
- %(mochi_code)s
-
- }
- </script>
- %(mochi_images)s
-
-mochitest.isPixel: |
- function isPixel(ctx, x,y, r,g,b,a, pos, colour, d) {
- var pixel = ctx.getImageData(x, y, 1, 1);
- var pr = pixel.data[0],
- pg = pixel.data[1],
- pb = pixel.data[2],
- pa = pixel.data[3];
- ok(r-d <= pr && pr <= r+d &&
- g-d <= pg && pg <= g+d &&
- b-d <= pb && pb <= b+d &&
- a-d <= pa && pa <= a+d,
- "pixel "+pos+" is "+pr+","+pg+","+pb+","+pa+"; expected "+colour+" +/- "+d);
- }
-
-mochitest.todo_isPixel: |
- function todo_isPixel(ctx, x,y, r,g,b,a, pos, colour, d) {
- var pixel = ctx.getImageData(x, y, 1, 1);
- var pr = pixel.data[0],
- pg = pixel.data[1],
- pb = pixel.data[2],
- pa = pixel.data[3];
- todo(r-d <= pr && pr <= r+d &&
- g-d <= pg && pg <= g+d &&
- b-d <= pb && pb <= b+d &&
- a-d <= pa && pa <= a+d,
- "pixel "+pos+" is "+pr+","+pg+","+pb+","+pa+"; expected "+colour+" +/- "+d);
- }
-
-mochitest.deferTest: |
- function deferTest() {
- _deferred = true;
- }
-
-mochitest.wrapFunction: |
- function wrapFunction(f) {
- return function () {
- f.apply(null, arguments);
- SimpleTest.finish();
- }
- }
-
-mochitest.exception: |
- var _thrown_outer = false;
- try {
-
- %s
- } catch (e) {
- _thrown_outer = true;
- }
- todo(!_thrown_outer, 'should not throw exception');
-
-mochitest.Makefile: |
- #
- # ***** BEGIN LICENSE BLOCK *****
- # Version: MPL 1.1/GPL 2.0/LGPL 2.1
- #
- # The contents of this file are subject to the Mozilla Public License Version
- # 1.1 (the "License"); you may not use this file except in compliance with
- # the License. You may obtain a copy of the License at
- # http://www.mozilla.org/MPL/
- #
- # Software distributed under the License is distributed on an "AS IS" basis,
- # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- # for the specific language governing rights and limitations under the
- # License.
- #
- # The Original Code is mozilla.org code.
- #
- # The Initial Developer of the Original Code is
- # Mozilla Corporation.
- # Portions created by the Initial Developer are Copyright (C) 2007
- # the Initial Developer. All Rights Reserved.
- #
- # Contributor(s):
- # Philip Taylor <philip.taylor@cl.cam.ac.uk>
- #
- # Alternatively, the contents of this file may be used under the terms of
- # either of the GNU General Public License Version 2 or later (the "GPL"),
- # or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- # in which case the provisions of the GPL or the LGPL are applicable instead
- # of those above. If you wish to allow use of your version of this file only
- # under the terms of either the GPL or the LGPL, and not to allow others to
- # use your version of this file under the terms of the MPL, indicate your
- # decision by deleting the provisions above and replace them with the notice
- # and other provisions required by the GPL or the LGPL. If you do not delete
- # the provisions above, a recipient may use your version of this file under
- # the terms of any one of the MPL, the GPL or the LGPL.
- #
- # ***** END LICENSE BLOCK *****
-
- DEPTH = ../../..
- topsrcdir = @top_srcdir@
- srcdir = @srcdir@
- VPATH = @srcdir@
- relativesrcdir = content/canvas/test
-
- include $(DEPTH)/config/autoconf.mk
- include $(topsrcdir)/config/rules.mk
-
-
-index.frame: |
- <!DOCTYPE html>
- <title>Canvas tests - %(category)s.*</title>
- <link rel="stylesheet" href="../frame.css">
- <p><a href="index.html">[index]</a>
- <h1>%(backrefs)s.*</h1>
- <p>
-
-# FF trunk doesn't do onload in object, so use iframe instead
-#index.frame.item: |-
-# <object width="200" height="220" data="framed.%s.html">(object fallback)</object><!--
-# -->
-index.frame.item: |-
- <iframe width="200" height="220" src="framed.%s.html">(iframe fallback)</iframe><!--
- -->
-
-index.w3c.frame: |
- <!DOCTYPE html>
- <title>Canvas tests - %(category)s.*</title>
- <link rel="stylesheet" href="/html/canvas/resources/canvas-frame.css">
- <p><a href="index.html">[index]</a>
- <h1>%(backrefs)s.*</h1>
- <p>
-
-index.w3c.frame.item: |-
- <iframe width="320" height="240" src="%s.html">(iframe fallback)</iframe><!--
- -->
-
-index: |
- <!DOCTYPE html>
- <title>Canvas tests - index</title>
- <link rel="stylesheet" href="../index.css">
- <script>
- function expand(obj) {
- obj.parentNode.className = obj.parentNode.className ? "" : "expand";
- return false;
- }
- </script>
-
- <h1><code>&lt;canvas&gt;</code> tests</h1>
-
- <p>Developed by <a href="mailto:excors&#64;gmail.com">Philip Taylor</a>.
- Last updated %(updated)s.
-
- <p>Based on the <a
- href="http://www.whatwg.org/specs/web-apps/current-work/#the-canvas">HTML</a>
- Draft Standard &mdash; 22 February 2010. See also the <a
- href="spec.html">annotated specification</a>.
-
- <p>See <a href="results.html">test results</a> for some browsers.
- (Generated semi-automatically via the <a
- href="../reportgenentry.html">report generator</a>.)
-
- <p>You may want to <a href="../source.tar.bz2">download the source
- code/data</a> (e.g. to create an offline copy of the tests).
-
- <h2>Test cases</h2>
-
- <p>For each test, a green background indicates success, red indicates
- failure, blue indicates a need to manually confirm the output is as
- expected.
-
- <p>The versions in the report generator are the most visually minimalist.
- The category links below show the actual and expected renderings, and any
- error messages. The individual test pages have links to relevant parts of
- the specification and extra notes.
-
- <p>There may be many inaccuracies: tests that do not notice when part of
- the output is incorrect; tests that are too intolerant of acceptable
- renderings differences, or make other unreasonable assumptions; tests that
- were written for an outdated version of the specification, and tests that
- are just wrong. Also a number of features are not tested, most notably text
- rendering. Please contact me (<a
- href="mailto:excors&#64;gmail.com">email</a>, <a
- href="http://wiki.whatwg.org/wiki/IRC">IRC</a>, etc) if you find any
- problems.
-
-index.w3c: |
- <!DOCTYPE html>
- <title>Canvas tests - index</title>
- <link rel="stylesheet" href="/html/canvas/resources/canvas-index.css">
-
- <h1><code>&lt;canvas&gt;</code> tests</h1>
-
-index.category.item: |
- <li><h3><a href="index.%s.html">%s.*</a></h3><p>%d test%s <a href="#" onclick="return expand(this)">expand</a></p>
-
-index.w3c.category.item: |
- <li><h3><a href="index.%s.html">%s.*</a></h3><p>%d test%s</p>
-
-reportgen: |
- <!DOCTYPE html>
- <title>Canvas tests - report generator</title>
- <link rel="stylesheet" href="../reportgen.css">
- <script src="../reportgen.js"></script>
- <p>This is mainly for my own use, so it is not designed to be user-friendly.
- If anyone else wants to use it for some reason, just wait
- until "tests not yet loaded" and "tests not yet completed" get down to zero, then click the
- pass/fail button for any test it shows where it cannot work out the answer (or use the
- <kbd>y</kbd>/<kbd>n</kbd> keys to choose for the magenta-highlighted case), then use the
- buttons at the bottom to collect all the results.
- <form id="f">
- <p><label for="loading">Tests not yet loaded:</label> <input id="loading" value="0" readonly>
- <p><label for="waiting">Tests not yet completed:</label> <input id="waiting" value="0" readonly>
- <p><button type="button" onclick="showUnfinished()">Show uncompleted tests</button>
- <button type="button" onclick="showAll()">Show all tests</button>
- <button type="button" onclick="reloadAll()">Reload test cases serially</button>
- <!--<button type="button" onclick="avoidFrameLimit()">HACK: work around frame limit</button>
- <button type="button" onclick="makeObjects()">HACK: s/iframe/object/</button>-->
- <hr>
- <p><label for="passed">Detected passes:</label> <input id="passed" value="0" readonly>
- <p><label for="failed">Detected fails:</label> <input id="failed" value="0" readonly>
- <hr>
- <table>
- <tr>
- <th>Test name
- <th>Test case
- <th>Pass?
- <th>Fail?
- <th>Notes
- <script>
- createTable( [
- %(items)s
- ] );
- </script>
- </table>
- </form>
- <hr>
- <form method="post" action="../submitresults.cgi">
- <button type="button" onclick="document.getElementById('report').value = genreport()">Generate test report</button><br>
- <textarea name="report" id="report" cols="100" rows="10"></textarea><br>
- <input type="submit" value="Submit results"> (Submissions will tend to be ignored unless there
- is a good reason why they won't be, so don't use this form unless there is such a reason.)
- </form>
-
-results: |
- <!DOCTYPE html>
- <title>Canvas tests - results</title>
- <link rel="stylesheet" href="../results.css">
- <table>
- <col id="col1">
- <tr>
- <th>Test
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html
index d3e090bd7f7..089019dc2e2 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html
@@ -18,7 +18,7 @@ async_test(t => {
frame.src = "resources/coep-frame.html";
frame.onload = t.step_func(() => {
frame.onload = null;
- frame.src = `javascript:'${createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN)}'`;
+ frame.src = `javascript:${encodeURIComponent(createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN))}`;
});
document.body.append(frame);
}, "Cross-Origin-Embedder-Policy frame and javascript: URLs");
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html
index c34f1336c8b..13c0cce1858 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html
@@ -14,7 +14,7 @@ async_test(t => {
}));
const frame = document.createElement("iframe");
t.add_cleanup(() => frame.remove());
- frame.src = `data:text/html,${createScript("null", window.origin)}`;
+ frame.src = `data:text/html,<script>${createScript("null", window.origin)}<\/script>`;
document.body.append(frame);
}, "Cross-Origin-Embedder-Policy and data: URLs");
</script>
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html
index 9fe85db76f5..60edf00312d 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html
@@ -15,7 +15,7 @@ async_test(t => {
}));
const frame = document.createElement("iframe");
t.add_cleanup(() => frame.remove());
- frame.src = `javascript:'${createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN)}'`;
+ frame.src = `javascript:${encodeURIComponent(createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN))}`;
document.body.append(frame);
}, "Cross-Origin-Embedder-Policy and javascript: URLs");
</script>
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html
new file mode 100644
index 00000000000..503e52110bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script>
+const {ORIGIN, REMOTE_ORIGIN} = get_host_info();
+const COEP =
+ '|header(cross-origin-embedder-policy,require-corp)' +
+ '|header(cross-origin-embedder-policy-report-only,require-corp)';
+const FRAME_URL = `${ORIGIN}/common/blank.html?pipe=`;
+const REMOTE_FRAME_URL = `${REMOTE_ORIGIN}/common/blank.html?pipe=`;
+
+function checkCorpReport(report, contextUrl, blockedUrl) {
+ assert_equals(report.type, 'coep');
+ assert_equals(report.url, contextUrl);
+ assert_equals(report.body.type, 'corp');
+ assert_equals(report.body['blocked-url'], blockedUrl);
+}
+
+function loadFrame(document, url) {
+ return new Promise((resolve, reject) => {
+ const frame = document.createElement('iframe');
+ frame.src = url;
+ frame.onload = () => resolve(frame);
+ frame.onerror = reject;
+ document.body.appendChild(frame);
+ });
+}
+
+function observeReportsUpTo(global, upto) {
+ const reports = [];
+ return new Promise(resolve => {
+ const observer = new global.ReportingObserver((rs) => {
+ for (const r of rs) {
+ reports.push(r.toJSON());
+ if (reports.length == upto) {
+ observer.disconnect();
+ resolve(reports);
+ }
+ }
+ });
+ observer.observe();
+ });
+}
+
+promise_test(async (t) => {
+ const parent = await loadFrame(document, FRAME_URL + COEP);
+ t.add_cleanup(() => parent.remove());
+ loadFrame(parent.contentDocument, REMOTE_FRAME_URL + COEP);
+
+ // One for COEP, one for COEP-RO.
+ const reports = await observeReportsUpTo(parent.contentWindow, 2);
+
+ assert_equals(reports.length, 2);
+ checkCorpReport(reports[0], parent.src, REMOTE_FRAME_URL + COEP);
+ checkCorpReport(reports[1], parent.src, REMOTE_FRAME_URL + COEP);
+}, 'Navigation CORP');
+
+promise_test(async (t) => {
+ const grandParent = await loadFrame(document, FRAME_URL + COEP);
+ t.add_cleanup(() => grandParent.remove());
+ const parent = grandParent.contentDocument.createElement('iframe');
+ grandParent.contentDocument.body.appendChild(parent);
+ loadFrame(parent.contentDocument, REMOTE_FRAME_URL + COEP);
+
+ // One for COEP, one for COEP-RO.
+ const reports = await observeReportsUpTo(parent.contentWindow, 2);
+
+ assert_equals(reports.length, 2);
+ checkCorpReport(reports[0], 'about:blank', REMOTE_FRAME_URL + COEP);
+ checkCorpReport(reports[1], 'about:blank', REMOTE_FRAME_URL + COEP);
+}, 'Navigation CORP and about:blank');
+
+</script>
+</body></html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html
index 7d90aacd8bb..d2039064a8d 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html
@@ -5,7 +5,7 @@ const query = new URLSearchParams(window.location.search);
const id = query.get("id");
const variant = query.get("variant");
const parent = (variant === "subframe") ? "parent.parent" : "parent";
-const blob = new Blob([createScript(window.origin, query.get("crossOrigin"), parent, id)], { type: "text/html" });
+const blob = new Blob([`<script>${createScript(window.origin, query.get("crossOrigin"), parent, id)}<\/script>`], { type: "text/html" });
const blobURL = URL.createObjectURL(blob);
if (variant === "subframe") {
const frame = document.createElement("iframe");
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js
index ab7286e57ac..ac7a1fda06f 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js
@@ -1,8 +1,7 @@
// This creates a serialized <script> element that is useful for blob/data/srcdoc-style tests.
function createScript(sameOrigin, crossOrigin, type="parent", id="") {
- return `<script>
-const data = { id: "${id}",
+ return `const data = { id: "${id}",
opener: !!window.opener,
origin: window.origin,
sameOriginNoCORPSuccess: false,
@@ -27,6 +26,5 @@ Promise.all(records).then(() => {
} else {
window.${type}.postMessage(data, "*");
}
-});
-<\/script>`;
+});`;
}
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html
index 3fbba961b27..2937c133810 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html
@@ -15,7 +15,7 @@ async_test(t => {
}));
const frame = document.createElement("iframe");
t.add_cleanup(() => frame.remove());
- frame.srcdoc = createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN);
+ frame.srcdoc = `<script>${createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN)}<\/script>`;
document.body.append(frame);
}, "Cross-Origin-Embedder-Policy and srcdoc");
</script>
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html
index c317f6bdf9b..eb74bab3e5c 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html
@@ -9,7 +9,7 @@
promise_test(t => {
const origins = get_host_info();
const id = `tut mir leid ${type}`;
- const blob = new Blob([createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "channel", id)], {type: "text/html"});
+ const blob = new Blob([`<script>${createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "channel", id)}<\/script>`], {type: "text/html"});
const blobURL = URL.createObjectURL(blob);
const bc = new BroadcastChannel(id);
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/input-pattern-dynamic-value.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/input-pattern-dynamic-value.html
new file mode 100644
index 00000000000..58e566c7386
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/input-pattern-dynamic-value.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Pattern dynamic value attribute change</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1636495">
+<input pattern="a" value="a">
+<script>
+test(function() {
+ let i = document.querySelector("input");
+ assert_false(i.matches(":invalid"));
+ i.pattern = "b";
+ assert_true(i.matches(":invalid"));
+ i.pattern = "(";
+ assert_false(i.matches(":invalid"));
+}, "input validation is updated after pattern attribute change");
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html
index d9bbadbe617..fc112f3ceb3 100644
--- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html
+++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html
@@ -51,17 +51,28 @@
testSelectorIdsMatch("#set1 :read-write", ["input1"], "The :read-write pseudo-class must match input elements to which the readonly attribute applies, and that are mutable");
- testSelectorIdsMatch("#set1 :read-only", ["input2"], "The :read-only pseudo-class must not match input elements to which the readonly attribute applies, and that are mutable");
+ testSelectorIdsMatch("#set1 :read-only", ["input2", "input3", "input4", "input5"], "The :read-only pseudo-class must not match input elements to which the readonly attribute applies, and that are mutable");
document.getElementById("input1").setAttribute("readonly", "readonly");
testSelectorIdsMatch("#set1 :read-write", [], "The :read-write pseudo-class must not match input elements after the readonly attribute has been added");
- testSelectorIdsMatch("#set1 :read-only", ["input1", "input2"], "The :read-only pseudo-class must match input elements after the readonly attribute has been added");
+ testSelectorIdsMatch("#set1 :read-only", ["input1", "input2", "input3", "input4", "input5"], "The :read-only pseudo-class must match input elements after the readonly attribute has been added");
document.getElementById("input1").removeAttribute("readonly");
testSelectorIdsMatch("#set1 :read-write", ["input1"], "The :read-write pseudo-class must not match input elements after the readonly attribute has been removed");
- testSelectorIdsMatch("#set1 :read-only", ["input2"], "The :read-only pseudo-class must match input elements after the readonly attribute has been removed");
+ testSelectorIdsMatch("#set1 :read-only", ["input2", "input3", "input4", "input5"], "The :read-only pseudo-class must match input elements after the readonly attribute has been removed");
+
+ document.getElementById("input1").disabled = true;
+ testSelectorIdsMatch("#set1 :read-write", [], "The :read-write pseudo-class must not match input elements after the disabled attribute has been added");
+
+ testSelectorIdsMatch("#set1 :read-only", ["input1", "input2", "input3", "input4", "input5"], "The :read-only pseudo-class must match input elements after the disabled attribute has been added");
+
+ document.getElementById("input1").disabled = false;
+
+ testSelectorIdsMatch("#set1 :read-write", ["input1"], "The :read-write pseudo-class must match input elements after the disabled attribute has been removed");
+
+ testSelectorIdsMatch("#set1 :read-only", ["input2", "input3", "input4", "input5"], "The :read-only pseudo-class must not match input elements after the disabled attribute has been removed");
testSelectorIdsMatch("#set2 :read-write", ["textarea1"], "The :read-write pseudo-class must match textarea elements that do not have a readonly attribute, and that are not disabled");
diff --git a/tests/wpt/web-platform-tests/interfaces/web-share.idl b/tests/wpt/web-platform-tests/interfaces/web-share.idl
index a29107f0598..c29a29d0b4e 100644
--- a/tests/wpt/web-platform-tests/interfaces/web-share.idl
+++ b/tests/wpt/web-platform-tests/interfaces/web-share.idl
@@ -8,6 +8,7 @@ partial interface Navigator {
};
dictionary ShareData {
+ FrozenArray<File> files;
USVString title;
USVString text;
USVString url;
diff --git a/tests/wpt/web-platform-tests/interfaces/webauthn.idl b/tests/wpt/web-platform-tests/interfaces/webauthn.idl
index 73c96c87b91..a1d46a37cf4 100644
--- a/tests/wpt/web-platform-tests/interfaces/webauthn.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webauthn.idl
@@ -31,6 +31,9 @@ interface AuthenticatorResponse {
interface AuthenticatorAttestationResponse : AuthenticatorResponse {
[SameObject] readonly attribute ArrayBuffer attestationObject;
sequence<DOMString> getTransports();
+ ArrayBuffer getAuthenticatorData();
+ ArrayBuffer? getPublicKey();
+ COSEAlgorithmIdentifier getPublicKeyAlgorithm();
};
[SecureContext, Exposed=Window]
diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc.idl
index 852ec06209e..efb21f4a0cc 100644
--- a/tests/wpt/web-platform-tests/interfaces/webrtc.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webrtc.idl
@@ -85,11 +85,11 @@ interface RTCPeerConnection : EventTarget {
constructor(optional RTCConfiguration configuration = {});
Promise<RTCSessionDescriptionInit> createOffer(optional RTCOfferOptions options = {});
Promise<RTCSessionDescriptionInit> createAnswer(optional RTCAnswerOptions options = {});
- Promise<void> setLocalDescription(optional RTCSessionDescriptionInit description = {});
+ Promise<void> setLocalDescription(optional RTCLocalSessionDescriptionInit description = {});
readonly attribute RTCSessionDescription? localDescription;
readonly attribute RTCSessionDescription? currentLocalDescription;
readonly attribute RTCSessionDescription? pendingLocalDescription;
- Promise<void> setRemoteDescription(optional RTCSessionDescriptionInit description = {});
+ Promise<void> setRemoteDescription(RTCSessionDescriptionInit description);
readonly attribute RTCSessionDescription? remoteDescription;
readonly attribute RTCSessionDescription? currentRemoteDescription;
readonly attribute RTCSessionDescription? pendingRemoteDescription;
@@ -119,12 +119,12 @@ interface RTCPeerConnection : EventTarget {
Promise<void> createOffer(RTCSessionDescriptionCallback successCallback,
RTCPeerConnectionErrorCallback failureCallback,
optional RTCOfferOptions options = {});
- Promise<void> setLocalDescription(optional RTCSessionDescriptionInit description = {},
+ Promise<void> setLocalDescription(optional RTCLocalSessionDescriptionInit description = {},
VoidFunction successCallback,
RTCPeerConnectionErrorCallback failureCallback);
Promise<void> createAnswer(RTCSessionDescriptionCallback successCallback,
RTCPeerConnectionErrorCallback failureCallback);
- Promise<void> setRemoteDescription(optional RTCSessionDescriptionInit description = {},
+ Promise<void> setRemoteDescription(RTCSessionDescriptionInit description,
VoidFunction successCallback,
RTCPeerConnectionErrorCallback failureCallback);
Promise<void> addIceCandidate(RTCIceCandidateInit candidate,
@@ -150,13 +150,18 @@ enum RTCSdpType {
[Exposed=Window]
interface RTCSessionDescription {
- constructor(optional RTCSessionDescriptionInit descriptionInitDict = {});
+ constructor(RTCSessionDescriptionInit descriptionInitDict);
readonly attribute RTCSdpType type;
readonly attribute DOMString sdp;
[Default] object toJSON();
};
dictionary RTCSessionDescriptionInit {
+ required RTCSdpType type;
+ DOMString sdp = "";
+};
+
+dictionary RTCLocalSessionDescriptionInit {
RTCSdpType type;
DOMString sdp = "";
};
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html
index f8303337304..b46b307dbe3 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html
@@ -8,39 +8,39 @@
<!-- These operators should have form "prefix" -->
- _<math><merror><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></merror></math>_
- _<math><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></math>_
- _<math><mphantom><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></mphantom></math>_
- _<math><mrow><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></mrow></math>_
- _<math><msqrt><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></msqrt></math>_
- _<math><mstyle><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></mstyle></math>_
+ _<math><merror><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></merror></math>_
+ _<math><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></math>_
+ _<math><mphantom><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></mphantom></math>_
+ _<math><mrow><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></mrow></math>_
+ _<math><msqrt><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></msqrt></math>_
+ _<math><mstyle><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></mstyle></math>_
<br/>
- _<math><merror><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></merror></math>_
- _<math><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></math>_
- _<math><mphantom><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></mphantom></math>_
- _<math><mrow><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></mrow></math>_
- _<math><msqrt><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></msqrt></math>_
- _<math><mstyle><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></mstyle></math>_
+ _<math><merror><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></merror></math>_
+ _<math><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></math>_
+ _<math><mphantom><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></mphantom></math>_
+ _<math><mrow><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></mrow></math>_
+ _<math><msqrt><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></msqrt></math>_
+ _<math><mstyle><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></mstyle></math>_
<br/>
- _<math><merror><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></merror></math>_
- _<math><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></math>_
- _<math><mphantom><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></mphantom></math>_
- _<math><mrow><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></mrow></math>_
- _<math><msqrt><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></msqrt></math>_
- _<math><mstyle><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></mstyle></math>_
+ _<math><merror><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></merror></math>_
+ _<math><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></math>_
+ _<math><mphantom><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></mphantom></math>_
+ _<math><mrow><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></mrow></math>_
+ _<math><msqrt><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></msqrt></math>_
+ _<math><mstyle><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></mstyle></math>_
<br/>
- _<math><merror><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></merror></math>_
- _<math><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></math>_
- _<math><mphantom><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></mphantom></math>_
- _<math><mrow><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></mrow></math>_
- _<math><msqrt><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></msqrt></math>_
- _<math><mstyle><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></mstyle></math>_
+ _<math><merror><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></merror></math>_
+ _<math><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></math>_
+ _<math><mphantom><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></mphantom></math>_
+ _<math><mrow><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></mrow></math>_
+ _<math><msqrt><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></msqrt></math>_
+ _<math><mstyle><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></mstyle></math>_
<br/>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html
index d48bd48a6e4..608ad4bbade 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html
@@ -8,11 +8,11 @@
<!-- This checks the effect of @form on a prefix operator. -->
_<math><mo lspace="0.27777em" rspace="0.27777em">∇</mo></math>_
- _<math><mo lspace="0.11111em" rspace="0.05555em">∇</mo></math>_
+ _<math><mo lspace="0em" rspace="0em">∇</mo></math>_
_<math><mo lspace="0.27777em" rspace="0.27777em">∇</mo></math>_
<!-- This checks the effect of @form on an infix operator. -->
- _<math><mo lspace="0.22222em" rspace="0.22222em">⋉</mo></math>_
+ _<math><mo lspace="0.166666em" rspace="0.166666em">⋉</mo></math>_
_<math><mo lspace="0.27777em" rspace="0.27777em">⋉</mo></math>_
_<math><mo lspace="0.27777em" rspace="0.27777em">⋉</mo></math>_
diff --git a/tests/wpt/web-platform-tests/scroll-animations/element-based-offset-clamp.html b/tests/wpt/web-platform-tests/scroll-animations/element-based-offset-clamp.html
new file mode 100644
index 00000000000..514eba09c78
--- /dev/null
+++ b/tests/wpt/web-platform-tests/scroll-animations/element-based-offset-clamp.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Test clamping logic of element-based scroll offset for scroll timeline.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/web-animations/testcommon.js"></script>
+<script src="testcommon.js"></script>
+
+<style>
+.scroller {
+ overflow: scroll;
+ height: 500px;
+ width: 500px;
+}
+
+/* Disable scrollbars to simplify the calculations in the test. */
+.scroller {
+ scrollbar-width: 0;
+}
+/*
+Chrome does not support scrollbar-width so we use this non-standard property
+until it does.
+*/
+.scroller::-webkit-scrollbar {
+ display: none;
+}
+
+.contents {
+ height: 1200px;
+ width: 1200px;
+ position: relative;
+}
+
+.vertical #target {
+ background: blue;
+ border-top: 0px solid pink;
+ border-bottom: 0px solid pink;
+ box-sizing: border-box;
+ position: absolute;
+ width: 100%;
+ top: var(--start-position);
+ height: calc(var(--end-position) - var(--start-position));
+}
+
+.horizontal #target {
+ background: blue;
+ border-left: 0px solid pink;
+ border-right: 0px solid pink;
+ box-sizing: border-box;
+ position: absolute;
+ height: 100%;
+ left: var(--start-position);
+ width: calc(var(--end-position) - var(--start-position));
+}
+</style>
+<div id="log"></div>
+<script>
+ 'use strict';
+
+ function createScrollerWithTarget(test, config) {
+ const orientationClass = config.orientation;
+ const positions = `
+ --start-position: ${config.startElementPosition};
+ --end-position: ${config.endElementPosition};`
+
+ var scroller = createDiv(test);
+ scroller.innerHTML =
+ `<div class='contents' style="${positions}">
+ <div id='target'></div>
+ </div>`;
+ scroller.classList.add('scroller');
+ scroller.classList.add(orientationClass);
+
+ return scroller;
+ }
+
+ async function createScrollAnimationTest(description, config) {
+ promise_test(async t => {
+ const scroller = createScrollerWithTarget(t, config);
+ t.add_cleanup(() => scroller.remove());
+
+ const target = scroller.querySelector("#target");
+
+ const timeline = createScrollTimeline(t, {
+ scrollSource: scroller,
+ orientation: config.orientation,
+ timeRange: 1000,
+ fill: 'both',
+ startScrollOffset: {target: target, edge: 'end', ...config.start},
+ endScrollOffset: {target: target, edge:'start', ...config.end }
+ });
+
+ // Wait for new animation frame which allows the timeline to compute new
+ // current time.
+ await waitForNextFrame();
+
+ const animation = createScrollLinkedAnimation(t, timeline);
+ const timeRange = animation.timeline.timeRange;
+
+ // Verify initial start and current times in Idle state.
+ assert_equals(animation.currentTime, null,
+ "The current time is null in Idle state.");
+ assert_equals(animation.startTime, null,
+ "The start time is null in Idle state.");
+
+ animation.play();
+ assert_true(animation.pending, "Animation is in pending state.");
+ // Verify initial start and current times in Pending state.
+ assert_times_equal(animation.currentTime, 0,
+ "The current time is zero in Pending state.");
+ assert_equals(animation.startTime, 0,
+ "The start time is zero in Pending state.");
+
+ await animation.ready;
+ // Verify initial start and current times in Playing state.
+ assert_times_equal(animation.currentTime, 0,
+ "The current time is zero in Playing state.");
+ assert_times_equal(animation.startTime, 0,
+ "The start time is zero in Playing state.");
+
+ // Now do some scrolling and make sure that the Animation current time is
+ // correct.
+ if (config.orientation == 'vertical') {
+ scroller.scrollTo({top: config.scrollTo});
+ assert_equals(scroller.scrollTop, config.scrollTo);
+ } else {
+ scroller.scrollTo({left: config.scrollTo});
+ assert_equals(scroller.scrollLeft, config.scrollTo);
+ }
+
+ await waitForNextFrame();
+
+ assert_times_equal(animation.timeline.currentTime, config.expectedCurrentTime,
+ "The timeline current time corresponds to the scroll position of the scroller.");
+ assert_times_equal(animation.currentTime, config.expectedCurrentTime,
+ "The animation current time corresponds to the scroll position of the scroller.");
+ assert_times_equal(
+ animation.effect.getComputedTiming().localTime,
+ config.expectedCurrentTime,
+ 'Effect local time corresponds to the scroll position of the scroller.');
+ }, description);
+ }
+
+ // We have no scrollbar and the scroller is symmetric on x & y axis so this
+ // static value is axis and platform agnostic.
+ const scroll_max = 700;
+
+ // For this test we setup a single target, and scroll timeline in a way that
+ // our animation runs from when target enters the scroll port until it fully
+ // exits it. Then we create various edgecase scenarios to see the clamping
+ // logic.
+ //
+ // Scroller has 500px heights with 1200px content which translates to
+ // 0 < scroll < 700px
+ //
+ // +----------+ ^
+ // | | |
+ // | Scroller | |
+ // | | | scrollRange
+ // | | |
+ // +----------+ | +--+
+ // |TT| | |TT|
+ // +--+ v +----------+
+ // | |
+ // | Scroller |
+ // | |
+ // | |
+ // +----------+
+ //
+ // For each test the expected timeline start/end is in the comment to help
+ // with the verification.
+ const tests = {
+ // offsets: [0, 600]
+ "no clamping is expected": {
+ startElementPosition: '500px',
+ endElementPosition: '600px',
+ scrollTo: 300,
+ expectedCurrentTime: 500,
+ },
+ // offsets: [0, 600]
+ "start is visible at zero offset and should get clamped": {
+ startElementPosition: '400px',
+ endElementPosition: '600px',
+ scrollTo: 300,
+ expectedCurrentTime: 500,
+ },
+
+ // offsets: [0, scroll_max]
+ "end is not reachable and should be clamped": {
+ startElementPosition: '500px',
+ endElementPosition: '800px',
+ scrollTo: scroll_max / 2,
+ expectedCurrentTime: 500,
+ },
+
+ // offsets: [0, scroll_max]
+ "both start and end are clamped": {
+ startElementPosition: '400px',
+ endElementPosition: '800px',
+ scrollTo: scroll_max / 2,
+ expectedCurrentTime: 500,
+ },
+ };
+
+ for (let orientation of ['vertical', 'horizontal']) {
+ for (let testName in tests) {
+ const description = `Animation start and current times are correct given
+ element-based offsets for orienation ${orientation} and ${testName}.`;
+ const config = tests[testName];
+ config.orientation = orientation;
+ createScrollAnimationTest(description, config);
+ }
+ }
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html
index 33fd35b3adb..5209cc6702e 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Service Worker Global Scope Interfaces</title>
+<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py
index 74b3c8cf930..6a5359bfb8a 100644
--- a/tests/wpt/web-platform-tests/tools/lint/lint.py
+++ b/tests/wpt/web-platform-tests/tools/lint/lint.py
@@ -323,6 +323,41 @@ def check_css_globally_unique(repo_root, paths):
return errors
+def check_unique_testharness_basenames(repo_root, paths):
+ # type: (str, List[str]) -> List[rules.Error]
+ """
+ Checks that all testharness files have unique basename paths.
+
+ The 'basename path' refers to the entire path excluding the extension. For
+ example, 'foo/bar/baz.html' and 'foo/bar/baz.xhtml' have the same basename
+ path, but 'foo/bar/baz.html' and 'foo/qux/baz.html' do not.
+
+ Testharness files with identical basenames have caused issues in downstream
+ infrastructure (see https://github.com/web-platform-tests/wpt/issues/7570),
+ and may cause confusion in general.
+
+ :param repo_root: the repository root
+ :param paths: list of all paths
+ :returns: a list of errors found in ``paths``
+ """
+
+ errors = []
+ file_dict = defaultdict(list)
+ for path in paths:
+ source_file = SourceFile(repo_root, path, "/")
+ if source_file.type != "testharness":
+ continue
+ file_name, file_extension = os.path.splitext(path)
+ file_dict[file_name].append(file_extension)
+ for k, v in file_dict.items():
+ if len(v) == 1:
+ continue
+ context = (', '.join(v),)
+ for extension in v:
+ errors.append(rules.DuplicateBasenamePath.error(k + extension, context))
+ return errors
+
+
def parse_ignorelist(f):
# type: (IO[bytes]) -> Tuple[Ignorelist, Set[Text]]
"""
@@ -930,7 +965,7 @@ def lint(repo_root, paths, output_format, ignore_glob=str()):
path_lints = [check_file_type, check_path_length, check_worker_collision, check_ahem_copy,
check_gitignore_file]
-all_paths_lints = [check_css_globally_unique]
+all_paths_lints = [check_css_globally_unique, check_unique_testharness_basenames]
file_lints = [check_regexp_line, check_parsed, check_python_ast, check_script_metadata,
check_ahem_system_font]
diff --git a/tests/wpt/web-platform-tests/tools/lint/rules.py b/tests/wpt/web-platform-tests/tools/lint/rules.py
index 6fbdc1c360d..695f6cd4e53 100644
--- a/tests/wpt/web-platform-tests/tools/lint/rules.py
+++ b/tests/wpt/web-platform-tests/tools/lint/rules.py
@@ -322,6 +322,15 @@ class TestharnessInOtherType(Rule):
description = "testharness.js included in a %s test"
+class DuplicateBasenamePath(Rule):
+ name = "DUPLICATE-BASENAME-PATH"
+ description = collapse("""
+ File has identical basename path (path excluding extension) as
+ other file(s) (found extensions: %s)
+ """)
+ to_fix = "rename files so they have unique basename paths"
+
+
class Regexp(six.with_metaclass(abc.ABCMeta)):
@abc.abstractproperty
def pattern(self):
diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.html b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.html
new file mode 100644
index 00000000000..f412593b045
--- /dev/null
+++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.js b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.js
new file mode 100644
index 00000000000..a855dab6a77
--- /dev/null
+++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.js
@@ -0,0 +1,6 @@
+// This is a dummy JavaScript file, meant to indicate a 'support' file of
+// sorts that may be included by some test.
+
+function helloWorld() {
+ return 'Hello, world!';
+}
diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.xhtml b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.xhtml
new file mode 100644
index 00000000000..c8b4cc2e522
--- /dev/null
+++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.xhtml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</html>
diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/b.html b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/b.html
new file mode 100644
index 00000000000..f412593b045
--- /dev/null
+++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/b.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir2/a.xhtml b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir2/a.xhtml
new file mode 100644
index 00000000000..c8b4cc2e522
--- /dev/null
+++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir2/a.xhtml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</html>
diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py
index 43da2f9ff21..10d9728b405 100644
--- a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py
+++ b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py
@@ -398,6 +398,65 @@ def test_check_css_globally_unique_ignored_dir(caplog):
assert caplog.text == ""
+def test_check_unique_testharness_basename_same_basename(caplog):
+ # Precondition: There are testharness files with conflicting basename paths.
+ assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.html'))
+ assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.xhtml'))
+
+ with _mock_lint("check_path") as mocked_check_path:
+ with _mock_lint("check_file_contents") as mocked_check_file_contents:
+ rv = lint(_dummy_repo, ["tests/dir1/a.html", "tests/dir1/a.xhtml"], "normal")
+ # There will be one failure for each file.
+ assert rv == 2
+ assert mocked_check_path.call_count == 2
+ assert mocked_check_file_contents.call_count == 2
+ assert "DUPLICATE-BASENAME-PATH" in caplog.text
+
+
+def test_check_unique_testharness_basename_different_name(caplog):
+ # Precondition: There are two testharness files in the same directory with
+ # different names.
+ assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.html'))
+ assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'b.html'))
+
+ with _mock_lint("check_path") as mocked_check_path:
+ with _mock_lint("check_file_contents") as mocked_check_file_contents:
+ rv = lint(_dummy_repo, ["tests/dir1/a.html", "tests/dir1/b.html"], "normal")
+ assert rv == 0
+ assert mocked_check_path.call_count == 2
+ assert mocked_check_file_contents.call_count == 2
+ assert caplog.text == ""
+
+
+def test_check_unique_testharness_basename_different_dir(caplog):
+ # Precondition: There are two testharness files in different directories
+ # with the same basename.
+ assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.html'))
+ assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir2', 'a.xhtml'))
+
+ with _mock_lint("check_path") as mocked_check_path:
+ with _mock_lint("check_file_contents") as mocked_check_file_contents:
+ rv = lint(_dummy_repo, ["tests/dir1/a.html", "tests/dir2/a.xhtml"], "normal")
+ assert rv == 0
+ assert mocked_check_path.call_count == 2
+ assert mocked_check_file_contents.call_count == 2
+ assert caplog.text == ""
+
+
+def test_check_unique_testharness_basename_not_testharness(caplog):
+ # Precondition: There are non-testharness files with conflicting basename paths.
+ assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.html'))
+ assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.js'))
+
+ with _mock_lint("check_path") as mocked_check_path:
+ with _mock_lint("check_file_contents") as mocked_check_file_contents:
+ rv = lint(_dummy_repo, ["tests/dir1/a.html", "tests/dir1/a.js"], "normal")
+ assert rv == 0
+ assert mocked_check_path.call_count == 2
+ assert mocked_check_file_contents.call_count == 2
+ assert caplog.text == ""
+
+
def test_ignore_glob(caplog):
# Lint two files in the ref/ directory, and pass in ignore_glob to omit one
# of them.
diff --git a/tests/wpt/web-platform-tests/url/resources/urltestdata.json b/tests/wpt/web-platform-tests/url/resources/urltestdata.json
index dd40eaa5a9f..1ed95583c12 100644
--- a/tests/wpt/web-platform-tests/url/resources/urltestdata.json
+++ b/tests/wpt/web-platform-tests/url/resources/urltestdata.json
@@ -4482,21 +4482,6 @@
"hash": ""
},
{
- "input": "sc://\u001F!\"$&'()*+,-.;<=>^_`{|}~/",
- "base": "about:blank",
- "href": "sc://%1F!\"$&'()*+,-.;<=>^_`{|}~/",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "%1F!\"$&'()*+,-.;<=>^_`{|}~",
- "hostname": "%1F!\"$&'()*+,-.;<=>^_`{|}~",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
"input": "sc://\u0000/",
"base": "about:blank",
"failure": true
@@ -4649,6 +4634,68 @@
"search": "",
"hash": ""
},
+ "Forbidden host code points",
+ {
+ "input": "http://a<b",
+ "base": "about:blank",
+ "failure": true
+ },
+ {
+ "input": "http://a>b",
+ "base": "about:blank",
+ "failure": true
+ },
+ {
+ "input": "http://a^b",
+ "base": "about:blank",
+ "failure": true
+ },
+ {
+ "input": "non-special://a<b",
+ "base": "about:blank",
+ "failure": true
+ },
+ {
+ "input": "non-special://a>b",
+ "base": "about:blank",
+ "failure": true
+ },
+ {
+ "input": "non-special://a^b",
+ "base": "about:blank",
+ "failure": true
+ },
+ "Allowed host code points",
+ {
+ "input": "http://\u001F!\"$&'()*+,-.;=_`{|}~/",
+ "base": "about:blank",
+ "href": "http://\u001F!\"$&'()*+,-.;=_`{|}~/",
+ "origin": "http://\u001F!\"$&'()*+,-.;=_`{|}~",
+ "protocol": "http:",
+ "username": "",
+ "password": "",
+ "host": "\u001F!\"$&'()*+,-.;=_`{|}~",
+ "hostname": "\u001F!\"$&'()*+,-.;=_`{|}~",
+ "port": "",
+ "pathname": "/",
+ "search": "",
+ "hash": ""
+ },
+ {
+ "input": "sc://\u001F!\"$&'()*+,-.;=_`{|}~/",
+ "base": "about:blank",
+ "href": "sc://%1F!\"$&'()*+,-.;=_`{|}~/",
+ "origin": "null",
+ "protocol": "sc:",
+ "username": "",
+ "password": "",
+ "host": "%1F!\"$&'()*+,-.;=_`{|}~",
+ "hostname": "%1F!\"$&'()*+,-.;=_`{|}~",
+ "port": "",
+ "pathname": "/",
+ "search": "",
+ "hash": ""
+ },
"# Hosts and percent-encoding",
{
"input": "ftp://example.com%80/",
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html
index 37465540d26..fd8719299db 100644
--- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html
+++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html
@@ -302,7 +302,12 @@ promise_test(async t => {
const animA = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' });
const animB = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' });
await animA.finished;
-
+ // It is not guaranteed that the mircrotask PerformCheckpoint() happens before
+ // the animation finish promised got resolved, because the microtask
+ // checkpoint could also be triggered from other source such as the event_loop
+ // Thus we wait for one animation frame to make sure the finished animation is
+ // properly removed.
+ await waitForNextFrame(1);
assert_array_equals(div.getAnimations(), [animB]);
}, 'Does not return an animation that has been removed');
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_tripleclick.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_tripleclick.py
new file mode 100644
index 00000000000..28eaf29f737
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_tripleclick.py
@@ -0,0 +1,34 @@
+from tests.perform_actions.support.refine import filter_dict, get_events
+from tests.support.asserts import assert_move_to_coordinates
+from tests.support.inline import inline
+
+lots_of_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor "\
+ "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud "\
+ " exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
+
+
+def test_tripleclick_at_coordinates(session, mouse_chain):
+ """
+ This test does a triple click on a coordinate. On desktop platforms
+ this will select a paragraph. On mobile this will not have the same
+ desired outcome as taps are handled differently on mobile.
+ """
+ session.url = inline("""<div>
+ {}
+ </div>""".format(lots_of_text))
+ div = session.find.css("div", all=False)
+ div_rect = div.rect
+ div_centre = {
+ "x": div_rect["x"] + div_rect["width"]/2,
+ "y": div_rect["y"] + div_rect["height"]/2
+ }
+ mouse_chain \
+ .pointer_move(div_centre["x"], div_centre["y"]) \
+ .click() \
+ .click() \
+ .click() \
+ .perform()
+
+ actual_text = session.execute_script("return document.getSelection().toString();")
+
+ assert lots_of_text == actual_text
diff --git a/tests/wpt/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html b/tests/wpt/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html
new file mode 100644
index 00000000000..b153c3adac5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html
@@ -0,0 +1,66 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerConnection.prototype.ondatachannel</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../webrtc/RTCPeerConnection-helper.js"></script>
+<script>
+'use strict';
+
+promise_test(async (t) => {
+ const resolver = new Resolver();
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+
+ const dc1 = pc1.createDataChannel('test', {
+ ordered: false,
+ maxRetransmits: 1,
+ protocol: 'custom',
+ priority: 'high'
+ });
+
+ assert_equals(dc1.priority, 'high');
+
+ pc2.ondatachannel = t.step_func((event) => {
+ const dc2 = event.channel;
+
+ assert_equals(dc2.priority, 'high');
+
+ resolver.resolve();
+ });
+
+ exchangeIceCandidates(pc1, pc2);
+ await doSignalingHandshake(pc1, pc2);
+
+ await resolver;
+}, 'In-band negotiated channel created on remote peer should match the same configuration as local ' +
+ 'peer');
+
+promise_test(async (t) => {
+ const resolver = new Resolver();
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+
+ const dc1 = pc1.createDataChannel('');
+
+ assert_equals(dc1.priority, 'low');
+
+ pc2.ondatachannel = t.step_func((event) => {
+ const dc2 = event.channel;
+ assert_equals(dc2.priority, 'low');
+
+ resolver.resolve();
+ });
+
+ exchangeIceCandidates(pc1, pc2);
+ await doSignalingHandshake(pc1, pc2);
+
+ await resolver;
+}, 'In-band negotiated channel created on remote peer should match the same (default) ' +
+ 'configuration as local peer');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html b/tests/wpt/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html
new file mode 100644
index 00000000000..37c1b919b41
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCRtpParameters encodings</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../webrtc/dictionary-helper.js"></script>
+<script src="../webrtc/RTCRtpParameters-helper.js"></script>
+<script>
+ 'use strict';
+
+ promise_test(async t => {
+ const pc = new RTCPeerConnection();
+ t.add_cleanup(() => pc.close());
+ const { sender } = pc.addTransceiver('video', {
+ sendEncodings: [{
+ active: false,
+ priority: 'low',
+ networkPriority: 'low',
+ maxBitrate: 8,
+ maxFramerate: 25,
+ rid: 'foo'
+ }]
+ });
+ await doOfferAnswerExchange(t, pc);
+
+ const param = sender.getParameters();
+ validateSenderRtpParameters(param);
+ const encoding = getFirstEncoding(param);
+
+ assert_equals(encoding.active, false);
+ assert_equals(encoding.priority, 'low');
+ assert_equals(encoding.networkPriority, 'low');
+ }, `sender.getParameters() should return sendEncodings set by addTransceiver()`);
+
+ test_modified_encoding('audio', 'active', false, true,
+ 'setParameters() with modified encoding.active should succeed');
+
+ test_modified_encoding('audio', 'priority', 'very-low', 'high',
+ 'setParameters() with modified encoding.priority should succeed');
+
+ test_modified_encoding('audio', 'networkPriority', 'very-low', 'high',
+ 'setParameters() with modified encoding.networkPriority should succeed');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html
index bc537c26867..68a2623391b 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html
@@ -363,7 +363,6 @@
sendEncodings: [{
dtx: 'enabled',
active: false,
- priority: 'low',
ptime: 5,
maxBitrate: 8,
maxFramerate: 25,
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js
index 29145c8b927..679cb85b12a 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js
@@ -811,6 +811,18 @@ function findTransceiverForSender(pc, sender) {
return null;
}
+function preferCodec(transceiver, mimeType, sdpFmtpLine) {
+ const {codecs} = RTCRtpSender.getCapabilities(transceiver.receiver.track.kind);
+ // sdpFmtpLine is optional, pick the first partial match if not given.
+ const selectedCodecIndex = codecs.findIndex(c => {
+ return c.mimeType === mimeType && (c.sdpFmtpLine === sdpFmtpLine || !sdpFmtpLine);
+ });
+ const selectedCodec = codecs[selectedCodecIndex];
+ codecs.slice(selectedCodecIndex, 1);
+ codecs.unshift(selectedCodec);
+ return transceiver.setCodecPreferences(codecs);
+}
+
// Contains a set of values and will yell at you if you try to add a value twice.
class UniqueSet extends Set {
constructor(items) {
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html
index 2fd33ca5411..8ba98414cbb 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html
@@ -224,7 +224,6 @@ promise_test(async (t) => {
readonly attribute USVString protocol;
readonly attribute boolean negotiated;
readonly attribute unsigned short? id;
- readonly attribute RTCPriorityType priority;
readonly attribute RTCDataChannelState readyState;
...
};
@@ -240,8 +239,6 @@ promise_test(async (t) => {
[[MaxRetransmits]], [[DataChannelProtocol]], and [[DataChannelId]] internal slots to the
corresponding values in configuration.
5. Initialize channel's [[Negotiated]] internal slot to false.
- 6. Initialize channel's [[DataChannelPriority]] internal slot based on the integer priority
- value in configuration, [...]
7. Set channel's [[ReadyState]] slot to connecting.
8. Fire a datachannel event named datachannel with channel at the RTCPeerConnection object.
@@ -259,7 +256,6 @@ promise_test(async (t) => {
ordered: false,
maxRetransmits: 1,
protocol: 'custom',
- priority: 'high'
});
assert_equals(dc1.label, 'test');
@@ -268,7 +264,6 @@ promise_test(async (t) => {
assert_equals(dc1.maxRetransmits, 1);
assert_equals(dc1.protocol, 'custom');
assert_equals(dc1.negotiated, false);
- assert_equals(dc1.priority, 'high');
pc2.ondatachannel = t.step_func((event) => {
const dc2 = event.channel;
@@ -282,7 +277,6 @@ promise_test(async (t) => {
assert_equals(dc2.protocol, 'custom');
assert_equals(dc2.negotiated, false);
assert_equals(dc2.id, dc1.id);
- assert_equals(dc2.priority, 'high');
resolver.resolve();
});
@@ -309,7 +303,6 @@ promise_test(async (t) => {
assert_equals(dc1.maxRetransmits, null);
assert_equals(dc1.protocol, '');
assert_equals(dc1.negotiated, false);
- assert_equals(dc1.priority, 'low');
pc2.ondatachannel = t.step_func((event) => {
const dc2 = event.channel;
@@ -323,7 +316,6 @@ promise_test(async (t) => {
assert_equals(dc2.protocol, '');
assert_equals(dc2.negotiated, false);
assert_equals(dc2.id, dc1.id);
- assert_equals(dc2.priority, 'low');
resolver.resolve();
});
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html
index 00e80885cff..539b2692806 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html
@@ -45,8 +45,6 @@
dictionary RTCRtpEncodingParameters {
boolean active;
- RTCPriorityType priority;
- RTCPriorityType networkPriority;
unsigned long maxBitrate;
[readonly]
@@ -55,13 +53,6 @@
double scaleResolutionDownBy;
};
- enum RTCPriorityType {
- "very-low",
- "low",
- "medium",
- "high"
- };
-
getParameters
- encodings is set to the value of the [[send encodings]] internal slot.
*/
@@ -128,8 +119,6 @@
const { sender } = pc.addTransceiver('video', {
sendEncodings: [{
active: false,
- priority: 'low',
- networkPriority: 'low',
maxBitrate: 8,
maxFramerate: 25,
rid: 'foo'
@@ -142,8 +131,6 @@
const encoding = getFirstEncoding(param);
assert_equals(encoding.active, false);
- assert_equals(encoding.priority, 'low');
- assert_equals(encoding.networkPriority, 'low');
assert_equals(encoding.maxBitrate, 8);
assert_not_own_property(encoding, "rid", "rid should be removed with a single encoding");
@@ -259,12 +246,6 @@
test_modified_encoding('audio', 'active', false, true,
'setParameters() with modified encoding.active should succeed');
- test_modified_encoding('audio', 'priority', 'very-low', 'high',
- 'setParameters() with modified encoding.priority should succeed');
-
- test_modified_encoding('audio', 'networkPriority', 'very-low', 'high',
- 'setParameters() with modified encoding.networkPriority should succeed');
-
test_modified_encoding('audio', 'maxBitrate', 10000, 20000,
'setParameters() with modified encoding.maxBitrate should succeed');
diff --git a/tests/wpt/web-platform-tests/webrtc/simulcast/h264.https.html b/tests/wpt/web-platform-tests/webrtc/simulcast/h264.https.html
new file mode 100644
index 00000000000..89e18bcd51c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/simulcast/h264.https.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerConnection Simulcast Tests</title>
+<meta name="timeout" content="long">
+<script src="../third_party/sdp/sdp.js"></script>
+<script src="simulcast.js"></script>
+<script src="../RTCPeerConnection-helper.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+promise_test(async t => {
+ assert_implements('getCapabilities' in RTCRtpSender, 'RTCRtpSender.getCapabilities not supported');
+ assert_implements(RTCRtpSender.getCapabilities('video').codecs.find(c => c.mimeType === 'video/H264'), 'H264 not supported');
+
+ const rids = [0, 1, 2];
+ const pc1 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc2.close());
+
+ return negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, {mimeType: 'video/H264'});
+}, 'H264 simulcast setup with three spatial layers');
+</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js b/tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js
index d8911f443e7..af804c03e86 100644
--- a/tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js
+++ b/tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js
@@ -76,7 +76,7 @@ function swapRidAndMidExtensionsInSimulcastAnswer(answer, localDescription, rids
return sdp;
}
-async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2) {
+async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, codec) {
exchangeIceCandidates(pc1, pc2);
const metadataToBeLoaded = [];
@@ -96,10 +96,13 @@ async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2) {
// Use getUserMedia as getNoiseStream does not have enough entropy to ramp-up.
const stream = await navigator.mediaDevices.getUserMedia({video: {width: 1280, height: 720}});
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
- pc1.addTransceiver(stream.getVideoTracks()[0], {
+ const transceiver = pc1.addTransceiver(stream.getVideoTracks()[0], {
streams: [stream],
sendEncodings: rids.map(rid => {rid}),
});
+ if (codec) {
+ preferCodec(transceiver, codec.mimeType, codec.sdpFmtpLine);
+ }
const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer),
diff --git a/tests/wpt/web-platform-tests/webrtc/simulcast/vp8.https.html b/tests/wpt/web-platform-tests/webrtc/simulcast/vp8.https.html
new file mode 100644
index 00000000000..e3567e61c21
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/simulcast/vp8.https.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerConnection Simulcast Tests</title>
+<meta name="timeout" content="long">
+<script src="../third_party/sdp/sdp.js"></script>
+<script src="simulcast.js"></script>
+<script src="../RTCPeerConnection-helper.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+promise_test(async t => {
+ assert_implements('getCapabilities' in RTCRtpSender, 'RTCRtpSender.getCapabilities not supported');
+ assert_implements(RTCRtpSender.getCapabilities('video').codecs.find(c => c.mimeType === 'video/VP8'), 'VP8 not supported');
+
+ const rids = [0, 1, 2];
+ const pc1 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc2.close());
+
+ return negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, {mimeType: 'video/VP8'});
+}, 'VP8 simulcast setup with three spatial layers');
+</script>