aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2019-10-06 10:58:10 +0000
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2019-10-06 14:35:02 +0000
commit393fa37c0ba9fa9c134e56cb54601d17534dd34f (patch)
tree06efe7399bd6596b37f956f209dd45dc61370d84
parent1318ea9d0245b7a768d61be6727122cf93b3a834 (diff)
downloadservo-393fa37c0ba9fa9c134e56cb54601d17534dd34f.tar.gz
servo-393fa37c0ba9fa9c134e56cb54601d17534dd34f.zip
Update web-platform-tests to revision daac9dc806e9571ea856253fcc35a94e73d4f711
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini2
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini6
-rw-r--r--tests/wpt/metadata/MANIFEST.json293
-rw-r--r--tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini1
-rw-r--r--tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini2
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini10
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini4
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini5
-rw-r--r--tests/wpt/metadata/html/dom/idlharness.https.html.ini15
-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/autofocus/skip-document-with-fragment.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini7
-rw-r--r--tests/wpt/metadata/resource-timing/nested-context-navigations-iframe.html.ini2
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/processing-model/delay-time-clamping.html.ini4
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/processing-model/feedback-delay-time.html.ini4
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/.taskcluster.yml14
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable.html42
-rw-r--r--tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js2
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-box-removing-triggering-anonymous-merge.html14
-rw-r--r--tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js11
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/floats/adjoining-floats-dynamic.html35
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-001-ref.html9
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-001.html13
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-002-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-002.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/animations/clip-interpolation.html117
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/parsing/mask-invalid.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html62
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-008-ref.html49
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-008.html46
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/float-with-relpos-and-transform.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-005-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-005.https.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html9
-rw-r--r--tests/wpt/web-platform-tests/docs/running-tests/webkitgtk_minibrowser.md12
-rw-r--r--tests/wpt/web-platform-tests/html/dom/idlharness.https.html1
-rw-r--r--tests/wpt/web-platform-tests/interfaces/feature-policy.idl1
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl2
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html5
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html5
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/html5-tree/tabindex-001.html4
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-bitrate.https.html226
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-creation.https.html4
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html28
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html147
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html7
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/idlharness.window.js6
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webxr-test.js28
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-add-async.https.html11
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.js2
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-add-async-worker.js6
-rwxr-xr-xtests/wpt/web-platform-tests/tools/ci/run_tc.py25
-rw-r--r--tests/wpt/web-platform-tests/tools/docker/Dockerfile.webkitgtk23
-rw-r--r--tests/wpt/web-platform-tests/tools/docker/README.md2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py14
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/epiphany.py7
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py19
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/cycle-witout-delay.html35
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/delay-time-clamping.html38
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/feedback-delay-time.html36
67 files changed, 1485 insertions, 146 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
index a9e46713244..76b398963ae 100644
--- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
- expected: TIMEOUT
+ expected: FAIL
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL
diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
index 947e223fb28..3a3d15b8406 100644
--- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
@@ -14,6 +14,9 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
+ [Revoke blob URL after calling fetch, fetch should succeed]
+ expected: FAIL
+
[url-with-fetch.any.html]
[Untitled]
@@ -34,3 +37,6 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
+ [Revoke blob URL after calling fetch, fetch should succeed]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 30fa6ef6cc5..39d79ea92bf 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -48803,6 +48803,18 @@
{}
]
],
+ "css/CSS2/floats/adjoining-floats-dynamic.html": [
+ [
+ "css/CSS2/floats/adjoining-floats-dynamic.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/floats/float-no-content-beside-001.html": [
[
"css/CSS2/floats/float-no-content-beside-001.html",
@@ -95263,6 +95275,30 @@
{}
]
],
+ "css/CSS2/text/bidi-span-001.html": [
+ [
+ "css/CSS2/text/bidi-span-001.html",
+ [
+ [
+ "/css/CSS2/text/bidi-span-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/CSS2/text/bidi-span-002.html": [
+ [
+ "css/CSS2/text/bidi-span-002.html",
+ [
+ [
+ "/css/CSS2/text/bidi-span-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/text/letter-spacing-004.xht": [
[
"css/CSS2/text/letter-spacing-004.xht",
@@ -134173,6 +134209,18 @@
{}
]
],
+ "css/css-multicol/multicol-span-all-children-height-008.html": [
+ [
+ "css/css-multicol/multicol-span-all-children-height-008.html",
+ [
+ [
+ "/css/css-multicol/multicol-span-all-children-height-008-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-multicol/multicol-span-all-dynamic-add-001.html": [
[
"css/css-multicol/multicol-span-all-dynamic-add-001.html",
@@ -135169,6 +135217,18 @@
{}
]
],
+ "css/css-overflow/float-with-relpos-and-transform.html": [
+ [
+ "css/css-overflow/float-with-relpos-and-transform.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-overflow/input-scrollable-region-001.html": [
[
"css/css-overflow/input-scrollable-region-001.html",
@@ -135805,6 +135865,18 @@
{}
]
],
+ "css/css-paint-api/geometry-border-image-005.https.html": [
+ [
+ "css/css-paint-api/geometry-border-image-005.https.html",
+ [
+ [
+ "/css/css-paint-api/geometry-border-image-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-paint-api/geometry-with-float-size.https.html": [
[
"css/css-paint-api/geometry-with-float-size.https.html",
@@ -239595,6 +239667,12 @@
"css/CSS2/tables/table-vertical-align-baseline-001-ref.xht": [
[]
],
+ "css/CSS2/text/bidi-span-001-ref.html": [
+ []
+ ],
+ "css/CSS2/text/bidi-span-002-ref.html": [
+ []
+ ],
"css/CSS2/text/letter-spacing-004-ref.xht": [
[]
],
@@ -251436,6 +251514,9 @@
"css/css-multicol/multicol-span-all-children-height-007-ref.html": [
[]
],
+ "css/css-multicol/multicol-span-all-children-height-008-ref.html": [
+ []
+ ],
"css/css-multicol/multicol-span-all-dynamic-add-001-ref.html": [
[]
],
@@ -251991,6 +252072,9 @@
"css/css-paint-api/geometry-border-image-004-ref.html": [
[]
],
+ "css/css-paint-api/geometry-border-image-005-ref.html": [
+ []
+ ],
"css/css-paint-api/geometry-with-float-size-ref.html": [
[]
],
@@ -280056,6 +280140,9 @@
"service-workers/service-worker/resources/fetch-csp-iframe.html.sub.headers": [
[]
],
+ "service-workers/service-worker/resources/fetch-event-add-async-worker.js": [
+ []
+ ],
"service-workers/service-worker/resources/fetch-event-after-navigation-within-page-iframe.html": [
[]
],
@@ -292772,6 +292859,12 @@
{}
]
],
+ "2dcontext/imagebitmap/createImageBitmap-serializable.html": [
+ [
+ "2dcontext/imagebitmap/createImageBitmap-serializable.html",
+ {}
+ ]
+ ],
"2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html": [
[
"2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html",
@@ -308579,6 +308672,12 @@
}
]
],
+ "compat/webkit-box-removing-triggering-anonymous-merge.html": [
+ [
+ "compat/webkit-box-removing-triggering-anonymous-merge.html",
+ {}
+ ]
+ ],
"compat/webkit-gradient-comma.html": [
[
"compat/webkit-gradient-comma.html",
@@ -319597,6 +319696,12 @@
{}
]
],
+ "css/css-masking/animations/clip-interpolation.html": [
+ [
+ "css/css-masking/animations/clip-interpolation.html",
+ {}
+ ]
+ ],
"css/css-masking/animations/clip-path-interpolation.html": [
[
"css/css-masking/animations/clip-path-interpolation.html",
@@ -319699,6 +319804,12 @@
{}
]
],
+ "css/css-masking/parsing/mask-invalid.html": [
+ [
+ "css/css-masking/parsing/mask-invalid.html",
+ {}
+ ]
+ ],
"css/css-masking/parsing/mask-position-invalid.html": [
[
"css/css-masking/parsing/mask-position-invalid.html",
@@ -319729,6 +319840,12 @@
{}
]
],
+ "css/css-masking/parsing/mask-valid.sub.html": [
+ [
+ "css/css-masking/parsing/mask-valid.sub.html",
+ {}
+ ]
+ ],
"css/css-multicol/abspos-in-multicol-with-spanner-crash.html": [
[
"css/css-multicol/abspos-in-multicol-with-spanner-crash.html",
@@ -367623,6 +367740,12 @@
{}
]
],
+ "mediacapture-record/MediaRecorder-bitrate.https.html": [
+ [
+ "mediacapture-record/MediaRecorder-bitrate.https.html",
+ {}
+ ]
+ ],
"mediacapture-record/MediaRecorder-creation.https.html": [
[
"mediacapture-record/MediaRecorder-creation.https.html",
@@ -367659,6 +367782,12 @@
{}
]
],
+ "mediacapture-record/MediaRecorder-mimetype.html": [
+ [
+ "mediacapture-record/MediaRecorder-mimetype.html",
+ {}
+ ]
+ ],
"mediacapture-record/MediaRecorder-pause-resume.html": [
[
"mediacapture-record/MediaRecorder-pause-resume.html",
@@ -397429,6 +397558,12 @@
{}
]
],
+ "service-workers/service-worker/fetch-event-add-async.https.html": [
+ [
+ "service-workers/service-worker/fetch-event-add-async.https.html",
+ {}
+ ]
+ ],
"service-workers/service-worker/fetch-event-after-navigation-within-page.https.html": [
[
"service-workers/service-worker/fetch-event-after-navigation-within-page.https.html",
@@ -412852,6 +412987,24 @@
}
]
],
+ "webaudio/the-audio-api/processing-model/cycle-witout-delay.html": [
+ [
+ "webaudio/the-audio-api/processing-model/cycle-witout-delay.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/processing-model/delay-time-clamping.html": [
+ [
+ "webaudio/the-audio-api/processing-model/delay-time-clamping.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/processing-model/feedback-delay-time.html": [
+ [
+ "webaudio/the-audio-api/processing-model/feedback-delay-time.html",
+ {}
+ ]
+ ],
"webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html": [
[
"webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html",
@@ -446890,7 +447043,7 @@
"support"
],
".taskcluster.yml": [
- "b23cc93e633021686192b5cc1acbb7d8b6b3fe96",
+ "adb81d6c0271ac5d8061782eac1b3e181984eb68",
"support"
],
".well-known/README.md": [
@@ -449393,6 +449546,10 @@
"9f19f6ae66b58f93c23ba8aeb095838d9a6cc5c9",
"testharness"
],
+ "2dcontext/imagebitmap/createImageBitmap-serializable.html": [
+ "44e7a40351080d47675edb426f78cec4fa795920",
+ "testharness"
+ ],
"2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html": [
"f58825cc371f04bf186ba23fa869391f3d2d3f6c",
"testharness"
@@ -458602,7 +458759,7 @@
"support"
],
"common/security-features/resources/common.sub.js": [
- "12776b1a4b55dc76415ea63abc4a93dab2fedd2a",
+ "c974e83b9604d5770ffb849a1b77f963d3f7955b",
"support"
],
"common/security-features/resources/common.sub.js.headers": [
@@ -458825,6 +458982,10 @@
"06e728342cdb63a72b420423b40b6e32ae3e2162",
"reftest"
],
+ "compat/webkit-box-removing-triggering-anonymous-merge.html": [
+ "8506425548b6ff97491e388dc1a1f3830aa790fc",
+ "testharness"
+ ],
"compat/webkit-gradient-comma.html": [
"b288a9a43fe8eba26a4ef37bd5439cbe75047885",
"testharness"
@@ -476510,7 +476671,7 @@
"testharness"
],
"contacts/contacts-select.https.window.js": [
- "8d1fdfbfdff539e7dd17da4b0e28ef01ae47a2d5",
+ "5503ea6968a8d2bd89e49a67bf0def695738d68d",
"testharness"
],
"contacts/resources/helpers.js": [
@@ -501105,6 +501266,10 @@
"59843ae54b64f6ce4f7e616d4be491c911ea84cf",
"support"
],
+ "css/CSS2/floats/adjoining-floats-dynamic.html": [
+ "3446d972d72ec8832ab8ac320a84dff609676ae3",
+ "reftest"
+ ],
"css/CSS2/floats/computed-float-position-absolute.html": [
"ad9220b3a06085c458f7100c896100fb32f562e8",
"testharness"
@@ -531953,6 +532118,22 @@
"ad267c450014629fbd309ed6825d94379d2fe882",
"visual"
],
+ "css/CSS2/text/bidi-span-001-ref.html": [
+ "594847b128522adae1b7b49dbe739b00012feb9b",
+ "support"
+ ],
+ "css/CSS2/text/bidi-span-001.html": [
+ "b645a2b548c46b064b1a5f3012240a3947c772b9",
+ "reftest"
+ ],
+ "css/CSS2/text/bidi-span-002-ref.html": [
+ "6cc72c208a994a9e6ee99aac23689d3567e3a465",
+ "support"
+ ],
+ "css/CSS2/text/bidi-span-002.html": [
+ "d4fc6de070d23ebe8817e9a299c44e48cad256a9",
+ "reftest"
+ ],
"css/CSS2/text/bidi-text-decoration-underline-001.xht": [
"e3efb521f2208113ad3278a261348bc5997240f5",
"visual"
@@ -568461,6 +568642,10 @@
"7f92755b092845d3d550568e0572453801451f3d",
"support"
],
+ "css/css-masking/animations/clip-interpolation.html": [
+ "322ebd724e8524e85d8afe369b6bafaabbec8c79",
+ "testharness"
+ ],
"css/css-masking/animations/clip-path-interpolation.html": [
"21c34f1f2b75ec7345a97b00db62a49b038cf026",
"testharness"
@@ -569481,6 +569666,10 @@
"d60802b897fedab122fb4661f312bd5358785570",
"testharness"
],
+ "css/css-masking/parsing/mask-invalid.html": [
+ "367049cf19ffc2390316470dec3d789fbbee36a8",
+ "testharness"
+ ],
"css/css-masking/parsing/mask-position-invalid.html": [
"c246a1e795eea6a9e31fe1155d55ceb8532d6032",
"testharness"
@@ -569501,6 +569690,10 @@
"31a528381af7d0bb3b4d1a30e1b3f20a0f2787ce",
"testharness"
],
+ "css/css-masking/parsing/mask-valid.sub.html": [
+ "63aed3e33c46bdbf2c1bf8c8b8758daff7ab0bee",
+ "testharness"
+ ],
"css/css-masking/test-mask-ref.html": [
"938235acbd36309fb969c55f161239bcd5ab969e",
"support"
@@ -570638,11 +570831,11 @@
"reftest"
],
"css/css-multicol/multicol-span-all-children-height-006-ref.html": [
- "85dfa522c7de9152020342ddb67484b7f1e6977b",
+ "261ff480c38c70e5bf99b9886919088647fbef9e",
"support"
],
"css/css-multicol/multicol-span-all-children-height-006.html": [
- "479fb2d0ced056f24b39126fa29574a6a811f8e6",
+ "5c1e634c2b2c25684eb55d58a5e4c8b7ca9de7ae",
"reftest"
],
"css/css-multicol/multicol-span-all-children-height-007-ref.html": [
@@ -570653,6 +570846,14 @@
"80f34b45ded8af29c0600a6fa78584cb22b342fc",
"reftest"
],
+ "css/css-multicol/multicol-span-all-children-height-008-ref.html": [
+ "80d783283fb7a6b02bac081cf9fcfe0017e9550b",
+ "support"
+ ],
+ "css/css-multicol/multicol-span-all-children-height-008.html": [
+ "0d7bd183841d5d4e55380d157461c9a8b9378a62",
+ "reftest"
+ ],
"css/css-multicol/multicol-span-all-dynamic-add-001-ref.html": [
"9f76ea15a0daa7753e76ad9b9a99948988c702d3",
"support"
@@ -571501,6 +571702,10 @@
"b9ba7acd150e5022de5c5208cd7f5f7d4dde93c3",
"support"
],
+ "css/css-overflow/float-with-relpos-and-transform.html": [
+ "6024b7261750e0c5dc4a681dccee2ab72b83abca",
+ "reftest"
+ ],
"css/css-overflow/inheritance.html": [
"976406be413b9bdc8cef4acab0a0cd29df2dd43d",
"testharness"
@@ -572253,6 +572458,14 @@
"0f483cd5d19acf4923e60a9f59f55b2bd1e2d0d0",
"reftest"
],
+ "css/css-paint-api/geometry-border-image-005-ref.html": [
+ "16d230411349ff25e2064fdc2eadd8992769dfa7",
+ "support"
+ ],
+ "css/css-paint-api/geometry-border-image-005.https.html": [
+ "efdd7fdf1b9673657b8a60bfa5851ff694489d87",
+ "reftest"
+ ],
"css/css-paint-api/geometry-with-float-size-ref.html": [
"c24a9d7bc0d9dd251186faec68d5bacb15db8c77",
"support"
@@ -573018,7 +573231,7 @@
"testharness"
],
"css/css-position/position-absolute-replaced-minmax.html": [
- "a5c0d516472b9a2a1be4d391f38cac412e6aa7d1",
+ "00780d650fae639b37f4e82eabcd77794eb1aae2",
"testharness"
],
"css/css-position/position-fixed-at-bottom-right-on-viewport.html": [
@@ -620310,7 +620523,7 @@
"support"
],
"docs/running-tests/webkitgtk_minibrowser.md": [
- "b12859bcca9e6e90998735c97932c42d60aecba4",
+ "7aac81e5fce660db84969f9c0a7cae429a257207",
"support"
],
"docs/test-suite-design.md": [
@@ -633606,7 +633819,7 @@
"testharness"
],
"html/dom/idlharness.https.html": [
- "0d3f1160d2819601afb2168bc15bfeeaddfed6f1",
+ "33ad5c6f6169a7e376aaadeba1b8df4dd6815f7c",
"testharness"
],
"html/dom/idlharness.worker.js": [
@@ -650642,7 +650855,7 @@
"support"
],
"interfaces/feature-policy.idl": [
- "85601321a17f3d0a46d2246642d59ef44d916398",
+ "6f0d69fc378d91a1ededf21b273216061099c278",
"support"
],
"interfaces/fetch.idl": [
@@ -650998,7 +651211,7 @@
"support"
],
"interfaces/webrtc-stats.idl": [
- "e41d7357b1a20328cd543c118005f2d9f77f0773",
+ "2b823047ff1e37a13e9d2e71711360944019fcb5",
"support"
],
"interfaces/webrtc.idl": [
@@ -652178,11 +652391,11 @@
"reftest"
],
"mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html": [
- "f0b5bdd9f04e795400f2741b47ebb82d0d3a61cb",
+ "c67ac03f5dcc90d24b15ae89c269c99bb75e2c48",
"support"
],
"mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html": [
- "d7f0627059ad9e400480d574b5e83cff9113b107",
+ "9b71389e74dd1125135aa69fc3c8a47122d7a4a8",
"reftest"
],
"mathml/presentation-markup/mrow/inferred-mrow-baseline.html": [
@@ -652998,7 +653211,7 @@
"reftest"
],
"mathml/relations/html5-tree/tabindex-001.html": [
- "aaf82f77caa87cadd4dfa4706a2bc15192006a6a",
+ "8f8536881416584656277eeaaed4604b7f6def4d",
"testharness"
],
"mathml/relations/html5-tree/tabindex-002.html": [
@@ -653937,8 +654150,12 @@
"d59e5e30845eaef12bab6419e348a01779313c56",
"support"
],
+ "mediacapture-record/MediaRecorder-bitrate.https.html": [
+ "472c0661cb7b5981b2de671458e2da3592516d0c",
+ "testharness"
+ ],
"mediacapture-record/MediaRecorder-creation.https.html": [
- "419211c9dcf63241b63cd11d671a0800b3998d83",
+ "b724ca14503a87ab06eb5e12c469fccd3dd3fde9",
"testharness"
],
"mediacapture-record/MediaRecorder-destroy-script-execution.html": [
@@ -653958,11 +654175,15 @@
"testharness"
],
"mediacapture-record/MediaRecorder-events-and-exceptions.html": [
- "58b9c08ecab0ff8872748f5215743379876ea5ef",
+ "cddc07e5079481e0ac7b44d1c223d88bea9e64fe",
+ "testharness"
+ ],
+ "mediacapture-record/MediaRecorder-mimetype.html": [
+ "ddc56e9cb750c59753e238c8ec39c6e1f128790b",
"testharness"
],
"mediacapture-record/MediaRecorder-pause-resume.html": [
- "39a8883664550af1a48ae965d4789a0d6df97d28",
+ "33dfd8560c04d9e9de335b13cfcb33428a6b7e24",
"testharness"
],
"mediacapture-record/MediaRecorder-stop.html": [
@@ -653970,7 +654191,7 @@
"testharness"
],
"mediacapture-record/idlharness.window.js": [
- "86f5a158822156b54e776639fb9c7504f0ff7498",
+ "2e304b0a0e6ece247614c5c692ef0e368f5ad216",
"testharness"
],
"mediacapture-record/support/MediaRecorder-iframe.html": [
@@ -677394,7 +677615,7 @@
"support"
],
"resources/chromium/webxr-test.js": [
- "df91abf6d7f2c2cb10dfd5798f27a7d96a6ad339",
+ "94031657b4b6d2698739eddf0bd4028e0aa8fdea",
"support"
],
"resources/chromium/webxr-test.js.headers": [
@@ -679513,6 +679734,10 @@
"4f176220d6100c4efb1bfda817b84cf5f53a4f3d",
"testharness"
],
+ "service-workers/service-worker/fetch-event-add-async.https.html": [
+ "ac13e4f41675c22669862751b9209835d7210231",
+ "testharness"
+ ],
"service-workers/service-worker/fetch-event-after-navigation-within-page.https.html": [
"4812d8a91551edae84b5e2805804fc9d8899f3e9",
"testharness"
@@ -679678,7 +679903,7 @@
"testharness"
],
"service-workers/service-worker/global-serviceworker.https.any.js": [
- "489b37f83e1c21809e9b0b63d0f0e59db23d197c",
+ "2335f635b2e6ad50b2d1bf4117eb08b19d3ac3b1",
"testharness"
],
"service-workers/service-worker/http-to-https-redirect-and-register.https.html": [
@@ -680349,6 +680574,10 @@
"300efe049b5de8810f7c44863e11c280ca2926f3",
"support"
],
+ "service-workers/service-worker/resources/fetch-event-add-async-worker.js": [
+ "a5a44a57c99cb3a289f0015168609852729d50a5",
+ "support"
+ ],
"service-workers/service-worker/resources/fetch-event-after-navigation-within-page-iframe.html": [
"bf8a6d5ce51facdd65f30ce5750417c7fcf2ef02",
"support"
@@ -688198,7 +688427,7 @@
"support"
],
"tools/ci/run_tc.py": [
- "b2826bf075e9b1e82ee3d021003134930231f556",
+ "3201ff3a9d309719da2fe038c73d1b144ffdb5d2",
"support"
],
"tools/ci/taskcluster-run.py": [
@@ -688234,11 +688463,11 @@
"support"
],
"tools/docker/Dockerfile.webkitgtk": [
- "8d792b36a473059c41d9e68789bab7ba8a7c2855",
+ "58080def60ff4f26277c96015a8c2968254907f3",
"support"
],
"tools/docker/README.md": [
- "c444e4a957fd0ba55e0d51a0e87b9562550e0add",
+ "6bcc47c7744e4cc8be96b1c9590878955080da27",
"support"
],
"tools/docker/__init__.py": [
@@ -693310,7 +693539,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/base.py": [
- "08b5880a1b7e903fb2ca937d7f3aef43fc44b2f6",
+ "d17229da4686548e05c228a7345194e0d8f4d8dd",
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome.py": [
@@ -693338,11 +693567,11 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/epiphany.py": [
- "599ec9f3110f89f5d64effe98130ede930f1fb7c",
+ "37e2f21421ae54e0c2a6b11cb0763d65b5f3ea72",
"support"
],
"tools/wptrunner/wptrunner/browsers/firefox.py": [
- "290fcff5ab22bd5ca19cedb4d3f38f5b8197768f",
+ "1763ff44b4e55c14c8f5d753defb3ba39e017262",
"support"
],
"tools/wptrunner/wptrunner/browsers/firefox_android.py": [
@@ -693386,7 +693615,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py": [
- "65f78125ad7a89d43c08b6986bf41145cc71d04c",
+ "3c4947335bf32fd64c5c539dc08b851106c2f254",
"support"
],
"tools/wptrunner/wptrunner/config.py": [
@@ -697405,6 +697634,18 @@
"2778493e3b6c12d4c00c77bd975e845063621522",
"support"
],
+ "webaudio/the-audio-api/processing-model/cycle-witout-delay.html": [
+ "ed26ad2ced2c226d3388f1941653f921f6d93656",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/processing-model/delay-time-clamping.html": [
+ "3f8ed24429a7c4532610c7a42e366dc3aff0c7d6",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/processing-model/feedback-delay-time.html": [
+ "50c8e455b908af3bcb42b4fcfda157d54b9f9abe",
+ "testharness"
+ ],
"webaudio/the-audio-api/the-analysernode-interface/.gitkeep": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
diff --git a/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini
new file mode 100644
index 00000000000..5496474410b
--- /dev/null
+++ b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini
@@ -0,0 +1,2 @@
+[mix-blend-mode-animation.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
index 03f2f3fe9d1..c511d92d674 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini
@@ -1,5 +1,4 @@
[perspective-interpolation.html]
- expected: CRASH
[ perspective interpolation]
expected: FAIL
diff --git a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini b/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini
deleted file mode 100644
index c3916f8555d..00000000000
--- a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[contenttype_txt.html]
- expected: CRASH
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 9aa8d1390da..6960c088389 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -312,15 +312,9 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html */*]
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
- expected: FAIL
-
- [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
- expected: FAIL
-
- [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
+ [<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index c7413d589dc..c0374f76e40 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,9 +56,9 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript;charset=windows-1252 error text/javascript]
+ [separate text/javascript error]
expected: FAIL
- [separate text/javascript;charset=windows-1252 text/javascript]
+ [separate 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 b2cd43ef76c..536384f36e1 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,9 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
- [X-Content-Type-Options%3A%20'NosniFF']
- expected: FAIL
-
- [X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
+ [X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL
diff --git a/tests/wpt/metadata/html/dom/idlharness.https.html.ini b/tests/wpt/metadata/html/dom/idlharness.https.html.ini
index 76078aa9780..a9257cabc65 100644
--- a/tests/wpt/metadata/html/dom/idlharness.https.html.ini
+++ b/tests/wpt/metadata/html/dom/idlharness.https.html.ini
@@ -764,9 +764,6 @@
[OffscreenCanvasRenderingContext2D interface: attribute miterLimit]
expected: FAIL
- [MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "source" with the proper type]
- expected: FAIL
-
[Path2D interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
@@ -1585,9 +1582,6 @@
[Window interface: operation prompt(DOMString, DOMString)]
expected: FAIL
- [Window interface: window must inherit property "self" with the proper type]
- expected: FAIL
-
[Document interface: documentWithHandlers must inherit property "dir" with the proper type]
expected: FAIL
@@ -1660,9 +1654,6 @@
[Window interface: window must inherit property "onauxclick" with the proper type]
expected: FAIL
- [Window interface: window must inherit property "parent" with the proper type]
- expected: FAIL
-
[Window interface: calling createImageBitmap(ImageBitmapSource, long, long, long, long, ImageBitmapOptions) on window with too few arguments must throw TypeError]
expected: FAIL
@@ -1672,9 +1663,6 @@
[Document interface: new Document() must inherit property "queryCommandState(DOMString)" with the proper type]
expected: FAIL
- [Window interface: window must inherit property "frames" with the proper type]
- expected: FAIL
-
[Window interface: window must inherit property "onformdata" with the proper type]
expected: FAIL
@@ -1747,9 +1735,6 @@
[Document interface: new Document() must inherit property "alinkColor" with the proper type]
expected: FAIL
- [Document interface: iframe.contentDocument must inherit property "defaultView" with the proper type]
- expected: FAIL
-
[Document interface: new Document() must inherit property "queryCommandEnabled(DOMString)" with the proper type]
expected: FAIL
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/autofocus/skip-document-with-fragment.html.ini b/tests/wpt/metadata/html/semantics/forms/autofocus/skip-document-with-fragment.html.ini
index 6852d7663de..c12c0f8ae48 100644
--- a/tests/wpt/metadata/html/semantics/forms/autofocus/skip-document-with-fragment.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/autofocus/skip-document-with-fragment.html.ini
@@ -1,8 +1,4 @@
[skip-document-with-fragment.html]
- expected: TIMEOUT
[Autofocus elements in iframed documents with URL fragments should be skipped.]
expected: FAIL
- [Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
new file mode 100644
index 00000000000..9e522297c94
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
@@ -0,0 +1,7 @@
+[toggleEvent.html]
+ [Calling open twice on 'details' fires only one toggle event]
+ expected: FAIL
+
+ [Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/resource-timing/nested-context-navigations-iframe.html.ini b/tests/wpt/metadata/resource-timing/nested-context-navigations-iframe.html.ini
index ec371a1bf72..8594361ff44 100644
--- a/tests/wpt/metadata/resource-timing/nested-context-navigations-iframe.html.ini
+++ b/tests/wpt/metadata/resource-timing/nested-context-navigations-iframe.html.ini
@@ -1,5 +1,5 @@
[nested-context-navigations-iframe.html]
- expected: TIMEOUT
+ expected: CRASH
[Test that iframe navigations are not observable by the parent, even after history navigations by the parent]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/processing-model/delay-time-clamping.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/processing-model/delay-time-clamping.html.ini
new file mode 100644
index 00000000000..34175cfb5a9
--- /dev/null
+++ b/tests/wpt/metadata/webaudio/the-audio-api/processing-model/delay-time-clamping.html.ini
@@ -0,0 +1,4 @@
+[delay-time-clamping.html]
+ [Test that a DelayNode allows a feedback loop of a single rendering quantum]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/processing-model/feedback-delay-time.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/processing-model/feedback-delay-time.html.ini
new file mode 100644
index 00000000000..18a7cd2f6b4
--- /dev/null
+++ b/tests/wpt/metadata/webaudio/the-audio-api/processing-model/feedback-delay-time.html.ini
@@ -0,0 +1,4 @@
+[feedback-delay-time.html]
+ [Test that a DelayNode allows a feedback loop of a single rendering quantum]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index 66bd350083b..a56bad443a2 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html]
+ expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
deleted file mode 100644
index 80f9a4f15b8..00000000000
--- a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[Worker-constructor.html]
- expected: ERROR
diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
new file mode 100644
index 00000000000..dbea4f293ad
--- /dev/null
+++ b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
@@ -0,0 +1,2 @@
+[transition_calc_implicit.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/web-platform-tests/.taskcluster.yml b/tests/wpt/web-platform-tests/.taskcluster.yml
index b23cc93e633..adb81d6c027 100644
--- a/tests/wpt/web-platform-tests/.taskcluster.yml
+++ b/tests/wpt/web-platform-tests/.taskcluster.yml
@@ -12,15 +12,16 @@ tasks:
$flatten:
$match: {
event.ref == "refs/heads/master": [{name: firefox, channel: nightly}, {name: chrome, channel: dev}],
- event.ref == "refs/heads/epochs/daily": [{name: firefox, channel: stable}, {name: chrome, channel: stable}],
+ event.ref == "refs/heads/epochs/daily": [{name: firefox, channel: stable}, {name: chrome, channel: stable}, {name: webkitgtk_minibrowser, channel: stable}],
event.ref == "refs/heads/epochs/weekly": [{name: firefox, channel: beta}, {name: chrome, channel: beta}],
event.ref == "refs/heads/triggers/chrome_stable": [{name: chrome, channel: stable}],
event.ref == "refs/heads/triggers/chrome_beta": [{name: chrome, channel: beta}],
event.ref == "refs/heads/triggers/chrome_dev": [{name: chrome, channel: dev}],
event.ref == "refs/heads/triggers/firefox_stable": [{name: firefox, channel: stable}],
event.ref == "refs/heads/triggers/firefox_beta": [{name: firefox, channel: beta}],
- event.ref == "refs/heads/triggers/firefox_nightly": [{name: firefox, channel: nightly}]
- }
+ event.ref == "refs/heads/triggers/firefox_nightly": [{name: firefox, channel: nightly}],
+ event.ref == "refs/heads/triggers/webkitgtk_minibrowser_stable": [{name: webkitgtk_minibrowser, channel: stable}]
+ }
each(browser):
$map:
- [testharness, 1, 15]
@@ -70,7 +71,12 @@ tasks:
owner: ${event.pusher.email}
source: ${event.repository.url}
payload:
- image: harjgam/web-platform-tests:0.33
+ image:
+ $if: browser.name == 'webkitgtk_minibrowser'
+ then:
+ cl0p3z/web-platform-tests:0.1
+ else:
+ harjgam/web-platform-tests:0.33
maxRunTime: 7200
artifacts:
public/results:
diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable.html b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable.html
new file mode 100644
index 00000000000..44e7a403510
--- /dev/null
+++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>createImageBitmap serialize test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/namespaces.js"></script>
+<script src="common.sub.js"></script>
+<div id=log></div>
+<script>
+let worker, continuations = {};
+setup(function() {
+ worker = new Worker("transfer-worker.js");
+ worker.addEventListener("message", function(event) {
+ let { name, bitmap } = event.data;
+ if (continuations.hasOwnProperty(name)) {
+ continuations[name](bitmap);
+ }
+ });
+});
+
+for (let { name, factory } of imageSourceTypes) {
+ promise_test(function(t) {
+ return factory().then(createImageBitmap).then(function(bitmap) {
+ assert_equals(bitmap.width, 20);
+ assert_equals(bitmap.height, 20);
+
+ worker.postMessage({ name: t.name, bitmap: bitmap });
+
+ assert_equals(bitmap.width, 20);
+ assert_equals(bitmap.height, 20);
+
+ return new Promise(function(resolve) {
+ continuations[t.name] = resolve;
+ });
+ }).then(function(bitmap) {
+ assert_class_string(bitmap, "ImageBitmap");
+ assert_equals(bitmap.width, 20);
+ assert_equals(bitmap.height, 20);
+ });
+ }, `Serialize ImageBitmap created from ${name}`);
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js b/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js
index 12776b1a4b5..c974e83b960 100644
--- a/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js
+++ b/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js
@@ -1225,7 +1225,7 @@ function invokeFromIframe(subresource, sourceContextList) {
promise = fetch(frameUrl)
.then(r => r.text())
.then(t => {
- frameContnent = t;
+ frameContent = t;
iframe = createElement("iframe", {}, document.body, true);
return iframe.eventPromise;
})
diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-removing-triggering-anonymous-merge.html b/tests/wpt/web-platform-tests/compat/webkit-box-removing-triggering-anonymous-merge.html
new file mode 100644
index 00000000000..8506425548b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-box-removing-triggering-anonymous-merge.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div style="display: -webkit-box">
+ <span><div></div></span>
+ <div id="target"></div>
+ text
+</div>
+<script>
+// Force a layout before removing.
+document.body.offsetTop;
+document.getElementById('target').remove();
+done();
+</script>
diff --git a/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js b/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js
index 8d1fdfbfdff..5503ea6968a 100644
--- a/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js
+++ b/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js
@@ -48,6 +48,17 @@ contactsTestWithUserActivation(async (test, setSelectedContacts) => {
}, 'The Contact API can fail when the selector cannot be opened');
contactsTestWithUserActivation(async (test, setSelectedContacts) => {
+ setSelectedContacts([]);
+
+ const properties = await navigator.contacts.getProperties();
+ assert_true(properties.length > 0);
+
+ // Requesting the available properties should not fail.
+ await navigator.contacts.select(properties);
+
+}, 'Supported contact properties are exposed.');
+
+contactsTestWithUserActivation(async (test, setSelectedContacts) => {
// Returns two contacts with all information available.
setSelectedContacts([
{ name: ['Dwight Schrute'], email: ['dwight@schrutefarmsbnb.com'], tel: ['000-0000'] },
diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats/adjoining-floats-dynamic.html b/tests/wpt/web-platform-tests/css/CSS2/floats/adjoining-floats-dynamic.html
new file mode 100644
index 00000000000..3446d972d72
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/floats/adjoining-floats-dynamic.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1003558">
+<style>
+#target {
+ height: 50px;
+ width: 0;
+ background: green;
+ float: right;
+}
+
+span {
+ float: left;
+ width: 50px;
+ height: 50px;
+ background: green;
+}
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="display: flow-root; width: 100px; background: red;">
+ <div id="target"></div>
+ <div style="position: absolute; width: 50px; height: 50px; background: green;"></div>
+ <div>
+ <div style="clear: both; height: 10px;">
+ <div>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ </div>
+</div>
+<script>
+document.body.offsetTop;
+document.getElementById('target').style.width = '50px';
+</script>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-001-ref.html b/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-001-ref.html
new file mode 100644
index 00000000000..594847b1285
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-001-ref.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<body>
+ <div>אבג</div>
+ <div>אבג</div>
+ <div>אבג</div>
+ <div>אבג</div>
+ <div>אבג</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-001.html b/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-001.html
new file mode 100644
index 00000000000..b645a2b548c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-001.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: Inline boxes should not affect bidi reordering</title>
+<link rel="match" href="bidi-span-001-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#direction">
+<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
+<body>
+ <div>א<span></span>בג</div>
+ <div>א<span style="background: white"></span>בג</div>
+ <div>א<span>ב</span>ג</div>
+ <div>א<span style="background: white">ב</span>ג</div>
+ <div>אבג</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-002-ref.html b/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-002-ref.html
new file mode 100644
index 00000000000..6cc72c208a9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-002-ref.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<body>()</body>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-002.html b/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-002.html
new file mode 100644
index 00000000000..d4fc6de070d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/text/bidi-span-002.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<title>CSS Test: Inline boxes should not affect bidi reordering</title>
+<link rel="match" href="bidi-span-002-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#direction">
+<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
+<style>
+body {
+ text-align: left;
+ direction: rtl;
+}
+
+.c1:before {
+ content: '(';
+}
+
+.c1:after {
+ content: ')';
+}
+
+.c2:after {
+ content: '';
+}
+</style>
+<body><span class="c1"><span class="c2"></span></span></body>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/animations/clip-interpolation.html b/tests/wpt/web-platform-tests/css/css-masking/animations/clip-interpolation.html
new file mode 100644
index 00000000000..322ebd724e8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-masking/animations/clip-interpolation.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>clip interpolation</title>
+<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#clip-property">
+<meta name="assert" content="clip supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.container {
+ width: 80px;
+ height: 80px;
+ background: black;
+ display: inline-block;
+ padding: 5px;
+}
+
+.container:nth-child(2n) {
+ background: green;
+}
+
+.parent {
+ clip: rect(100px, 0px, 100px, 0px);
+}
+
+.target {
+ width: 80px;
+ height: 80px;
+ display: inline-block;
+ position: absolute;
+ background: white;
+ clip: rect(0px, 100px, 0px, 100px);
+}
+</style>
+
+<body>
+<template id="target-template">
+<div class="container"><div class="target"></div></div>
+</template>
+<script>
+test_interpolation({
+ property: 'clip',
+ from: neutralKeyframe,
+ to: 'rect(20px, 20px, 20px, 20px)',
+}, [
+ {at: -1, expect: 'rect(-20px 180px -20px 180px)'},
+ {at: 0, expect: 'rect(0px 100px 0px 100px)'},
+ {at: 0.25, expect: 'rect(5px 80px 5px 80px)'},
+ {at: 0.75, expect: 'rect(15px 40px 15px 40px)'},
+ {at: 1, expect: 'rect(20px 20px 20px 20px)'},
+ {at: 2, expect: 'rect(40px -60px 40px -60px)'},
+]);
+
+test_no_interpolation({
+ property: 'clip',
+ from: 'initial',
+ to: 'rect(20px, 20px, 20px, 20px)',
+});
+
+test_interpolation({
+ property: 'clip',
+ from: 'inherit',
+ to: 'rect(20px, 20px, 20px, 20px)',
+}, [
+ {at: -1, expect: 'rect(180px -20px 180px -20px)'},
+ {at: 0, expect: 'rect(100px 0px 100px 0px)'},
+ {at: 0.25, expect: 'rect(80px 5px 80px 5px)'},
+ {at: 0.75, expect: 'rect(40px 15px 40px 15px)'},
+ {at: 1, expect: 'rect(20px 20px 20px 20px)'},
+ {at: 2, expect: 'rect(-60px 40px -60px 40px)'},
+]);
+
+test_no_interpolation({
+ property: 'clip',
+ from: 'unset',
+ to: 'rect(20px, 20px, 20px, 20px)',
+});
+
+test_interpolation({
+ property: 'clip',
+ from: 'rect(0px, 75px, 80px, 10px)',
+ to: 'rect(0px, 100px, 90px, 5px)'
+}, [
+ {at: -1, expect: 'rect(0px, 50px, 70px, 15px)'},
+ {at: 0, expect: 'rect(0px, 75px, 80px, 10px)'},
+ {at: 0.25, expect: 'rect(0px, 81.25px, 82.5px, 8.75px)'},
+ {at: 0.75, expect: 'rect(0px, 93.75px, 87.5px, 6.25px)'},
+ {at: 1, expect: 'rect(0px, 100px, 90px, 5px)'},
+ {at: 2, expect: 'rect(0px, 125px, 100px, 0px)'},
+]);
+
+test_no_interpolation({
+ property: 'clip',
+ from: 'rect(auto, auto, auto, 10px)',
+ to: 'rect(20px, 50px, 50px, auto)'
+});
+
+test_no_interpolation({
+ property: 'clip',
+ from: 'rect(auto, 0px, auto, 10px)',
+ to: 'rect(auto, 50px, 50px, auto)'
+});
+
+test_no_interpolation({
+ property: 'clip',
+ from: 'auto',
+ to: 'rect(0px, 50px, 50px, 0px)'
+});
+
+test_no_interpolation({
+ property: 'clip',
+ from: 'rect(0px, 50px, 50px, 0px)',
+ to: 'auto'
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-invalid.html b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-invalid.html
new file mode 100644
index 00000000000..367049cf19f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-invalid.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Masking Module Level 1: parsing mask with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-masking-1/#the-mask">
+<meta name="assert" content="mask supports only the '<mask-layer>#' grammar.">
+<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('mask', 'none linear-gradient(to 0% 0%, rgb(0, 0, 0), rgb(0, 0, 255))');
+test_invalid_value('mask', 'none alpha luminance');
+test_invalid_value('mask', 'linear-gradient(to 0% 0%, rgb(0, 0, 0), rgb(0, 0, 255)) url("https://example.com/")');
+
+test_invalid_value('mask', '1px 2px 3px');
+test_invalid_value('mask', '1px 2px 3px 4px');
+test_invalid_value('mask', '1px 2px / contain / cover');
+
+test_invalid_value('mask', 'repeat-y repeat-x');
+
+test_invalid_value('mask', 'stroke-box no-clip view-box');
+
+test_invalid_value('mask', 'border-box view-box padding-box');
+
+test_invalid_value('mask', 'no-clip border-box content-box');
+
+test_invalid_value('mask', 'content-box stroke-box no-clip');
+
+test_invalid_value('mask', 'add intersect');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html
new file mode 100644
index 00000000000..63aed3e33c4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Masking Module Level 1: parsing mask with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-masking-1/#the-mask">
+<meta name="assert" content="mask supports the full '<mask-layer>#' grammar.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+// <mask-layer> = <mask-reference> <masking-mode>? || <position> [ / <bg-size> ]? ||
+// <repeat-style> || <geometry-box> || [ <geometry-box> | no-clip ] || <compositing-operator>
+
+// <mask-reference> <masking-mode>?
+// <mask-reference> = none | <image> | <mask-source>
+// <masking-mode> = alpha | luminance | auto
+test_valid_value('mask', 'none');
+test_valid_value('mask', 'none alpha');
+test_valid_value('mask', 'linear-gradient(to left bottom, red, blue)');
+test_valid_value('mask', 'linear-gradient(to left bottom, red, blue) luminance');
+test_valid_value('mask', 'url("https://{{host}}/")');
+test_valid_value('mask', 'url("https://{{host}}/") alpha');
+
+// <position> [ / <bg-size> ]?
+test_valid_value('mask', 'linear-gradient(to left bottom, red, blue) 1px 2px');
+test_valid_value('mask', 'url("https://{{host}}/") 1px 2px / contain');
+
+// <repeat-style> = repeat-x | repeat-y | [repeat | space | round | no-repeat]{1,2}
+test_valid_value('mask', 'none repeat-y');
+
+// <geometry-box> = <shape-box> | fill-box | stroke-box | view-box
+// <shape-box> = <box> | margin-box
+// <box> = border-box | padding-box | content-box
+test_valid_value('mask', 'none border-box', 'none');
+test_valid_value('mask', 'linear-gradient(to left bottom, red, blue) padding-box');
+test_valid_value('mask', 'none content-box');
+test_valid_value('mask', 'none margin-box');
+test_valid_value('mask', 'url("https://{{host}}/") fill-box');
+test_valid_value('mask', 'linear-gradient(to left bottom, red, blue) stroke-box');
+test_valid_value('mask', 'none view-box');
+
+// [ <geometry-box> | no-clip ]
+test_valid_value('mask', 'none no-clip', 'none border-box no-clip');
+
+// <compositing-operator> = add | subtract | intersect | exclude
+test_valid_value('mask', 'url("https://{{host}}/") add', 'url("https://{{host}}/")');
+test_valid_value('mask', 'none subtract');
+test_valid_value('mask', 'url("https://{{host}}/") intersect');
+test_valid_value('mask', 'linear-gradient(to left bottom, red, blue) exclude');
+
+
+// <mask-layer> = <mask-reference> <masking-mode>? || <position> [ / <bg-size> ]? ||
+// <repeat-style> || <geometry-box> || [ <geometry-box> | no-clip ] || <compositing-operator>
+test_valid_value('mask', 'intersect no-clip space round 1px 2px / contain stroke-box linear-gradient(to left bottom, red, blue) luminance', 'linear-gradient(to left bottom, red, blue) luminance 1px 2px / contain space round stroke-box no-clip intersect');
+
+test_valid_value('mask', 'intersect no-clip space round 1px 2px / contain view-box, stroke-box linear-gradient(to left bottom, red, blue) luminance', 'none 1px 2px / contain space round view-box no-clip intersect, linear-gradient(to left bottom, red, blue) luminance stroke-box');
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006-ref.html
index 85dfa522c7d..261ff480c38 100644
--- a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006-ref.html
@@ -35,7 +35,7 @@
</article>
<div class="column-span">column-span1</div>
<article>
- <div class="container" style="border-top: none; height: 50px;">
+ <div class="container" style="border-top: none; height: 50px; margin-bottom: 1em;">
<div class="block">block2</div>
</div>
</article>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006.html
index 479fb2d0ced..5c1e634c2b2 100644
--- a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006.html
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-006.html
@@ -19,6 +19,7 @@
background-color: pink;
border: 20px solid purple;
margin-top: 1em;
+ margin-bottom: 1em;
}
div.block {
width: 100px;
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-008-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-008-ref.html
new file mode 100644
index 00000000000..80d783283fb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-008-ref.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test Reference: Test the borders drawing for a block split by column-span</title>
+ <link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="https://www.mozilla.org/">
+
+ <style>
+ article {
+ column-count: 1;
+ column-fill: auto;
+ width: 200px;
+ background-color: lightgreen;
+ }
+ div.container {
+ height: auto;
+ background-color: pink;
+ border: 20px solid purple;
+ }
+ div.block {
+ width: 100px;
+ height: 100px;
+ background-color: yellow;
+ }
+ div.column-span {
+ width: 200px;
+ height: 50px;
+ background-color: lightblue;
+ }
+ </style>
+
+ <article>
+ <div class="container" style="border-bottom: 0;">
+ <div class="block">block1</div>
+ </div>
+ </article>
+ <div class="column-span">column-span1</div>
+ <article>
+ <div class="container" style="border-top: 0; border-bottom: 0;">
+ <div class="block">block2</div>
+ </div>
+ </article>
+ <div class="column-span">column-span2</div>
+ <article>
+ <div class="container" style="border-top: 0;">
+ <div class="block">block3</div>
+ </div>
+ </article>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-008.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-008.html
new file mode 100644
index 00000000000..0d7bd183841
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-008.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test: Test the borders drawing for a block split by column-span</title>
+ <link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="https://www.mozilla.org/">
+ <link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span">
+ <link rel="match" href="multicol-span-all-children-height-008-ref.html">
+ <meta name="assert" content="This test verifies that the borders of block container with an auto block-size, split by column-span, are skipped on the sides adjacent to column-span.">
+
+ <!-- This test is adapted from multicol-span-all-children-height-005. -->
+
+ <style>
+ article {
+ column-count: 1;
+ column-fill: auto;
+ width: 200px;
+ background-color: lightgreen;
+ }
+ div.container {
+ height: auto;
+ border: 20px solid purple;
+ background-color: pink;
+ }
+ div.block {
+ width: 100px;
+ height: 100px;
+ background-color: yellow;
+ }
+ div.column-span {
+ column-span: all;
+ height: 50px;
+ background-color: lightblue;
+ }
+ </style>
+
+ <article>
+ <div class="container">
+ <div class="block">block1</div>
+ <div class="column-span">column-span1</div>
+ <div class="block">block2</div>
+ <div class="column-span">column-span2</div>
+ <div class="block">block3</div>
+ </div>
+ </article>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/float-with-relpos-and-transform.html b/tests/wpt/web-platform-tests/css/css-overflow/float-with-relpos-and-transform.html
new file mode 100644
index 00000000000..6024b726175
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/float-with-relpos-and-transform.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#scrollable">
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
+<style>
+.container {
+ background: green;
+ width: 100px;
+ height: 100px;
+ overflow: auto;
+}
+.float {
+ float: left;
+ position: relative;
+ width: 50px;
+ height: 50px;
+ top: calc(50% - 100vh);
+ transform: translateY(-50%) translateY(100vh);
+}
+</style>
+<p>Test passes if there is a filled green square.</p>
+<div class="container">
+ <div class="float"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-005-ref.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-005-ref.html
new file mode 100644
index 00000000000..16d23041134
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-005-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="308" height="308"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.fillStyle = "green";
+context.fillRect(0, 0, 290, 18);
+context.fillRect(0, 0, 18, 290);
+context.fillRect(0, 254, 290, 36);
+context.fillRect(254, 0, 36, 290);
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-005.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-005.https.html
new file mode 100644
index 00000000000..efdd7fdf1b9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-005.https.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/">
+<link rel="match" href="geometry-border-image-005-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+ width: 200px;
+ height: 200px;
+ border: 36px solid orange;
+ border-image: paint(foo) /* source */
+ 1 / /* slice */
+ 36px 36px 36px 36px / /* width */
+ 18px 18px 18px 18px /* outset */
+ round;
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+<body>
+<div id="target" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('foo', class {
+ paint(ctx, geom) {
+ // Both geom.width and height are 200 + 36 *3 = 308px;
+ ctx.fillStyle = 'green';
+ ctx.fillRect(0, 0, geom.width, geom.height);
+ }
+});
+</script>
+
+<script>
+ importWorkletAndTerminateTestAfterAsyncPaint(CSS.paintWorklet, document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html b/tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html
index a5c0d516472..00780d650fa 100644
--- a/tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html
+++ b/tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html
@@ -261,7 +261,14 @@
<!-- Just viewbox. Has aspect_ratio, but no intrinsic size
inline_width is constrained by left/right, height computed proportionally -->
<div class="container">
- <img class="target" style="left:100px;right:100px" src="data:image/svg+xml,%3Csvg viewBox='0 0 100 10' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' style='fill:rgb(0,255,0);'/%3E%3C/svg%3E"
+ <img class="target" style="left:100px;right:100px;" src="data:image/svg+xml,%3Csvg viewBox='0 0 100 10' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' style='fill:rgb(0,255,0);'/%3E%3C/svg%3E"
+ data-expected-width="188" data-expected-height="47" data-offset-y="146" data-offset-x="109"
+ >
+</div>
+<!-- Same as previous test, but with max-width:fit-content. crbug.com/1010798
+ -->
+<div class="container">
+ <img class="target" style="left:100px;right:100px;max-width:fit-content" src="data:image/svg+xml,%3Csvg viewBox='0 0 100 10' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' style='fill:rgb(0,255,0);'/%3E%3C/svg%3E"
data-expected-width="188" data-expected-height="47" data-offset-y="146" data-offset-x="109"
>
</div>
diff --git a/tests/wpt/web-platform-tests/docs/running-tests/webkitgtk_minibrowser.md b/tests/wpt/web-platform-tests/docs/running-tests/webkitgtk_minibrowser.md
index b12859bcca9..7aac81e5fce 100644
--- a/tests/wpt/web-platform-tests/docs/running-tests/webkitgtk_minibrowser.md
+++ b/tests/wpt/web-platform-tests/docs/running-tests/webkitgtk_minibrowser.md
@@ -18,15 +18,3 @@ to run it manually you can find it on any of this paths:
inside:
`/usr/lib/${TRIPLET}/webkit2gtk-4.0/MiniBrowser`
where `TRIPLET=$(gcc -dumpmachine)`
-
-
-Known issues:
-
-* On a docker container WebKitWebDriver fails to listen on localhost,
-because the docker container doesn't provide an IPv6 localhost address.
-To workaround this issue, manually tell it to only listen on IPv4 localhost
-by passing this parameter to wpt run: `--webdriver-arg=--host=127.0.0.1`
-Example:
-```bash
-./wpt run --webdriver-arg=--host=127.0.0.1 webkitgtk_minibrowser TESTS
-```
diff --git a/tests/wpt/web-platform-tests/html/dom/idlharness.https.html b/tests/wpt/web-platform-tests/html/dom/idlharness.https.html
index 0d3f1160d28..33ad5c6f616 100644
--- a/tests/wpt/web-platform-tests/html/dom/idlharness.https.html
+++ b/tests/wpt/web-platform-tests/html/dom/idlharness.https.html
@@ -47,6 +47,7 @@ idl_test(
documentWithHandlers[callback.name] = handler;
}
}
+ idlArray.add_untested_idls('typedef Window WindowProxy;');
idlArray.add_objects({
NodeList: ['document.getElementsByName("name")'],
diff --git a/tests/wpt/web-platform-tests/interfaces/feature-policy.idl b/tests/wpt/web-platform-tests/interfaces/feature-policy.idl
index 85601321a17..6f0d69fc378 100644
--- a/tests/wpt/web-platform-tests/interfaces/feature-policy.idl
+++ b/tests/wpt/web-platform-tests/interfaces/feature-policy.idl
@@ -3,7 +3,6 @@
// (https://github.com/tidoust/reffy-reports)
// Source: Feature Policy (https://w3c.github.io/webappsec-feature-policy/)
-[NoInterfaceObject]
interface FeaturePolicy {
boolean allowsFeature(DOMString feature, optional DOMString origin);
sequence<DOMString> features();
diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
index e41d7357b1a..2b823047ff1 100644
--- a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
@@ -81,6 +81,7 @@ dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats {
boolean voiceActivityFlag;
DOMHighResTimeStamp lastPacketReceivedTimestamp;
double averageRtcpInterval;
+ unsigned long long headerBytesReceived;
unsigned long long fecPacketsReceived;
unsigned long long fecPacketsDiscarded;
unsigned long long bytesReceived;
@@ -130,6 +131,7 @@ dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
DOMString remoteId;
DOMString rid;
DOMHighResTimeStamp lastPacketSentTimestamp;
+ unsigned long long headerBytesSent;
unsigned long packetsDiscardedOnSend;
unsigned long long bytesDiscardedOnSend;
unsigned long fecPacketsSent;
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html
index f0b5bdd9f04..c67ac03f5dc 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html
@@ -12,7 +12,10 @@
</head>
<body>
<math>
- <menclose>
+ <menclose notation="">
+ <mn>123</mn>
+ </menclose>
+ <menclose notation="box">
<mn>123</mn>
</menclose>
</math>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html
index d7f0627059a..9b71389e74d 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html
@@ -5,7 +5,7 @@
<title>Legacy menclose radical notation</title>
<link rel="help" href="https://www.w3.org/TR/MathML3/chapter3.html#presm.menclose">
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#enclose-expression-inside-notation-menclose">
- <meta name="assert" content="Verify that the legacy menclose radical notation is not supported.">
+ <meta name="assert" content="Verify that the legacy menclose radical notation is ignored.">
<link rel="match" href="legacy-menclose-radical-notation-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -19,6 +19,9 @@
<menclose notation="radical">
<mn>123</mn>
</menclose>
+ <menclose notation="box radical">
+ <mn>123</mn>
+ </menclose>
</math>
<script src="/mathml/support/feature-detection.js"></script>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/tabindex-001.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/tabindex-001.html
index aaf82f77caa..8f853688141 100644
--- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/tabindex-001.html
+++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/tabindex-001.html
@@ -14,16 +14,20 @@
const mrow = document.getElementById('mrow');
assert_equals(mrow.tabIndex, -1, "no attribute");
mrow.setAttribute("tabindex", "invalid");
+ assert_equals(mrow.getAttribute("tabindex"), "invalid");
assert_equals(mrow.tabIndex, -1, "invalid");
mrow.setAttribute("tabindex", "9999999999");
+ assert_equals(mrow.getAttribute("tabindex"), "9999999999");
assert_equals(mrow.tabIndex, -1, "too large integer");
}, "default and invalid values on mrow");
test(() => {
const mrowLink = document.getElementById('mrow-link');
assert_equals(mrow.tabIndex, 0, "no attribute");
mrow.setAttribute("tabindex", "invalid");
+ assert_equals(mrow.getAttribute("tabindex"), "invalid");
assert_equals(mrow.tabIndex, 0, "invalid");
mrow.setAttribute("tabindex", "9999999999");
+ assert_equals(mrow.getAttribute("tabindex"), "9999999999");
assert_equals(mrow.tabIndex, 0, "too large integer");
}, "default and invalid values on MathML link");
});
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-bitrate.https.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-bitrate.https.html
new file mode 100644
index 00000000000..472c0661cb7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-bitrate.https.html
@@ -0,0 +1,226 @@
+<!doctype html>
+<html>
+<head>
+<title>MediaRecorder {audio|video}bitsPerSecond attributes</title>
+<link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<script>
+
+/*
+ * The bitrate handling is difficult to test, given that the spec uses text such
+ * as: "values the User Agent deems reasonable" and "such that the sum of
+ * videoBitsPerSecond and audioBitsPerSecond is close to the value of recorder’s
+ * [[ConstrainedBitsPerSecond]] slot". For cases like that this test tries to
+ * use values that are reasonable for the tested track types. Should a UA vendor
+ * see a need to update this to fit their definition of reasonable, they should
+ * feel free to do so, doing their best to avoid regressing existing compliant
+ * implementations.
+ */
+
+async function getStream(t, constraints) {
+ const stream = await navigator.mediaDevices.getUserMedia(constraints);
+ const tracks = stream.getTracks();
+ t.add_cleanup(() => tracks.forEach(tr => tr.stop()));
+ return stream;
+}
+
+function getAudioStream(t) {
+ return getStream(t, {audio: true});
+}
+
+function getVideoStream(t) {
+ return getStream(t, {video: true});
+}
+
+function getAudioVideoStream(t) {
+ return getStream(t, {audio: true, video: true});
+}
+
+const AUDIO_BITRATE = 1e5; // 100kbps
+const VIDEO_BITRATE = 1e6; // 1Mbps
+const LOW_TOTAL_BITRATE = 5e5; // 500kbps
+const HIGH_TOTAL_BITRATE = 2e6; // 2Mbps
+const BITRATE_EPSILON = 1e5; // 100kbps
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t));
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+}, "Passing no bitrate config results in defaults");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ bitsPerSecond: 0,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+ assert_approx_equals(rec.audioBitsPerSecond + rec.videoBitsPerSecond, 0,
+ BITRATE_EPSILON);
+}, "Passing bitsPerSecond:0 results in targets close to 0");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ audioBitsPerSecond: 0,
+ });
+ assert_equals(rec.audioBitsPerSecond, 0);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+}, "Passing only audioBitsPerSecond:0 results in 0 for audio, default for video");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ videoBitsPerSecond: 0,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_equals(rec.videoBitsPerSecond, 0);
+}, "Passing only videoBitsPerSecond:0 results in 0 for video, default for audio");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ bitsPerSecond: 0,
+ audioBitsPerSecond: AUDIO_BITRATE,
+ videoBitsPerSecond: VIDEO_BITRATE,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+ assert_approx_equals(rec.audioBitsPerSecond + rec.videoBitsPerSecond, 0,
+ BITRATE_EPSILON);
+}, "Passing bitsPerSecond:0 overrides audio/video-specific values");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ bitsPerSecond: HIGH_TOTAL_BITRATE,
+ audioBitsPerSecond: 0,
+ videoBitsPerSecond: 0,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+ assert_approx_equals(rec.audioBitsPerSecond + rec.videoBitsPerSecond,
+ HIGH_TOTAL_BITRATE, BITRATE_EPSILON);
+}, "Passing bitsPerSecond overrides audio/video zero values");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ bitsPerSecond: HIGH_TOTAL_BITRATE,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+ assert_approx_equals(rec.audioBitsPerSecond + rec.videoBitsPerSecond,
+ HIGH_TOTAL_BITRATE, BITRATE_EPSILON);
+}, "Passing bitsPerSecond sets audio/video bitrate values");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ audioBitsPerSecond: AUDIO_BITRATE,
+ });
+ assert_equals(rec.audioBitsPerSecond, AUDIO_BITRATE);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+}, "Passing only audioBitsPerSecond results in default for video");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ videoBitsPerSecond: VIDEO_BITRATE,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_equals(rec.videoBitsPerSecond, VIDEO_BITRATE);
+}, "Passing only videoBitsPerSecond results in default for audio");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioStream(t), {
+ videoBitsPerSecond: VIDEO_BITRATE,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_equals(rec.videoBitsPerSecond, VIDEO_BITRATE);
+}, "Passing videoBitsPerSecond for audio-only stream still results in something for video");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getVideoStream(t), {
+ audioBitsPerSecond: AUDIO_BITRATE,
+ });
+ assert_equals(rec.audioBitsPerSecond, AUDIO_BITRATE);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+}, "Passing audioBitsPerSecond for video-only stream still results in something for audio");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioStream(t), {
+ bitsPerSecond: HIGH_TOTAL_BITRATE,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+}, "Passing bitsPerSecond for audio-only stream still results in something for video");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getVideoStream(t), {
+ bitsPerSecond: HIGH_TOTAL_BITRATE,
+ });
+ assert_not_equals(rec.audioBitsPerSecond, 0);
+ assert_not_equals(rec.videoBitsPerSecond, 0);
+}, "Passing bitsPerSecond for video-only stream still results in something for audio");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t));
+ t.add_cleanup(() => rec.stop());
+ const abps = rec.audioBitsPerSecond;
+ const vbps = rec.videoBitsPerSecond;
+ rec.start();
+ assert_equals(rec.audioBitsPerSecond, abps);
+ assert_equals(rec.videoBitsPerSecond, vbps);
+}, "Selected default track bitrates are not changed by start()");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ audioBitsPerSecond: AUDIO_BITRATE,
+ videoBitsPerSecond: VIDEO_BITRATE,
+ });
+ t.add_cleanup(() => rec.stop());
+ const abps = rec.audioBitsPerSecond;
+ const vbps = rec.videoBitsPerSecond;
+ rec.start();
+ assert_equals(rec.audioBitsPerSecond, abps);
+ assert_equals(rec.videoBitsPerSecond, vbps);
+}, "Passed-in track bitrates are not changed by start()");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioVideoStream(t), {
+ bitsPerSecond: HIGH_TOTAL_BITRATE,
+ });
+ t.add_cleanup(() => rec.stop());
+ const abps = rec.audioBitsPerSecond;
+ const vbps = rec.videoBitsPerSecond;
+ rec.start();
+ assert_equals(rec.audioBitsPerSecond, abps);
+ assert_equals(rec.videoBitsPerSecond, vbps);
+}, "Passing bitsPerSecond for audio/video stream does not change track bitrates in start()");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getAudioStream(t), {
+ bitsPerSecond: LOW_TOTAL_BITRATE,
+ });
+ t.add_cleanup(() => rec.stop());
+ const abps = rec.audioBitsPerSecond;
+ const vbps = rec.videoBitsPerSecond;
+ rec.start();
+ assert_approx_equals(rec.audioBitsPerSecond, LOW_TOTAL_BITRATE,
+ BITRATE_EPSILON);
+ assert_equals(rec.videoBitsPerSecond, 0);
+ assert_not_equals(rec.audioBitsPerSecond, abps);
+ assert_not_equals(rec.videoBitsPerSecond, vbps);
+}, "Passing bitsPerSecond for audio stream sets video track bitrate to 0 in start()");
+
+promise_test(async t => {
+ const rec = new MediaRecorder(await getVideoStream(t), {
+ bitsPerSecond: HIGH_TOTAL_BITRATE,
+ });
+ t.add_cleanup(() => rec.stop());
+ const abps = rec.audioBitsPerSecond;
+ const vbps = rec.videoBitsPerSecond;
+ rec.start();
+ assert_equals(rec.audioBitsPerSecond, 0);
+ assert_approx_equals(rec.videoBitsPerSecond, HIGH_TOTAL_BITRATE,
+ BITRATE_EPSILON);
+ assert_not_equals(rec.audioBitsPerSecond, abps);
+ assert_not_equals(rec.videoBitsPerSecond, vbps);
+}, "Passing bitsPerSecond for video stream sets audio track bitrate to 0 in start()");
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-creation.https.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-creation.https.html
index 419211c9dcf..b724ca14503 100644
--- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-creation.https.html
+++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-creation.https.html
@@ -20,8 +20,8 @@
var recorder = new MediaRecorder(stream);
assert_equals(recorder.state, "inactive");
- assert_equals(recorder.videoBitsPerSecond, 0);
- assert_equals(recorder.audioBitsPerSecond, 0);
+ assert_not_equals(recorder.videoBitsPerSecond, 0);
+ assert_not_equals(recorder.audioBitsPerSecond, 0);
test.done();
});
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html
index 58b9c08ecab..cddc07e5079 100644
--- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html
+++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html
@@ -36,23 +36,21 @@
});
recorderOnDataAvailable = test.step_func(event => {
- // TODO(mcasas): ondataavailable might never be pinged with an empty Blob
- // data on recorder.stop(), see http://crbug.com/54428
assert_equals(recorder.state, "inactive");
- assert_equals(event.data.size, 0, 'We should have gotten an empty Blob');
+ assert_not_equals(event.data.size, 0, 'We should get a Blob with data');
});
recorderOnStop = test.step_func(function() {
assert_equals(recorder.state, "inactive");
- assert_throws("InvalidStateError", function() { recorder.stop() },
- "recorder cannot be stop()ped in |inactive| state");
+ recorder.onstop = recorderOnUnexpectedEvent;
+ recorder.stop();
+ assert_equals(recorder.state, "inactive", "stop() is idempotent");
assert_throws("InvalidStateError", function() { recorder.pause() },
"recorder cannot be pause()ed in |inactive| state");
assert_throws("InvalidStateError", function() { recorder.resume() },
"recorder cannot be resume()d in |inactive| state");
assert_throws("InvalidStateError", function() { recorder.requestData() },
"cannot requestData() if recorder is in |inactive| state");
- recorder.onstop = recorderOnUnexpectedEvent;
test.done();
});
@@ -84,15 +82,15 @@
assert_throws("NotSupportedError",
function() {
- recorder =
- new MediaRecorder(stream, {mimeType : "video/invalid"});
+ recorder = new MediaRecorder(
+ new MediaStream(), {mimeType : "video/invalid"});
},
"recorder should throw() with unsupported mimeType");
- let recorder = new MediaRecorder(stream);
+ let recorder = new MediaRecorder(new MediaStream());
assert_equals(recorder.state, "inactive");
- assert_throws("InvalidStateError", function(){recorder.stop()},
- "recorder cannot be stop()ped in |inactive| state");
+ recorder.stop();
+ assert_equals(recorder.state, "inactive", "stop() is idempotent");
assert_throws("InvalidStateError", function(){recorder.pause()},
"recorder cannot be pause()ed in |inactive| state");
assert_throws("InvalidStateError", function(){recorder.resume()},
@@ -100,6 +98,14 @@
assert_throws("InvalidStateError", function(){recorder.requestData()},
"cannot requestData() if recorder is in |inactive| state");
+ assert_throws("NotSupportedError",
+ function() {
+ recorder.start();
+ },
+ "recorder should throw() when starting with inactive stream");
+
+ recorder.stream.addTrack(stream.getTracks()[0]);
+
drawSomethingOnCanvas();
recorder.onstop = recorderOnUnexpectedEvent;
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html
new file mode 100644
index 00000000000..ddc56e9cb75
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html
@@ -0,0 +1,147 @@
+<!doctype html>
+<html>
+<head>
+ <title>MediaRecorder MIMEType</title>
+ <link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#dom-mediarecorder-mimetype">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<canvas id="canvas" width="200" height="200">
+</canvas>
+<script>
+function createAudioStream(t) {
+ const ac = new AudioContext();
+ const {stream} = ac.createMediaStreamDestination();
+ const tracks = stream.getTracks();
+ t.add_cleanup(() => tracks.forEach(tr => tr.stop()));
+ return stream;
+}
+
+function createVideoStream(t) {
+ const canvas = document.getElementById("canvas");
+ canvas.getContext('2d');
+ const stream = canvas.captureStream();
+ const tracks = stream.getTracks();
+ t.add_cleanup(() => tracks.forEach(tr => tr.stop()));
+ return stream;
+}
+
+function createAudioVideoStream(t) {
+ return new MediaStream([
+ ...createAudioStream(t).getTracks(),
+ ...createVideoStream(t).getTracks(),
+ ]);
+}
+
+test(t => {
+ const recorder = new MediaRecorder(createAudioStream(t));
+ assert_equals(recorder.mimeType, "",
+ "MediaRecorder has no default MIMEtype");
+}, "MediaRecorder sets no default MIMEType in the constructor for audio");
+
+test(t => {
+ const recorder = new MediaRecorder(createVideoStream(t));
+ assert_equals(recorder.mimeType, "",
+ "MediaRecorder has no default MIMEtype");
+}, "MediaRecorder sets no default MIMEType in the constructor for video");
+
+test(t => {
+ const stream = createAudioVideoStream(t);
+ const recorder = new MediaRecorder(stream);
+ assert_equals(recorder.mimeType, "",
+ "MediaRecorder has no default MIMEtype");
+}, "MediaRecorder sets no default MIMEType in the constructor for audio/video");
+
+test(t => {
+ assert_throws("NotSupportedError",
+ () => new MediaRecorder(new MediaStream(), {mimeType: "audio/banana"}));
+}, "MediaRecorder invalid audio MIMEType throws");
+
+test(t => {
+ assert_false(MediaRecorder.isTypeSupported("audio/banana"));
+}, "MediaRecorder invalid audio MIMEType is unsupported");
+
+test(t => {
+ assert_throws("NotSupportedError",
+ () => new MediaRecorder(new MediaStream(), {mimeType: "video/pineapple"}));
+}, "MediaRecorder invalid video MIMEType throws");
+
+test(t => {
+ assert_false(MediaRecorder.isTypeSupported("video/pineapple"));
+}, "MediaRecorder invalid video MIMEType is unsupported");
+
+// New MIME types could be added to this list as needed.
+for (const mimeType of [
+ 'audio/mp4',
+ 'video/mp4',
+ 'audio/ogg',
+ 'audio/ogg; codecs="vorbis"',
+ 'audio/ogg; codecs="opus"',
+ 'audio/webm',
+ 'audio/webm; codecs="vorbis"',
+ 'audio/webm; codecs="opus"',
+ 'video/webm',
+ 'video/webm; codecs="vp8"',
+ 'video/webm; codecs="vp8, vorbis"',
+ 'video/webm; codecs="vp8, opus"',
+ 'video/webm; codecs="vp9"',
+ 'video/webm; codecs="vp9, vorbis"',
+ 'video/webm; codecs="vp9, opus"',
+ 'video/webm; codecs="av1"',
+ 'video/webm; codecs="av1, opus"',
+]) {
+ if (MediaRecorder.isTypeSupported(mimeType)) {
+ test(t => {
+ const recorder = new MediaRecorder(new MediaStream(), {mimeType});
+ assert_equals(recorder.mimeType, mimeType, "Supported MIMEType is set");
+ }, `Supported MIMEType ${mimeType} is set immediately after constructing`);
+ } else {
+ test(t => {
+ assert_throws("NotSupportedError",
+ () => new MediaRecorder(new MediaStream(), {mimeType}));
+ }, `Unsupported MIMEType ${mimeType} throws`);
+ }
+}
+
+test(t => {
+ const recorder = new MediaRecorder(createAudioStream(t));
+ recorder.start();
+ assert_not_equals(recorder.mimeType, "",
+ "MediaRecorder has a MIMEtype after start() for audio");
+ assert_regexp_match(recorder.mimeType, /^audio\//,
+ "MIMEtype has an expected media type");
+ assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/,
+ "MIMEtype has a container subtype");
+ assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+$/,
+ "MIMEtype has one codec");
+}, "MediaRecorder sets a MIMEType after start() for audio");
+
+test(t => {
+ const recorder = new MediaRecorder(createVideoStream(t));
+ recorder.start();
+ assert_not_equals(recorder.mimeType, "",
+ "MediaRecorder has a MIMEtype after start() for video");
+ assert_regexp_match(recorder.mimeType, /^video\//,
+ "MIMEtype has an expected media type");
+ assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/,
+ "MIMEtype has a container subtype");
+ assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+$/,
+ "MIMEtype has one codec");
+}, "MediaRecorder sets a MIMEType after start() for video");
+
+test(t => {
+ const recorder = new MediaRecorder(createAudioVideoStream(t));
+ recorder.start();
+ assert_not_equals(recorder.mimeType, "",
+ "MediaRecorder has a MIMEtype after start() for audio/video");
+ assert_regexp_match(recorder.mimeType, /^video\//,
+ "MIMEtype has an expected media type");
+ assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/,
+ "MIMEtype has a container subtype");
+ assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+,[^,]+$/,
+ "MIMEtype has two codecs");
+}, "MediaRecorder sets a MIMEType after start() for audio/video");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html
index 39a88836645..33dfd8560c0 100644
--- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html
+++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html
@@ -11,8 +11,10 @@
</canvas>
<script>
function createVideoStream() {
- let canvas = document.getElementById("canvas");
- canvas.getContext('2d');
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+ ctx.fillStyle = 'green';
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
return canvas.captureStream();
}
@@ -32,6 +34,7 @@
recorder.start();
assert_equals(recorder.state, "recording", "MediaRecorder has been started successfully");
+ await new Promise(r => recorder.onstart = r);
recorder.pause();
assert_equals(recorder.state, "paused", "MediaRecorder should be paused immediately following pause()");
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/idlharness.window.js b/tests/wpt/web-platform-tests/mediacapture-record/idlharness.window.js
index 86f5a158822..2e304b0a0e6 100644
--- a/tests/wpt/web-platform-tests/mediacapture-record/idlharness.window.js
+++ b/tests/wpt/web-platform-tests/mediacapture-record/idlharness.window.js
@@ -7,7 +7,7 @@
idl_test(
['mediastream-recording'],
- ['mediacapture-streams', 'FileAPI', 'html', 'dom'],
+ ['mediacapture-streams', 'FileAPI', 'html', 'dom', 'WebIDL'],
idl_array => {
// Ignored errors will be surfaced in idlharness.js's test_object below.
let recorder, blob, error;
@@ -31,7 +31,9 @@ idl_test(
idl_array.add_objects({ BlobEvent: [blob] });
try {
- error = new MediaRecorderErrorEvent("type", {});
+ error = new MediaRecorderErrorEvent("type", {
+ error: new DOMException,
+ });
} catch(e) {}
idl_array.add_objects({ MediaRecorderErrorEvent: [error] });
}
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
index df91abf6d7f..94031657b4b 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
@@ -89,7 +89,7 @@ class MockVRService {
this.runtimes_ = [];
this.interceptor_ =
- new MojoInterfaceInterceptor(device.mojom.VRService.name);
+ new MojoInterfaceInterceptor(device.mojom.VRService.name, "context", true);
this.interceptor_.oninterfacerequest = e =>
this.bindingSet_.addBinding(this, e.handle);
this.interceptor_.start();
@@ -187,6 +187,15 @@ class MockVRService {
// Implements XRFrameDataProvider and XRPresentationProvider. Maintains a mock
// for XRPresentationProvider.
class MockRuntime {
+ // Mapping from string feature names to the corresponding mojo types.
+ // This is exposed as a member for extensibility.
+ static featureToMojoMap = {
+ "viewer": device.mojom.XRSessionFeature.REF_SPACE_VIEWER,
+ "local": device.mojom.XRSessionFeature.REF_SPACE_LOCAL,
+ "local-floor": device.mojom.XRSessionFeature.REF_SPACE_LOCAL_FLOOR,
+ "bounded-floor": device.mojom.XRSessionFeature.REF_SPACE_BOUNDED_FLOOR,
+ "unbounded": device.mojom.XRSessionFeature.REF_SPACE_UNBOUNDED };
+
constructor(fakeDeviceInit, service) {
this.sessionClient_ = new device.mojom.XRSessionClientPtr();
this.presentation_provider_ = new MockXRPresentationProvider();
@@ -456,19 +465,10 @@ class MockRuntime {
setFeatures(supportedFeatures) {
function convertFeatureToMojom(feature) {
- switch (feature) {
- case "viewer":
- return device.mojom.XRSessionFeature.REF_SPACE_VIEWER;
- case "local":
- return device.mojom.XRSessionFeature.REF_SPACE_LOCAL;
- case "local-floor":
- return device.mojom.XRSessionFeature.REF_SPACE_LOCAL_FLOOR;
- case "bounded-floor":
- return device.mojom.XRSessionFeature.REF_SPACE_BOUNDED_FLOOR;
- case "unbounded":
- return device.mojom.XRSessionFeature.REF_SPACE_UNBOUNDED;
- default:
- return device.mojom.XRSessionFeature.INVALID;
+ if (feature in MockRuntime.featureToMojoMap) {
+ return MockRuntime.featureToMojoMap[feature];
+ } else {
+ return device.mojom.XRSessionFeature.INVALID;
}
}
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-add-async.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-add-async.https.html
new file mode 100644
index 00000000000..ac13e4f4167
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-add-async.https.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>Service Worker: Fetch event added asynchronously doesn't throw</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js"></script>
+<script>
+'use strict';
+
+service_worker_test(
+ 'resources/fetch-event-add-async-worker.js');
+</script>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.js b/tests/wpt/web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.js
index 489b37f83e1..2335f635b2e 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.js
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.js
@@ -17,7 +17,7 @@ async_test((t) => {
assert_true('serviceWorker' in self, 'self.serviceWorker exists');
serviceWorker.postMessage({ messageTest: true });
- // The rest of the rest runs once we receive the above message.
+ // The rest of the test runs once this receives the above message.
addEventListener('message', t.step_func((event) => {
// Ignore unrelated messages.
if (!event.data.messageTest) return;
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-add-async-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-add-async-worker.js
new file mode 100644
index 00000000000..a5a44a57c99
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-add-async-worker.js
@@ -0,0 +1,6 @@
+importScripts('/resources/testharness.js');
+
+promise_test(async () => {
+ await new Promise(handler => { step_timeout(handler, 0); });
+ self.addEventListener('fetch', () => {});
+}, 'fetch event added asynchronously does not throw');
diff --git a/tests/wpt/web-platform-tests/tools/ci/run_tc.py b/tests/wpt/web-platform-tests/tools/ci/run_tc.py
index b2826bf075e..3201ff3a9d3 100755
--- a/tests/wpt/web-platform-tests/tools/ci/run_tc.py
+++ b/tests/wpt/web-platform-tests/tools/ci/run_tc.py
@@ -145,6 +145,28 @@ def install_chrome(channel):
run(["sudo", "apt-get", "-qqy", "update"])
run(["sudo", "gdebi", "-qn", "/tmp/%s" % deb_archive])
+def install_webkitgtk_from_apt_repository(channel):
+ # Configure webkitgtk.org/debian repository for $channel and pin it with maximum priority
+ run(["sudo", "apt-key", "adv", "--fetch-keys", "https://webkitgtk.org/debian/apt.key"])
+ with open("/tmp/webkitgtk.list", "w") as f:
+ f.write("deb [arch=amd64] https://webkitgtk.org/debian buster-wpt-webkit-updates %s\n" % channel)
+ run(["sudo", "mv", "/tmp/webkitgtk.list", "/etc/apt/sources.list.d/"])
+ with open("/tmp/99webkitgtk", "w") as f:
+ f.write("Package: *\nPin: origin webkitgtk.org\nPin-Priority: 1999\n")
+ run(["sudo", "mv", "/tmp/99webkitgtk", "/etc/apt/preferences.d/"])
+ # Install webkit2gtk from the webkitgtk.org/debian repository for $channel
+ run(["sudo", "apt-get", "-qqy", "update"])
+ run(["sudo", "apt-get", "-qqy", "upgrade"])
+ run(["sudo", "apt-get", "-qqy", "-t", "buster-wpt-webkit-updates", "install", "webkit2gtk-driver"])
+
+
+def install_webkitgtk(channel):
+ if channel in ("experimental", "dev", "nightly"):
+ raise NotImplementedError("Still can't install from release channel: %s" % channel)
+ elif channel in ("beta", "stable"):
+ install_webkitgtk_from_apt_repository(channel)
+ else:
+ raise ValueError("Unrecognized release channel: %s" % channel)
def start_xvfb():
start(["sudo", "Xvfb", os.environ["DISPLAY"], "-screen", "0",
@@ -217,6 +239,9 @@ def setup_environment(args):
if "chrome" in args.browser:
assert args.channel is not None
install_chrome(args.channel)
+ elif "webkitgtk_minibrowser" in args.browser:
+ assert args.channel is not None
+ install_webkitgtk(args.channel)
if args.xvfb:
start_xvfb()
diff --git a/tests/wpt/web-platform-tests/tools/docker/Dockerfile.webkitgtk b/tests/wpt/web-platform-tests/tools/docker/Dockerfile.webkitgtk
index 8d792b36a47..58080def60f 100644
--- a/tests/wpt/web-platform-tests/tools/docker/Dockerfile.webkitgtk
+++ b/tests/wpt/web-platform-tests/tools/docker/Dockerfile.webkitgtk
@@ -7,9 +7,13 @@ FROM debian:10
ENV DEBIAN_FRONTEND=noninteractive \
DEBCONF_NONINTERACTIVE_SEEN=true
-# Install general requirements not in the base image
+
+# Update and upgrade.
RUN apt-get -qqy update \
- && apt-get -qqy install \
+ && apt-get -qqy upgrade
+
+# Install general requirements not in the base image
+RUN apt-get -qqy install \
bzip2 \
ca-certificates \
dbus-x11 \
@@ -29,19 +33,10 @@ RUN apt-get -qqy update \
xvfb \
git-core
-# Configure buster-wpt-webkit-updates repository
-RUN apt-key adv --fetch-keys https://webkitgtk.org/debian/apt.key
-RUN printf 'deb [arch=amd64] https://webkitgtk.org/debian buster-wpt-webkit-updates main' \
- > /etc/apt/sources.list.d/webkitgtk.list
-RUN printf 'Package: *\nPin: origin webkitgtk.org\nPin-Priority: 1999' \
- > /etc/apt/preferences.d/99webkitgtk
-
-# Update and upgrade
-RUN apt-get update \
- && apt-get -y upgrade
-# Install webkit packages from https://webkitgtk.org/debian
-RUN apt-get install -y -t buster-wpt-webkit-updates webkit2gtk-driver
+# To speed up testers, cache in the image most of WebKitGTK dependencies
+# but don't install them (that will be done at test time)
+RUN apt-get install -qqy --download-only webkit2gtk-driver
# Set the timezone
ENV TZ "UTC"
diff --git a/tests/wpt/web-platform-tests/tools/docker/README.md b/tests/wpt/web-platform-tests/tools/docker/README.md
index c444e4a957f..6bcc47c7744 100644
--- a/tests/wpt/web-platform-tests/tools/docker/README.md
+++ b/tests/wpt/web-platform-tests/tools/docker/README.md
@@ -15,5 +15,3 @@ To update the image used for WebKitGTK:
docker build -f Dockerfile.webkitgtk -t <tag> .
docker push <tag>
```
-
-(This image is not yet used in .taskcluster.yml.)
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py
index 08b5880a1b7..d17229da468 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py
@@ -36,6 +36,20 @@ def cmd_arg(name, value=None):
return rv
+def maybe_add_args(required_args, current_args):
+ for required_arg in required_args:
+ # If the arg is in the form of "variable=value", only add it if
+ # no arg with another value for "variable" is already there.
+ if "=" in required_arg:
+ required_arg_prefix = "%s=" % required_arg.split("=")[0]
+ if not any(item.startswith(required_arg_prefix) for item in current_args):
+ current_args.append(required_arg)
+ else:
+ if required_arg not in current_args:
+ current_args.append(required_arg)
+ return current_args
+
+
def get_free_port():
"""Get a random unbound port"""
while True:
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/epiphany.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/epiphany.py
index 599ec9f3110..37e2f21421a 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/epiphany.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/epiphany.py
@@ -1,4 +1,4 @@
-from .base import get_timeout_multiplier # noqa: F401
+from .base import get_timeout_multiplier, maybe_add_args # noqa: F401
from .webkit import WebKitBrowser
from ..executors import executor_kwargs as base_executor_kwargs
from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401
@@ -24,9 +24,12 @@ def check_args(**kwargs):
def browser_kwargs(test_type, run_info_data, config, **kwargs):
+ # Workaround for https://gitlab.gnome.org/GNOME/libsoup/issues/172
+ webdriver_required_args = ["--host=127.0.0.1"]
+ webdriver_args = maybe_add_args(webdriver_required_args, kwargs.get("webdriver_args"))
return {"binary": kwargs["binary"],
"webdriver_binary": kwargs["webdriver_binary"],
- "webdriver_args": kwargs.get("webdriver_args")}
+ "webdriver_args": webdriver_args}
def capabilities(server_config, **kwargs):
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
index 290fcff5ab2..1763ff44b4e 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
@@ -181,7 +181,7 @@ def run_info_browser_version(binary):
def update_properties():
- return (["os", "debug", "webrender", "e10s", "sw-e10s", "processor"],
+ return (["os", "debug", "webrender", "fisson", "e10s", "sw-e10s", "processor"],
{"os": ["version"], "processor": ["bits"]})
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py
index 65f78125ad7..3c4947335bf 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py
@@ -1,4 +1,4 @@
-from .base import get_timeout_multiplier # noqa: F401
+from .base import get_timeout_multiplier, maybe_add_args # noqa: F401
from .webkit import WebKitBrowser
from ..executors import executor_kwargs as base_executor_kwargs
from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401
@@ -24,16 +24,25 @@ def check_args(**kwargs):
def browser_kwargs(test_type, run_info_data, config, **kwargs):
+ # Workaround for https://gitlab.gnome.org/GNOME/libsoup/issues/172
+ webdriver_required_args = ["--host=127.0.0.1"]
+ webdriver_args = maybe_add_args(webdriver_required_args, kwargs.get("webdriver_args"))
return {"binary": kwargs["binary"],
"webdriver_binary": kwargs["webdriver_binary"],
- "webdriver_args": kwargs.get("webdriver_args")}
+ "webdriver_args": webdriver_args}
def capabilities(server_config, **kwargs):
+ browser_required_args = ["--automation",
+ "--javascript-can-open-windows-automatically=true",
+ "--enable-xss-auditor=false",
+ "--enable-media-capabilities=true",
+ "--enable-encrypted-media=true",
+ "--enable-media-stream=true",
+ "--enable-mock-capture-devices=true",
+ "--enable-webaudio=true"]
args = kwargs.get("binary_args", [])
- if "--automation" not in args:
- args.append("--automation")
-
+ args = maybe_add_args(browser_required_args, args)
return {
"browserName": "MiniBrowser",
"webkitgtk:browserOptions": {
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/cycle-witout-delay.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/cycle-witout-delay.html
new file mode 100644
index 00000000000..ed26ad2ced2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/cycle-witout-delay.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html class="a">
+ <head>
+ <title>Cycles without DelayNode in audio node graph</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+ <script>
+ const t = async_test(
+ "Test that cycles that don't contain a DelayNode are muted"
+ );
+ t.step(function() {
+ var off = new OfflineAudioContext(1, 512, 48000);
+ var osc = new OscillatorNode(off);
+ var fb = new GainNode(off);
+ // zero delay feedback loop
+ osc.connect(fb).connect(fb).connect(off.destination);
+ osc.start(0);
+ off.startRendering().then((b) => {
+ var samples = b.getChannelData(0);
+ var silent = true;
+ for (var i = 0; i < samples.length; i++) {
+ if (samples[i] != 0.0) {
+ silent = false;
+ break;
+ }
+ }
+ assert_true(silent);
+ t.done();
+ });
+ });
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/delay-time-clamping.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/delay-time-clamping.html
new file mode 100644
index 00000000000..3f8ed24429a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/delay-time-clamping.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html class="a">
+ <head>
+ <title>Delay time clamping in cycles</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+ <script>
+ const t = async_test(
+ "Test that a DelayNode allows a feedback loop of a single rendering quantum"
+ );
+ t.step(function() {
+ var off = new OfflineAudioContext(1, 512, 48000);
+ var b = off.createBuffer(1, 1, 48000);
+ b.getChannelData(0)[0] = 1;
+ var impulse = new AudioBufferSourceNode(off, {buffer: b});
+ impulse.start(0);
+ // This delayTime of 64 samples MUST be clamped to 128 samples when
+ // in a cycle.
+ var delay = new DelayNode(off, {delayTime: 64/48000});
+ var fb = new GainNode(off);
+ impulse.connect(fb).connect(delay).connect(fb).connect(off.destination);
+ off.startRendering().then((b) => {
+ var samples = b.getChannelData(0);
+ for (var i = 0; i < samples.length; i++) {
+ if ((i % 128) != 0) {
+ assert_equals(samples[i], 0.0, "Non-silent audio found in between delayed impulses");
+ } else {
+ assert_equals(samples[i], 1.0, "Silent audio found instead of a delayed impulse");
+ }
+ }
+ t.done();
+ });
+ });
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/feedback-delay-time.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/feedback-delay-time.html
new file mode 100644
index 00000000000..50c8e455b90
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/processing-model/feedback-delay-time.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html class="a">
+ <head>
+ <title>Feedback cycle with delay in audio node graph</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+ <script>
+ const t = async_test(
+ "Test that a DelayNode allows a feedback loop of a single rendering quantum"
+ );
+ t.step(function() {
+ var off = new OfflineAudioContext(1, 512, 48000);
+ var b = off.createBuffer(1, 1, 48000);
+ b.getChannelData(0)[0] = 1;
+ var impulse = new AudioBufferSourceNode(off, {buffer: b});
+ impulse.start(0);
+ var delay = new DelayNode(off, {delayTime: 128/48000});
+ var fb = new GainNode(off);
+ impulse.connect(fb).connect(delay).connect(fb).connect(off.destination);
+ off.startRendering().then((b) => {
+ var samples = b.getChannelData(0);
+ for (var i = 0; i < samples.length; i++) {
+ if ((i % 128) != 0) {
+ assert_equals(samples[i], 0.0, "Non-silent audio found in between delayed impulses");
+ } else {
+ assert_equals(samples[i], 1.0, "Silent audio found instead of a delayed impulse");
+ }
+ }
+ t.done();
+ });
+ });
+ </script>
+ </body>
+</html>