aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/MANIFEST.json295
-rw-r--r--tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/word-break/word-break-break-all-010.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/word-break/word-break-break-all-011.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini8
-rw-r--r--tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini1
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html.ini16
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini22
-rw-r--r--tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini4
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini4
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-origin.sub.window.js.ini3
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/quirks.html.ini283
-rw-r--r--tests/wpt/metadata/url/urlencoded-parser.any.js.ini25
-rw-r--r--tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini95
-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/baseurl/alpha/import-in-moduleworker.html.ini1
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini1
-rw-r--r--tests/wpt/web-platform-tests/beacon/beacon-common.sub.js210
-rw-r--r--tests/wpt/web-platform-tests/beacon/beacon-cors.sub.window.js31
-rw-r--r--tests/wpt/web-platform-tests/beacon/beacon-redirect.window.js15
-rw-r--r--tests/wpt/web-platform-tests/beacon/navigate.iFrame.sub.html45
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-001.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-002.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-003.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/mask-svg-content/reference/mask-text-001-ref.svg5
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-none-001-ref.xht4
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-015.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-010-ref.html16
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-014-ref.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-014.html16
-rw-r--r--tests/wpt/web-platform-tests/generic-sensor/generic-sensor-iframe-tests.sub.js28
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html74
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/offline/appcache/appcache-iframe.https.html37
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-data.py5
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-iframe.manifest8
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-iframe.py43
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/offline/appcache/workers/resources/appcache-worker.py1
-rw-r--r--tests/wpt/web-platform-tests/interfaces/payment-request.idl6
-rw-r--r--tests/wpt/web-platform-tests/interfaces/wasm-web-api.idl10
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-clone.https.html94
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-idl.https.html41
-rw-r--r--tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html2
-rw-r--r--tests/wpt/web-platform-tests/speech-api/idlharness.window.js32
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py31
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py21
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py51
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py4
-rw-r--r--tests/wpt/web-platform-tests/wasm/webapi/contenttype.any.js23
-rw-r--r--tests/wpt/web-platform-tests/web-animations/timing-model/animations/play-states.html40
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCIceTransport-extension.https.html51
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html50
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html122
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js1
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html1
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html46
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-helper.js36
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getParameters.html5
-rw-r--r--tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini3
67 files changed, 1402 insertions, 820 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 29acda356da..a9d191c5100 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -125643,6 +125643,42 @@
{}
]
],
+ "css/css-masking/clip-path/clip-path-inline-001.html": [
+ [
+ "/css/css-masking/clip-path/clip-path-inline-001.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-masking/clip-path/clip-path-inline-002.html": [
+ [
+ "/css/css-masking/clip-path/clip-path-inline-002.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-masking/clip-path/clip-path-inline-003.html": [
+ [
+ "/css/css-masking/clip-path/clip-path-inline-003.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-masking/clip-path/clip-path-path-001.html": [
[
"/css/css-masking/clip-path/clip-path-path-001.html",
@@ -137395,6 +137431,18 @@
{}
]
],
+ "css/css-text/overflow-wrap/overflow-wrap-break-word-004.html": [
+ [
+ "/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html",
+ [
+ [
+ "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [
[
"/css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html",
@@ -139231,6 +139279,18 @@
{}
]
],
+ "css/css-text/white-space/pre-wrap-015.html": [
+ [
+ "/css/css-text/white-space/pre-wrap-015.html",
+ [
+ [
+ "/css/css-text/white-space/reference/pre-wrap-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/white-space/textarea-break-spaces-001.html": [
[
"/css/css-text/white-space/textarea-break-spaces-001.html",
@@ -139555,6 +139615,42 @@
{}
]
],
+ "css/css-text/word-break/word-break-break-all-010.html": [
+ [
+ "/css/css-text/word-break/word-break-break-all-010.html",
+ [
+ [
+ "/css/css-text/word-break/reference/word-break-break-all-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/word-break/word-break-break-all-011.html": [
+ [
+ "/css/css-text/word-break/word-break-break-all-011.html",
+ [
+ [
+ "/css/css-text/word-break/reference/word-break-break-all-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/word-break/word-break-break-all-014.html": [
+ [
+ "/css/css-text/word-break/word-break-break-all-014.html",
+ [
+ [
+ "/css/css-text/word-break/reference/word-break-break-all-014-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/word-break/word-break-keep-all-000.html": [
[
"/css/css-text/word-break/word-break-keep-all-000.html",
@@ -198767,11 +198863,6 @@
{}
]
],
- "beacon/navigate.iFrame.sub.html": [
- [
- {}
- ]
- ],
"beacon/resources/beacon.py": [
[
{}
@@ -265762,6 +265853,16 @@
{}
]
],
+ "css/css-text/word-break/reference/word-break-break-all-010-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/word-break/reference/word-break-break-all-014-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/word-break/reference/word-break-break-all-ref-000.html": [
[
{}
@@ -283657,6 +283758,21 @@
{}
]
],
+ "html/browsers/offline/appcache/resources/appcache-data.py": [
+ [
+ {}
+ ]
+ ],
+ "html/browsers/offline/appcache/resources/appcache-iframe.manifest": [
+ [
+ {}
+ ]
+ ],
+ "html/browsers/offline/appcache/resources/appcache-iframe.py": [
+ [
+ {}
+ ]
+ ],
"html/browsers/offline/appcache/workers/resources/appcache-dedicated-worker-not-in-cache.js": [
[
{}
@@ -294027,6 +294143,11 @@
{}
]
],
+ "interfaces/wasm-web-api.idl": [
+ [
+ {}
+ ]
+ ],
"interfaces/web-animations.idl": [
[
{}
@@ -358201,6 +358322,12 @@
{}
]
],
+ "html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html": [
+ [
+ "/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html",
+ {}
+ ]
+ ],
"html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html": [
[
"/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html",
@@ -359291,6 +359418,12 @@
{}
]
],
+ "html/browsers/offline/appcache/appcache-iframe.https.html": [
+ [
+ "/html/browsers/offline/appcache/appcache-iframe.https.html",
+ {}
+ ]
+ ],
"html/browsers/offline/appcache/workers/appcache-worker.https.html": [
[
"/html/browsers/offline/appcache/workers/appcache-worker.https.html",
@@ -372885,6 +373018,12 @@
{}
]
],
+ "mediacapture-streams/MediaStream-clone.https.html": [
+ [
+ "/mediacapture-streams/MediaStream-clone.https.html",
+ {}
+ ]
+ ],
"mediacapture-streams/MediaStream-default-feature-policy.https.html": [
[
"/mediacapture-streams/MediaStream-default-feature-policy.https.html",
@@ -402043,6 +402182,24 @@
{}
]
],
+ "wasm/webapi/contenttype.any.js": [
+ [
+ "/wasm/webapi/contenttype.any.html",
+ {}
+ ],
+ [
+ "/wasm/webapi/contenttype.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/wasm/webapi/contenttype.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/wasm/webapi/contenttype.any.worker.html",
+ {}
+ ]
+ ],
"web-animations/animation-model/animation-types/accumulation-per-property.html": [
[
"/web-animations/animation-model/animation-types/accumulation-per-property.html",
@@ -442447,11 +442604,11 @@
"testharness"
],
"beacon/beacon-common.sub.js": [
- "0a36283b26379e16ccfd2c33cf05e0395dc18331",
+ "ae2f169f272e9efbbea3b7464ea77c34fe65c6e1",
"support"
],
"beacon/beacon-cors.sub.window.js": [
- "f4bccf177e3b4585a5efe0b6cd0d6edc24fe48f9",
+ "411cd1c94924127ce95c27707d283e7ca342f367",
"testharness"
],
"beacon/beacon-error.window.js": [
@@ -442467,7 +442624,7 @@
"testharness"
],
"beacon/beacon-redirect.window.js": [
- "659759baa3f5c58b26b9ed042047348b67a23e44",
+ "53f229abff1744b5766efe808c00f9b656296391",
"testharness"
],
"beacon/headers/header-content-type.html": [
@@ -442514,10 +442671,6 @@
"958daf4865d1d7c9dfb621a163e15a8862330d2b",
"testharness"
],
- "beacon/navigate.iFrame.sub.html": [
- "f4c7846e522b553985cc0ad253e439bd6d315975",
- "support"
- ],
"beacon/resources/beacon.py": [
"5f2553d3c4d506f7e292cfb73d81930a83a12d76",
"support"
@@ -549246,6 +549399,18 @@
"12df558fd2c2fa64783720cb9d1be07fa7f85572",
"reftest"
],
+ "css/css-masking/clip-path/clip-path-inline-001.html": [
+ "343646464a98b761fa3eee2f37260c9848ef067a",
+ "reftest"
+ ],
+ "css/css-masking/clip-path/clip-path-inline-002.html": [
+ "d56117e22b87975d5367b0af18ebd5ad25cc744a",
+ "reftest"
+ ],
+ "css/css-masking/clip-path/clip-path-inline-003.html": [
+ "4c907a46120da6a774193f83a6c1c89e5bd9b2f2",
+ "reftest"
+ ],
"css/css-masking/clip-path/clip-path-path-001.html": [
"ebdfc2297bbcc8225f92ba9dfa2ed33819f2f9a9",
"reftest"
@@ -549595,7 +549760,7 @@
"support"
],
"css/css-masking/mask-svg-content/reference/mask-text-001-ref.svg": [
- "48737c03d1e9d8be22b67c990be0d3ff9b420160",
+ "3fabeb01d762fc1eda9eb198b3051d7ad6128361",
"support"
],
"css/css-masking/parsing/clip-invalid.html": [
@@ -550523,7 +550688,7 @@
"reftest"
],
"css/css-multicol/multicol-span-none-001-ref.xht": [
- "5472e779c8d180151a1959f9650b7398dbee50e2",
+ "4fcc57a658894e9ea8b75d80ee96f32353a27637",
"support"
],
"css/css-multicol/multicol-span-none-001.xht": [
@@ -559570,6 +559735,10 @@
"6203b55e9c6fe73cd317c3d4968c56609209b38d",
"reftest"
],
+ "css/css-text/overflow-wrap/overflow-wrap-break-word-004.html": [
+ "560ef63b2f94c5eeca83ee5ef63cdfc15fbdfe34",
+ "reftest"
+ ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [
"bce6c68389c32960d79e8fbbf61f9fa28c733165",
"reftest"
@@ -560974,6 +561143,10 @@
"5da564d4b73ed3c7442160bae701e38d6b7fb66a",
"reftest"
],
+ "css/css-text/white-space/pre-wrap-015.html": [
+ "f9063c98767e70c3899bc9a59b50b42a61240ae4",
+ "reftest"
+ ],
"css/css-text/white-space/reference/pre-wrap-001-ref.html": [
"8a8b5132db197bb9a76b1b44e461405f4cd9d1bc",
"support"
@@ -561158,6 +561331,14 @@
"0768b857d96624a63129f002d317019674d1ef0d",
"support"
],
+ "css/css-text/word-break/reference/word-break-break-all-010-ref.html": [
+ "0e0300a72dc920a5ffb54cda6fbe84a2f517d010",
+ "support"
+ ],
+ "css/css-text/word-break/reference/word-break-break-all-014-ref.html": [
+ "a8720a101c3b2d2616b661e51c60b55b85d2d667",
+ "support"
+ ],
"css/css-text/word-break/reference/word-break-break-all-ref-000.html": [
"579c2dc6a06c69bbb7384e51ad4b851e7d7b4410",
"support"
@@ -561334,6 +561515,18 @@
"9a7a591dafd4352f7df11dc9396608027ef80cd6",
"manual"
],
+ "css/css-text/word-break/word-break-break-all-010.html": [
+ "1ab97fb146a984da98a2400af0392187531edadc",
+ "reftest"
+ ],
+ "css/css-text/word-break/word-break-break-all-011.html": [
+ "ed07aeb7368da2273e394011f426c1ee65fe2b25",
+ "reftest"
+ ],
+ "css/css-text/word-break/word-break-break-all-014.html": [
+ "6885553ad685700e89d4d83ded7bc65269aa1123",
+ "reftest"
+ ],
"css/css-text/word-break/word-break-keep-all-000.html": [
"fce7487c33ad47aaeeb20fe5ccb1bc5180192329",
"reftest"
@@ -599987,7 +600180,7 @@
"support"
],
"generic-sensor/generic-sensor-iframe-tests.sub.js": [
- "97defcba4b2c73544e4842a90dd92ad5294d7791",
+ "c4195fee5f5ed10c4c30f1556e8ad8284f106a8d",
"support"
],
"generic-sensor/generic-sensor-tests.js": [
@@ -600598,6 +600791,10 @@
"d7037343d7daae486ba75570ad2dba376b6fd0ef",
"testharness"
],
+ "html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html": [
+ "8fe7d9f9770b25177b8eddc3eff9e7ecbcddd0c0",
+ "testharness"
+ ],
"html/browsers/browsing-the-web/history-traversal/support/window-name-after-cross-origin-main-frame-navigation-popup.sub.html": [
"e13d191658046bd584b1cd5ded7fb8d3aa4604db",
"support"
@@ -602010,6 +602207,22 @@
"1c45fada5a352f01bb2174cb0ce42e75e5f3d288",
"support"
],
+ "html/browsers/offline/appcache/appcache-iframe.https.html": [
+ "8e72664371540fe84f8e3d32df3912f8bee28fb3",
+ "testharness"
+ ],
+ "html/browsers/offline/appcache/resources/appcache-data.py": [
+ "f92c5116c0839c344ed02d951d932dc57708b36d",
+ "support"
+ ],
+ "html/browsers/offline/appcache/resources/appcache-iframe.manifest": [
+ "7221e909c6fe6db848c202f8c46544b213eea7aa",
+ "support"
+ ],
+ "html/browsers/offline/appcache/resources/appcache-iframe.py": [
+ "bc82788045fcaf6d841bb58cf905be9a6fa6f767",
+ "support"
+ ],
"html/browsers/offline/appcache/workers/appcache-worker.https.html": [
"96fe5f2b7d22c1cc208ccb61e25582a24489de0d",
"testharness"
@@ -602035,7 +602248,7 @@
"support"
],
"html/browsers/offline/appcache/workers/resources/appcache-worker.py": [
- "00281a2be72c0b39be4b466e310e850e63ad9ddb",
+ "106432191993d15d04ded140407fee7b52ec68e1",
"support"
],
"html/browsers/offline/application-cache-api/api_status_checking-manual.html": [
@@ -619747,7 +619960,7 @@
"support"
],
"interfaces/payment-request.idl": [
- "d930b57291e5301e4056d30192726023e9306512",
+ "843c66107b34bbb90aa64411487a09b2fa95e508",
"support"
],
"interfaces/performance-timeline.idl": [
@@ -619882,6 +620095,10 @@
"6de14fb8f0895a72b69f37b9dd8b72e2ab1604e0",
"support"
],
+ "interfaces/wasm-web-api.idl": [
+ "1cc2f17679b2e89604e0d4a901f0dabbaa6917e5",
+ "support"
+ ],
"interfaces/web-animations.idl": [
"7dce1002e666d3efa9b18531e05b087f0f4adc0d",
"support"
@@ -621630,6 +621847,10 @@
"faa2c39b30f54d5f3a8a38f9a6eeb46e32e722d7",
"testharness"
],
+ "mediacapture-streams/MediaStream-clone.https.html": [
+ "134918815c3d08e20771d6177021cd24c89b4ccb",
+ "testharness"
+ ],
"mediacapture-streams/MediaStream-default-feature-policy.https.html": [
"21e3f5b9af8567cb015604bbcb021cc04216e4c2",
"testharness"
@@ -621647,7 +621868,7 @@
"manual"
],
"mediacapture-streams/MediaStream-idl.https.html": [
- "8e60709cf1b5f1381bdcd5c4deb5bef3703fea2a",
+ "32e34f2b4b666700aa1879dac251787cf1024ee0",
"testharness"
],
"mediacapture-streams/MediaStream-removetrack.https.html": [
@@ -631883,7 +632104,7 @@
"testharness"
],
"payment-request/payment-request-id-attribute.https.html": [
- "455b65a7da32d5e2d7231d4c5bf692826efbf4a4",
+ "e5d0c7a66eee67f529cd48fa640f08481f5e5a38",
"testharness"
],
"payment-request/payment-request-insecure.http.html": [
@@ -647079,7 +647300,7 @@
"testharness"
],
"speech-api/idlharness.window.js": [
- "2f9702878a3037c6a6e4df3d6d329827740bf41e",
+ "6cfcbb2e95fd7e3e7d32aab6faae7cb231c6fec6",
"testharness"
],
"speech-api/webspeech.js": [
@@ -656887,7 +657108,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/fennec.py": [
- "db271acc50ea08e61efd09848a9ff78b53b8ed1e",
+ "ddb1667a22fe39217d4488de6d44a51177a39c32",
"support"
],
"tools/wptrunner/wptrunner/browsers/firefox.py": [
@@ -656931,7 +657152,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/webkit.py": [
- "9482f2f774332476150d3e1bbb452d5545e2ef69",
+ "b09114a9a5444717157edb37c24add6ba99cf421",
"support"
],
"tools/wptrunner/wptrunner/config.py": [
@@ -656979,7 +657200,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executorservo.py": [
- "caa97145560ec1c1d0e78d38cdd7a857c3972d40",
+ "49b682c749f897eb234c6bf4bb7ade3ed021dd7b",
"support"
],
"tools/wptrunner/wptrunner/executors/executorservodriver.py": [
@@ -657459,7 +657680,7 @@
"support"
],
"tools/wptserve/tests/functional/test_pipes.py": [
- "83b2c621641ca17b670eb5a8c08b38f8d37cc2a7",
+ "0299ea0e62b2d97f20054f7aa8f52a497361e472",
"support"
],
"tools/wptserve/tests/functional/test_request.py": [
@@ -657495,7 +657716,7 @@
"support"
],
"tools/wptserve/wptserve/constants.py": [
- "ec150ba5c8f7a3b89a63903b7dc757c96dfff1a9",
+ "e248280ef36e93832b4c481a102c3177e618c42d",
"support"
],
"tools/wptserve/wptserve/handlers.py": [
@@ -657519,7 +657740,7 @@
"support"
],
"tools/wptserve/wptserve/response.py": [
- "44299cc994ef43ebe72053e1444f5af7cd7f9598",
+ "00a609b2950ddbb696bf80f2ec0038f427f8f465",
"support"
],
"tools/wptserve/wptserve/router.py": [
@@ -660026,6 +660247,10 @@
"6f2ccf465e93a160c73df548fc58774a5040f0e6",
"testharness"
],
+ "wasm/webapi/contenttype.any.js": [
+ "78069c03c9ff44c4b32621f38691d8238c1972e1",
+ "testharness"
+ ],
"web-animations/META.yml": [
"bf92f7a7516302641aabcefe3c482ba6889c2c23",
"support"
@@ -660287,7 +660512,7 @@
"testharness"
],
"web-animations/timing-model/animations/play-states.html": [
- "5d8fdeac6ecc5c2908a2cfe1af9d2176359af0ad",
+ "ec7d8c842fc9329c3508c22916ce59a236006296",
"testharness"
],
"web-animations/timing-model/animations/playing-an-animation.html": [
@@ -663067,7 +663292,7 @@
"support"
],
"webrtc/RTCIceTransport-extension.https.html": [
- "5adee9fbe61eb9a8f7235b7faa6670eaea45cc89",
+ "7803bde9b3aa61f6ac500d62c8a3aed79b1a1412",
"testharness"
],
"webrtc/RTCIceTransport.html": [
@@ -663087,7 +663312,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-addTransceiver.https.html": [
- "c0c5d782c2fa365052d08d63eb14954a756c8bc0",
+ "6df056117d02452e040b153147dbdad7bf8fa9bb",
"testharness"
],
"webrtc/RTCPeerConnection-canTrickleIceCandidates.html": [
@@ -663235,15 +663460,15 @@
"testharness"
],
"webrtc/RTCQuicStream.https.html": [
- "33025451b252e1bdf2491fa118e072f4b8711d12",
+ "68c88e2757c2ab35736d3480dfbc6095580b06d3",
"testharness"
],
"webrtc/RTCQuicTransport-helper.js": [
- "3ea19d7a78e4a3788e97d0fa537d51d4b9e6b4fc",
+ "7e28feae0937d4a28710be5f0e807c4af0f7c039",
"support"
],
"webrtc/RTCQuicTransport.https.html": [
- "ec79bc228ad21de3a9ce3c2ee812a7d50e57571b",
+ "3bcc93d95375ccf0bbaa8ba892606099ec8f0bf4",
"testharness"
],
"webrtc/RTCRtpCapabilities-helper.js": [
@@ -663259,7 +663484,7 @@
"testharness"
],
"webrtc/RTCRtpParameters-encodings.html": [
- "b4a60c8a6d406cd820524679be172aed6cad900b",
+ "b446dde230efbbdb197c7f24f16e2490271563c4",
"testharness"
],
"webrtc/RTCRtpParameters-headerExtensions.html": [
@@ -663267,7 +663492,7 @@
"testharness"
],
"webrtc/RTCRtpParameters-helper.js": [
- "9c4b6cd412e451a57318b507f264235ea827fa82",
+ "c4105decdfcb12286d4b153ab07f7be25baf1aad",
"support"
],
"webrtc/RTCRtpParameters-rtcp.html": [
@@ -663287,7 +663512,7 @@
"testharness"
],
"webrtc/RTCRtpReceiver-getParameters.html": [
- "8b6d648bf616c847d9d8300a09f8ab078ac026ce",
+ "97e5d10d1e53b18d3c9deca969d2046881418569",
"testharness"
],
"webrtc/RTCRtpReceiver-getStats.https.html": [
diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html.ini
new file mode 100644
index 00000000000..1df73b03f34
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html.ini
@@ -0,0 +1,2 @@
+[overflow-wrap-break-word-004.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-010.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-010.html.ini
new file mode 100644
index 00000000000..e6a156581dd
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-010.html.ini
@@ -0,0 +1,2 @@
+[word-break-break-all-010.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-011.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-011.html.ini
new file mode 100644
index 00000000000..6833da89a76
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-011.html.ini
@@ -0,0 +1,2 @@
+[word-break-break-all-011.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
index 834487d446f..8b9ad0ff2b6 100644
--- a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
@@ -41,9 +41,6 @@
[outline-width intermediate]
expected: FAIL
- [outline-width end]
- expected: FAIL
-
[min-width intermediate]
expected: FAIL
@@ -71,9 +68,6 @@
[bottom intermediate]
expected: FAIL
- [right end]
- expected: FAIL
-
- [padding-left intermediate]
+ [text-indent intermediate]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini
index 3951cd266d5..0d630fb814a 100644
--- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini
+++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini
@@ -1,4 +1,5 @@
[fetch-in-iframe.html]
+ expected: CRASH
[Untitled]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html.ini
new file mode 100644
index 00000000000..4342fc2c583
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html.ini
@@ -0,0 +1,4 @@
+[scroll-restoration-order.html]
+ [Traversing history should restore scroll position after dispatching popstate and before dispatching hashchange]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+ [Multiple history traversals from the same task]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
new file mode 100644
index 00000000000..75d75b4cda2
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_2.html]
+ [Multiple history traversals, last would be aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
new file mode 100644
index 00000000000..dc2e45516de
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_5.html]
+ [Multiple history traversals, last would be aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html.ini
new file mode 100644
index 00000000000..a30c51097ab
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html.ini
@@ -0,0 +1,16 @@
+[location-protocol-setter-non-broken-weird.html]
+ [Set location.protocol to data]
+ expected: FAIL
+
+ [Set location.protocol to ftp]
+ expected: FAIL
+
+ [Set location.protocol to gopher]
+ expected: FAIL
+
+ [Set location.protocol to x]
+ expected: FAIL
+
+ [Set location.protocol to http+x]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
index 29b0025a2ae..0f1a214d0ee 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
@@ -5,11 +5,29 @@
expected: TIMEOUT
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
- expected: TIMEOUT
+ expected: FAIL
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
expected: TIMEOUT
[picture: source (max-width:500px) valid image, img valid image, resize to narrow]
- expected: TIMEOUT
+ expected: FAIL
+
+ [picture: source (max-width:500px) broken image, img valid image, resize to narrow]
+ expected: FAIL
+
+ [img (srcset 1 cand) valid image, resize to wide]
+ expected: FAIL
+
+ [picture: same URL in source (max-width:500px) and img, resize to wide]
+ expected: FAIL
+
+ [img (srcset 1 cand) valid image, resize to narrow]
+ expected: FAIL
+
+ [picture: source (max-width:500px) valid image, img broken image, resize to wide]
+ expected: FAIL
+
+ [picture: same URL in source (max-width:500px) and img, resize to narrow]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini
new file mode 100644
index 00000000000..a9677391662
--- /dev/null
+++ b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini
@@ -0,0 +1,4 @@
+[DOMContentLoaded-defer.html]
+ [The end: DOMContentLoaded and defer scripts]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini
new file mode 100644
index 00000000000..c6d49957c4a
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini
@@ -0,0 +1,4 @@
+[aborted-parser.window.html]
+ [document.open() after parser is aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-origin.sub.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-origin.sub.window.js.ini
index da4c074ea0a..516317bf910 100644
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-origin.sub.window.js.ini
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-origin.sub.window.js.ini
@@ -12,3 +12,6 @@
[document.open should throw a SecurityError with cross-origin document even when the ignore-opens-during-unload counter is greater than 0 (during pagehide event)]
expected: FAIL
+ [document.open should throw a SecurityError with cross-origin document even when there is an active parser executing script]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini
deleted file mode 100644
index 2ed601c6ff4..00000000000
--- a/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini
+++ /dev/null
@@ -1,283 +0,0 @@
-[quirks.html]
- [top: -\\31 .5]
- expected: FAIL
-
- [bottom: -1A]
- expected: FAIL
-
- [bottom: -1a]
- expected: FAIL
-
- [top: @1]
- expected: FAIL
-
- [top: "1a"]
- expected: FAIL
-
- [top: @a]
- expected: FAIL
-
- [bottom: "1"]
- expected: FAIL
-
- [bottom: -/**/1]
- expected: FAIL
-
- [top: +/**/1]
- expected: FAIL
-
- [bottom: @1a]
- expected: FAIL
-
- [top: 1\\31 ]
- expected: FAIL
-
- [top: url('1')]
- expected: FAIL
-
- [bottom: -\\31 ]
- expected: FAIL
-
- [top: calc(1)]
- expected: FAIL
-
- [top: \\31 ]
- expected: FAIL
-
- [bottom: +1\\31 ]
- expected: FAIL
-
- [bottom: 1\\31 .5]
- expected: FAIL
-
- [bottom: #0001]
- expected: FAIL
-
- [top: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: 1a]
- expected: FAIL
-
- [bottom: A]
- expected: FAIL
-
- [bottom: #01]
- expected: FAIL
-
- [top: +\\31 .5]
- expected: FAIL
-
- [bottom: #1]
- expected: FAIL
-
- [top: -/**/1]
- expected: FAIL
-
- [bottom: +\\31 .5]
- expected: FAIL
-
- [bottom: \\31 ]
- expected: FAIL
-
- [bottom: calc(1)]
- expected: FAIL
-
- [top: #001]
- expected: FAIL
-
- [top: +\\31 ]
- expected: FAIL
-
- [bottom: +\\31 ]
- expected: FAIL
-
- [top: +1.5]
- expected: FAIL
-
- [top: +1\\31 ]
- expected: FAIL
-
- [bottom: @a]
- expected: FAIL
-
- [bottom: @1]
- expected: FAIL
-
- [top: #1]
- expected: FAIL
-
- [top: 1a]
- expected: FAIL
-
- [bottom: +1a]
- expected: FAIL
-
- [bottom: +1A]
- expected: FAIL
-
- [bottom: "a"]
- expected: FAIL
-
- [top: #00001]
- expected: FAIL
-
- [bottom: -1\\31 .5]
- expected: FAIL
-
- [top: "1"]
- expected: FAIL
-
- [bottom: 1.5]
- expected: FAIL
-
- [bottom: -\\31 .5]
- expected: FAIL
-
- [bottom: url('1')]
- expected: FAIL
-
- [bottom: -1.5]
- expected: FAIL
-
- [top: \\31 .5]
- expected: FAIL
-
- [bottom: "1a"]
- expected: FAIL
-
- [bottom: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: +1\\31 .5]
- expected: FAIL
-
- [bottom: 1\\31 ]
- expected: FAIL
-
- [bottom: +/**/1]
- expected: FAIL
-
- [bottom: #00001]
- expected: FAIL
-
- [top: url(1)]
- expected: FAIL
-
- [bottom: #001]
- expected: FAIL
-
- [top: +1\\31 .5]
- expected: FAIL
-
- [top: -1a]
- expected: FAIL
-
- [top: -1A]
- expected: FAIL
-
- [bottom: url(1)]
- expected: FAIL
-
- [top: a]
- expected: FAIL
-
- [top: A]
- expected: FAIL
-
- [top: #000001]
- expected: FAIL
-
- [top: 1]
- expected: FAIL
-
- [top: 1\\31 .5]
- expected: FAIL
-
- [bottom: a]
- expected: FAIL
-
- [bottom: 1]
- expected: FAIL
-
- [bottom: +1]
- expected: FAIL
-
- [bottom: #000001]
- expected: FAIL
-
- [bottom: +a]
- expected: FAIL
-
- [bottom: +A]
- expected: FAIL
-
- [top: 1.5]
- expected: FAIL
-
- [top: +A]
- expected: FAIL
-
- [top: +a]
- expected: FAIL
-
- [top: +1]
- expected: FAIL
-
- [top: -1.5]
- expected: FAIL
-
- [top: -1\\31 .5]
- expected: FAIL
-
- [top: +1a]
- expected: FAIL
-
- [top: +1A]
- expected: FAIL
-
- [top: @1a]
- expected: FAIL
-
- [bottom: \\31 .5]
- expected: FAIL
-
- [top: "a"]
- expected: FAIL
-
- [top: #01]
- expected: FAIL
-
- [bottom: +1.5]
- expected: FAIL
-
- [bottom: -A]
- expected: FAIL
-
- [bottom: -a]
- expected: FAIL
-
- [bottom: -1\\31 ]
- expected: FAIL
-
- [top: #0001]
- expected: FAIL
-
- [bottom: -1]
- expected: FAIL
-
- [top: -\\31 ]
- expected: FAIL
-
- [top: -A]
- expected: FAIL
-
- [top: -a]
- expected: FAIL
-
- [top: -1]
- expected: FAIL
-
- [top: -1\\31 ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
index f6c2f3cdc99..33b63f3c519 100644
--- a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
+++ b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
@@ -1,26 +1,20 @@
[urlencoded-parser.any.html]
- [request.formData() with input: &&&a=b&&&&c=d&]
- expected: FAIL
-
[response.formData() with input: a&b&c]
expected: FAIL
[request.formData() with input: a&b&c]
expected: FAIL
- [response.formData() with input: a=b&c=d&]
- expected: FAIL
-
- [request.formData() with input: _charset_=windows-1252&test=%C2x]
- expected: FAIL
-
[response.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
[response.formData() with input: &&&a=b&&&&c=d&]
expected: FAIL
- [response.formData() with input: a=b&c=d]
+ [request.formData() with input: a=b&c=d]
+ expected: FAIL
+
+ [request.formData() with input: a=b&c=d&]
expected: FAIL
@@ -28,15 +22,18 @@
[request.formData() with input: a&b&c]
expected: FAIL
- [response.formData() with input: a&b&c]
+ [request.formData() with input: a=b&c=d&]
expected: FAIL
- [request.formData() with input: a=b&c=d&]
+ [response.formData() with input: _charset_=windows-1252&test=%C2x]
+ expected: FAIL
+
+ [response.formData() with input: a=b&c=d&]
expected: FAIL
- [request.formData() with input: _charset_=windows-1252&test=%C2x]
+ [response.formData() with input: &&&a=b&&&&c=d&]
expected: FAIL
- [response.formData() with input: _charset_=windows-1252&test=%C2x]
+ [response.formData() with input: a=b&c=d]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini b/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini
new file mode 100644
index 00000000000..004edb5b712
--- /dev/null
+++ b/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini
@@ -0,0 +1,95 @@
+[contenttype.any.worker.html]
+ [Response with Content-Type "text/wasm": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/octet-stream": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;x": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;x": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/octet-stream": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/javascript": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "text/wasm": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;charset=UTF-8": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;charset=UTF-8": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/javascript": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "": compileStreaming]
+ expected: FAIL
+
+
+[contenttype.any.sharedworker.html]
+ [contenttype]
+ expected: FAIL
+
+
+[contenttype.any.html]
+ [Response with Content-Type "text/wasm": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/octet-stream": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;x": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;x": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/octet-stream": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/javascript": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "text/wasm": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;charset=UTF-8": instantiateStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/wasm;charset=UTF-8": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "application/javascript": compileStreaming]
+ expected: FAIL
+
+ [Response with Content-Type "": compileStreaming]
+ expected: FAIL
+
+
+[contenttype.any.serviceworker.html]
+ expected: TIMEOUT
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 a56bad443a2..66bd350083b 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,5 +1,4 @@
[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/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
index bfd4d6dd2d6..bf2a1d61bab 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
@@ -1,5 +1,4 @@
[import-in-moduleworker.html]
- expected: ERROR
[Base URL in module dedicated workers: import]
expected: FAIL
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
index 650c91da4a6..333edb3a26e 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
@@ -1,5 +1,4 @@
[sharedworker-in-worker.html]
- expected: ERROR
[Base URL in workers: new SharedWorker()]
expected: FAIL
diff --git a/tests/wpt/web-platform-tests/beacon/beacon-common.sub.js b/tests/wpt/web-platform-tests/beacon/beacon-common.sub.js
index 0a36283b263..ae2f169f272 100644
--- a/tests/wpt/web-platform-tests/beacon/beacon-common.sub.js
+++ b/tests/wpt/web-platform-tests/beacon/beacon-common.sub.js
@@ -138,33 +138,23 @@ function initSession(testCases) {
// Schedules async_test's for each of the test cases, treating them as a single session,
// and wires up the continueAfterSendingBeacon() and waitForResults() calls.
// The method looks for several "extension" functions in the global scope:
-// - self.buildId: if present, can change the display name of a test.
// - self.buildBaseUrl: if present, can change the base URL of a beacon target URL (this
// is the scheme, hostname, and port).
// - self.buildTargetUrl: if present, can modify a beacon target URL (for example wrap it).
// Parameters:
// testCases: An array of test cases.
-function runTests(testCases) {
- var session = initSession(testCases);
+// sendData [optional]: A function that sends the beacon.
+function runTests(testCases, sendData = self.sendData) {
+ const session = initSession(testCases);
testCases.forEach(function(testCase, testIndex) {
// Make a copy of the test case as we'll be storing some metadata on it,
// such as which session it belongs to.
- var testCaseCopy = Object.assign({ session: session }, testCase);
+ const testCaseCopy = Object.assign({ session: session }, testCase);
- // Extension point: generate the test id.
- var testId = testCase.id;
- if (self.buildId) {
- testId = self.buildId(testId);
- }
- testCaseCopy.origId = testCaseCopy.id;
- testCaseCopy.id = testId;
testCaseCopy.index = testIndex;
- session.add(testCaseCopy);
-
- // Schedule the sendbeacon in an async test.
- async_test(function(test) {
+ async_test((test) => {
// Save the testharness.js 'test' object, so that we only have one object
// to pass around.
testCaseCopy.test = test;
@@ -174,22 +164,15 @@ function runTests(testCases) {
if (self.buildBaseUrl) {
baseUrl = self.buildBaseUrl(baseUrl);
}
- var targetUrl = `${baseUrl}/beacon/resources/beacon.py?cmd=store&sid=${session.id}&tid=${testId}&tidx=${testIndex}`;
+ var targetUrl = `${baseUrl}/beacon/resources/beacon.py?cmd=store&sid=${session.id}&tid=${testCaseCopy.id}&tidx=${testIndex}`;
if (self.buildTargetUrl) {
targetUrl = self.buildTargetUrl(targetUrl);
}
// Attach the URL to the test object for debugging purposes.
testCaseCopy.url = targetUrl;
- // Extension point: send the beacon immediately, or defer.
- var sendFunc = test.step_func(function sendImmediately(testCase) {
- var sendResult = sendData(testCase);
- continueAfterSendingBeacon(sendResult, testCase);
- });
- if (self.sendFunc) {
- sendFunc = test.step_func(self.sendFunc);
- }
- sendFunc(testCaseCopy);
+ assert_true(sendData(testCaseCopy), 'sendBeacon should succeed');
+ waitForResult(testCaseCopy).then(() => test.done(), test.step_func((e) => {throw e;}));
}, `Verify 'navigator.sendbeacon()' successfully sends for variant: ${testCaseCopy.id}`);
});
}
@@ -201,161 +184,54 @@ function runTests(testCases) {
// the test.
// Returns the result of the 'sendbeacon()' function call, true or false.
function sendData(testCase) {
- var sent = false;
- if (testCase.data) {
- sent = self.navigator.sendBeacon(testCase.url, testCase.data);
- } else {
- sent = self.navigator.sendBeacon(testCase.url)
- }
- return sent;
+ return self.navigator.sendBeacon(testCase.url, testCase.data);
}
-// Continues a single test after the beacon has been sent for that test.
-// Will trigger waitForResults() for the session if this is the last test
-// in the session to send its beacon.
-// Assumption: will be called on the test's step_func so that assert's do
-// not have to be wrapped.
-function continueAfterSendingBeacon(sendResult, testCase) {
- var session = testCase.session;
-
- // Recaclulate the sent vs. total counts.
- if (sendResult) {
- session.sentCount++;
- } else {
- session.totalCount--;
- }
-
- // If this was the last test in the session to send its beacon, start polling for results.
- // Note that we start polling even if just one test in the session sends successfully,
- // so that if any of the others fail, we still get results from the tests that did send.
- if (session.sentCount == session.totalCount) {
- // Exit the current test's execution context in order to run the poll
- // loop from the harness context.
- step_timeout(waitForResults.bind(this, session), 0);
- }
-
- // Now fail this test if the beacon did not send. It will be excluded from the poll
- // loop because of the calculation adjustment above.
- assert_true(sendResult, "'sendbeacon' function call must succeed");
-}
-
-// Kicks off an asynchronous monitor to poll the server for test results. As we
-// verify that the server has received and validated a beacon, we will complete
-// its testharness test.
-function waitForResults(session) {
- // Poll for status until all of the results come in.
- fetch(`resources/beacon.py?cmd=stat&sid=${session.id}&tidx_min=0&tidx_max=${session.totalCount-1}`).then(
- function(response) {
- // Parse as text(), not json(), so that we can log the raw response if
- // it's invalid.
- response.text().then(function(rawResponse) {
- // Check that we got a response we expect and know how to handle.
- var results;
- var failure;
- try {
- results = JSON.parse(rawResponse);
-
- if (results.length === undefined) {
- failure = `bad validation response schema: rawResponse='${rawResponse}'`;
- }
- } catch (e) {
- failure = `bad validation response: rawResponse='${rawResponse}', got parse error '${e}'`;
- }
-
- if (failure) {
- // At this point we can't deterministically get results for all of the
- // tests in the session, so fail the entire session.
- failSession(session, failure);
- return;
- }
-
- // The 'stat' call will return an array of zero or more results
- // of sendbeacon() calls that the server has received and validated.
- results.forEach(function(result) {
- var testCase = session.testCaseLookup[result.id];
-
- // While stash.take on the server is supposed to honor read-once, since we're
- // polling so frequently it is possible that we will receive the same test result
- // more than once.
- if (!testCase.done) {
- testCase.done = true;
- session.doneCount++;
- }
-
- // Validate that the sendbeacon() was actually sent to the server.
- var test = testCase.test;
- test.step(function() {
- // null JSON values parse as null, not undefined
- assert_equals(result.error, null, "'sendbeacon' data must not fail validation");
- });
-
- test.done();
- });
-
- // Continue polling until all of the results come in.
- if (session.doneCount < session.sentCount) {
- // testharness.js frowns upon the use of explicit timeouts, but there is no way
- // around the need to poll for these tests, and there is no use spamming the server
- // with requestAnimationFrame() just to avoid the use of step_timeout.
- step_timeout(waitForResults.bind(this, session), 100);
- }
- }).catch(function(error) {
- failSession(session, `unexpected error reading response, error='${error}'`);
- });
+// Poll the server for the test result.
+async function waitForResult(testCase) {
+ const session = testCase.session;
+ const index = testCase.index;
+ const url = `resources/beacon.py?cmd=stat&sid=${session.id}&tidx_min=${index}&tidx_max=${index}`;
+ for (let i = 0; i < 30; ++i) {
+ const response = await fetch(url);
+ const text = await response.text();
+ const results = JSON.parse(text);
+
+ if (results.length === 0) {
+ await new Promise(resolve => step_timeout(resolve, 100));
+ continue;
}
- );
-}
-
-// Fails all of the tests in the session, meant to be called when an infrastructural
-// issue prevents us from deterministically completing the individual tests.
-function failSession(session, reason) {
- session.testCases.forEach(function(testCase) {
- var test = testCase.test;
- test.unreached_func(reason)();
- });
+ assert_equals(results.length, 1, `bad response: '${text}'`);;
+ // null JSON values parse as null, not undefined
+ assert_equals(results[0].error, null, "'sendbeacon' data must not fail validation");
+ return;
+ }
+ assert_true(false, 'timeout');
}
// Creates an iframe on the document's body and runs the sample tests from the iframe.
// The iframe is navigated immediately after it sends the data, and the window verifies
// that the data is still successfully sent.
-// funcName: "beacon" to send the data via navigator.sendBeacon(),
-// "fetch" to send the data via fetch() with the keepalive flag.
-function runSendInIframeAndNavigateTests(funcName) {
+function runSendInIframeAndNavigateTests() {
var iframe = document.createElement("iframe");
iframe.id = "iframe";
iframe.onload = function() {
- var tests = Array();
-
// Clear our onload handler to prevent re-running the tests as we navigate away.
- this.onload = null;
-
- // Implement the self.buildId extension to identify the parameterized
- // test in the report.
- self.buildId = function(baseId) {
- return `${baseId}-${funcName}-NAVIGATE`;
- };
-
- window.onmessage = function(e) {
- // The iframe will execute sendData() for us and return the result.
- var testCase = tests[e.data];
- continueAfterSendingBeacon(true /* sendResult */, testCase);
- };
-
- // Implement the self.sendFunc extension to send the beacon indirectly,
- // from an iFrame that we can then navigate.
- self.sendFunc = function(testCase) {
- var iframeWindow = document.getElementById("iframe").contentWindow;
- // We run into problems passing the testCase over the document boundary,
- // because of structured cloning constraints. Instead we'll send over the
- // test case id, and the iFrame can load the static test case by including
- // beacon-common.js.
- tests[testCase.origId] = testCase;
- iframeWindow.postMessage([testCase.origId, testCase.url, funcName], "*");
- };
-
- runTests(sampleTests);
+ iframe.onload = null;
+ function sendData(testCase) {
+ return iframe.contentWindow.navigator.sendBeacon(testCase.url, testCase.data);
+ }
+ const tests = [];
+ for (const test of sampleTests) {
+ const copy = Object.assign({}, test);
+ copy.id = `${test.id}-NAVIGATE`;
+ tests.push(copy);
+ }
+ runTests(tests, sendData);
+ // Now navigate ourselves.
+ iframe.contentWindow.location = "http://{{host}}:{{ports[http][0]}}/";
};
- iframe.src = "navigate.iFrame.sub.html";
+ iframe.srcdoc = '<html></html>';
document.body.appendChild(iframe);
}
diff --git a/tests/wpt/web-platform-tests/beacon/beacon-cors.sub.window.js b/tests/wpt/web-platform-tests/beacon/beacon-cors.sub.window.js
index f4bccf177e3..411cd1c9492 100644
--- a/tests/wpt/web-platform-tests/beacon/beacon-cors.sub.window.js
+++ b/tests/wpt/web-platform-tests/beacon/beacon-cors.sub.window.js
@@ -7,12 +7,6 @@
// the beacon handler will return CORS headers. This test ensures that the
// sendBeacon() succeeds in either case.
[true, false].forEach(function(allowCors) {
- // Implement the self.buildId extension to identify the parameterized
- // test in the report.
- self.buildId = function(baseId) {
- return `${baseId}-${allowCors ? "CORS-ALLOW" : "CORS-FORBID"}`;
- };
-
// Implement the self.buildBaseUrl and self.buildTargetUrl extensions
// to change the target URL to use a cross-origin domain name.
self.buildBaseUrl = function(baseUrl) {
@@ -35,7 +29,13 @@
return allowCors ? `${targetUrl}&origin=http://{{host}}:{{ports[http][0]}}&credentials=true` : targetUrl;
}
- runTests(sampleTests);
+ const tests = [];
+ for (const test of sampleTests) {
+ const copy = Object.assign({}, test);
+ copy.id = `${test.id}-${allowCors ? "CORS-ALLOW" : "CORS-FORBID"}`;
+ tests.push(copy);
+ }
+ runTests(tests);
});
// Now test a cross-origin request that doesn't use a safelisted Content-Type and ensure
@@ -43,12 +43,6 @@
// header is used there should be a preflight/options request and we should only succeed
// send the payload if the proper CORS headers are used.
{
- // Implement the self.buildId extension to identify the parameterized
- // test in the report.
- self.buildId = function (baseId) {
- return `${baseId}-PREFLIGHT-ALLOW`;
- };
-
// Implement the self.buildBaseUrl and self.buildTargetUrl extensions
// to change the target URL to use a cross-origin domain name.
self.buildBaseUrl = function (baseUrl) {
@@ -60,8 +54,13 @@
self.buildTargetUrl = function (targetUrl) {
return `${targetUrl}&origin=http://{{host}}:{{ports[http][0]}}&credentials=true&preflightExpected=true`;
}
-
- runTests(preflightTests);
+ const tests = [];
+ for (const test of preflightTests) {
+ const copy = Object.assign({}, test);
+ copy.id = `${test.id}-PREFLIGHT-ALLOW`;
+ tests.push(copy);
+ }
+ runTests(tests);
}
-done(); \ No newline at end of file
+done();
diff --git a/tests/wpt/web-platform-tests/beacon/beacon-redirect.window.js b/tests/wpt/web-platform-tests/beacon/beacon-redirect.window.js
index 659759baa3f..53f229abff1 100644
--- a/tests/wpt/web-platform-tests/beacon/beacon-redirect.window.js
+++ b/tests/wpt/web-platform-tests/beacon/beacon-redirect.window.js
@@ -7,19 +7,18 @@
// Note that status codes 307 and 308 are the only codes that will maintain POST data
// through a redirect.
[307, 308].forEach(function(status) {
- // Implement the self.buildId extension to identify the parameterized
- // test in the report.
- self.buildId = function(baseId) {
- return `${baseId}-${status}`;
- };
-
// Implement the self.buildTargetUrl extension to inject a redirect to
// the sendBeacon target.
self.buildTargetUrl = function(targetUrl) {
return `/common/redirect.py?status=${status}&location=${encodeURIComponent(targetUrl)}`;
};
-
- runTests(sampleTests);
+ const tests = [];
+ for (const test of sampleTests) {
+ const copy = Object.assign({}, test);
+ copy.id = `${test.id}-${status}`;
+ tests.push(copy);
+ }
+ runTests(tests);
});
done();
diff --git a/tests/wpt/web-platform-tests/beacon/navigate.iFrame.sub.html b/tests/wpt/web-platform-tests/beacon/navigate.iFrame.sub.html
deleted file mode 100644
index f4c7846e522..00000000000
--- a/tests/wpt/web-platform-tests/beacon/navigate.iFrame.sub.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>W3C Beacon As Fetch (Fetch KeepAlive) Navigate Test</title>
-</head>
-<body>
- <script src="beacon-common.sub.js"></script>
- <script>
- "use strict";
-
- // An array should be passed through postMessage to this iFrame, where
- // [0] contains a test case id as defined in beacon-common.js.
- // [1] is the URL for the keep alive fetch() or sendBeacon().
- // [2] string indicating the function to call - "fetch" to call fetch() or "beacon" to call sendBeacon().
- // The testcase id is returned back to the window through postMesage.
- var tests = 0;
- window.onmessage = function(e) {
- var testCaseId = e.data[0];
- var url = e.data[1];
- var func = e.data[2];
- tests++;
-
- // Reconstruct enough of the test case to send the keep alive fetch (data and url).
- var testCase = testLookup[testCaseId];
- testCase.url = url;
-
- if (func === "beacon") {
- // sendData calls sendBeacon
- sendData(testCase);
- }
- else {
- throw new Error(func + " is an invalid function");
- }
-
- // Let the main page continue the test if we don't immediately throw an exception.
- parent.postMessage(testCaseId, "*");
-
- // Now navigate ourselves.
- if (tests == sampleTests.length) {
- window.location = "http://{{host}}:{{ports[http][0]}}/";
- }
- }
- </script>
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-001.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-001.html
new file mode 100644
index 00000000000..343646464a9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-001.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<title>clip-path on inline, horizontal-tb writing-mode</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-masking-1/#the-clip-path" title="5.1 Clipping Shape: the clip-path property">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta content="ahem" name="flags">
+<style>
+ .container {
+ writing-mode: horizontal-tb;
+ font: 100px/1 Ahem;
+ line-height: 100px;
+ color: red;
+ }
+ .container::first-letter {
+ color:green;
+ }
+ .container > span {
+ clip-path: polygon(0% 0%, 50% 0%, 50% 100%, 0% 100%);
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="container">
+ <span>
+ XX<br>
+ XXX
+ </span>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-002.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-002.html
new file mode 100644
index 00000000000..d56117e22b8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-002.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<title>clip-path on inline, vertical-rl writing-mode</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-masking-1/#the-clip-path" title="5.1 Clipping Shape: the clip-path property">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta content="ahem" name="flags">
+<style>
+ .container {
+ writing-mode: vertical-rl;
+ margin-left: -100px;
+ font: 100px/1 Ahem;
+ line-height: 100px;
+ color: red;
+ }
+ .container::first-letter {
+ color:green;
+ }
+ .container > span {
+ clip-path: polygon(0% 0%, 100% 0%, 100% 50%, 0% 50%);
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="container">
+ <span>
+ XX<br>
+ XXX
+ </span>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-003.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-003.html
new file mode 100644
index 00000000000..4c907a46120
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-inline-003.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<title>clip-path on inline, vertical-lr writing-mode</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-masking-1/#the-clip-path" title="5.1 Clipping Shape: the clip-path property">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta content="ahem" name="flags">
+<style>
+ .container {
+ writing-mode: vertical-lr;
+ font: 100px/1 Ahem;
+ line-height: 100px;
+ color: red;
+ }
+ .container::first-letter {
+ color:green;
+ }
+ .container > span {
+ clip-path: polygon(0% 0%, 100% 0%, 100% 50%, 0% 50%);
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="container">
+ <span>
+ XX<br>
+ XXX
+ </span>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/mask-svg-content/reference/mask-text-001-ref.svg b/tests/wpt/web-platform-tests/css/css-masking/mask-svg-content/reference/mask-text-001-ref.svg
index 48737c03d1e..3fabeb01d76 100644
--- a/tests/wpt/web-platform-tests/css/css-masking/mask-svg-content/reference/mask-text-001-ref.svg
+++ b/tests/wpt/web-platform-tests/css/css-masking/mask-svg-content/reference/mask-text-001-ref.svg
@@ -1,8 +1,9 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml"
+ width="100px" height="100px">
<g id="testmeta">
<title>CSS Masking: Reftest reference</title>
<html:link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"/>
<metadata class="flags">svg</metadata>
</g>
<text fill="#000" font-family="Ahem" font-size="12px" transform="rotate(90 50 50)" x="50" y="50">foobar</text>
-</svg> \ No newline at end of file
+</svg>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-none-001-ref.xht b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-none-001-ref.xht
index 5472e779c8d..4fcc57a6588 100644
--- a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-none-001-ref.xht
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-none-001-ref.xht
@@ -41,7 +41,7 @@
<div>
<img id="first-blue" src="support/swatch-blue.png" width="40" height="40" alt="Image download support must be enabled" /> <img id="second-blue" src="support/swatch-blue.png" width="40" height="40" alt="Image download support must be enabled" /> <img id="first-pink" src="support/swatch-pink.png" width="40" height="40" alt="Image download support must be enabled" /> <img id="second-pink" src="support/swatch-pink.png" width="40" height="40" alt="Image download support must be enabled" />
- <img id="black" src="support/black20x20.png" width="110" height="20" alt="Image download support must be enabled" />
+ <img id="black" src="support/black20x20.png" width="260" height="20" alt="Image download support must be enabled" />
<img id="first-yellow" src="support/swatch-yellow.png" width="40" height="40" alt="Image download support must be enabled" />
<img id="second-yellow" src="support/swatch-yellow.png" width="40" height="40" alt="Image download support must be enabled" />
@@ -51,4 +51,4 @@
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html
new file mode 100644
index 00000000000..560ef63b2f9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: break-word</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
+<meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken.">
+<style>
+div {
+ position: relative;
+ font-size: 20px;
+ font-family: Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ line-height: 1em;
+ width: 5ch;
+
+ white-space: pre-wrap;
+ overflow-wrap: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"><br>XXXXX</div>
+ <div class="test"> XXXXX </div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-015.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-015.html
new file mode 100644
index 00000000000..f9063c98767
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-015.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: white-space: pre-wrap</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/pre-wrap-001-ref.html">
+<meta name="assert" content="The text is broken at the end of the space between the two words, never before, so it hangs and cause an overflow">
+<style>
+div {
+ position: relative;
+ font: 20px/1 Ahem;
+}
+.ref {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+.test {
+ color: green;
+ width: 20px;
+
+ white-space: pre-wrap;
+ word-break: break-word;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="ref">X<span style="color: green">X</span><br>X<span style="color: green">X</span></div>
+ <div class="test">X X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-010-ref.html b/tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-010-ref.html
new file mode 100644
index 00000000000..0e0300a72dc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-010-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Reference File</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<style>
+div {
+ position: relative;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-014-ref.html b/tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-014-ref.html
new file mode 100644
index 00000000000..a8720a101c3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-014-ref.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: break-all</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<p>Test passes if 2 icons are rendered in a row, matching the reference file.</p>
+<div>💖<br>💔</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html
new file mode 100644
index 00000000000..1ab97fb146a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: break-word</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/word-break-break-all-010-ref.html">
+<meta name="assert" content="The word is broken even if pre-wrap provides a former breaking opportunity in leading white-space.">
+<style>
+div {
+ position: relative;
+ font-size: 20px;
+ font-family: Ahem;
+}
+.red {
+ position: absolute;
+ white-space: pre;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ line-height: 1em;
+ width: 5ch;
+
+ white-space: pre-wrap;
+ word-break: break-all;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red"> XXXX<br>X</div>
+ <div class="test"> XXXXX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html
new file mode 100644
index 00000000000..ed07aeb7368
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: break-word</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/word-break-break-all-010-ref.html">
+<meta name="assert" content="A single leading white-space should account as soft breaking opportunity, honoring the 'white-space: pre-wrap', on top to the ones provided by 'word-break: break-all'.">
+<style>
+div {
+ position: relative;
+ font-size: 20px;
+ font-family: Ahem;
+}
+.red {
+ position: absolute;
+ background: green;
+ color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+.test {
+ color: green;
+ background: green;
+ line-height: 1em;
+ width: 1ch;
+ white-space: pre-wrap;
+ word-break: break-all;
+}
+</style>
+<body>
+ <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+ <div class="red">X<br>X<br>X</div>
+ <div class="test"> XX</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-014.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-014.html
new file mode 100644
index 00000000000..6885553ad68
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-014.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: overflow-wrap: break-all</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/word-break-break-all-014-ref.html">
+<meta name="assert" content="The text is wrapped after the first character and no unicode unit is broken.">
+<style>
+div {
+ width: 1px;
+ word-break: break-all;
+}
+</style>
+<p>Test passes if 2 icons are rendered in a row, matching the reference file.</p>
+<div>💖💔</div>
diff --git a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-iframe-tests.sub.js b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-iframe-tests.sub.js
index 97defcba4b2..c4195fee5f5 100644
--- a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-iframe-tests.sub.js
+++ b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-iframe-tests.sub.js
@@ -5,7 +5,6 @@ async function send_message_to_iframe(iframe, message, reply) {
return new Promise((resolve, reject) => {
let messageHandler = e => {
-
if (e.data.command !== message.command) {
return;
}
@@ -131,4 +130,31 @@ function run_generic_sensor_iframe_tests(sensorName) {
iframe.parentNode.removeChild(iframe);
}, `${sensorName}: sensor is not suspended when focus traverses from\
to same-origin frame`);
+
+ sensor_test(async t => {
+ assert_true(sensorName in self);
+ const iframe = document.createElement('iframe');
+ iframe.allow = featurePolicies.join(';') + ';';
+ iframe.src = 'https://{{host}}:{{ports[https][0]}}/generic-sensor/resources/iframe_sensor_handler.html';
+
+ // Create sensor in the iframe (we do not care whether this is a
+ // cross-origin nested context in this test).
+ const iframeLoadWatcher = new EventWatcher(t, iframe, 'load');
+ document.body.appendChild(iframe);
+ await iframeLoadWatcher.wait_for('load');
+ await send_message_to_iframe(iframe, {command: 'create_sensor',
+ type: sensorName});
+ iframe.contentWindow.focus();
+ await send_message_to_iframe(iframe, {command: 'start_sensor'});
+
+ // Remove iframe from main document and change focus. When focus changes,
+ // we need to determine whether a sensor must have its execution suspended
+ // or resumed (section 4.2.3, "Focused Area" of the Generic Sensor API
+ // spec). In Blink, this involves querying a frame, which might no longer
+ // exist at the time of the check.
+ // Note that we cannot send the "reset_sensor_backend" command because the
+ // iframe is discarded with the removeChild call.
+ iframe.parentNode.removeChild(iframe);
+ window.focus();
+ }, `${sensorName}: losing a document's frame with an active sensor does not crash`);
}
diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html
new file mode 100644
index 00000000000..8fe7d9f9770
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>History restoration order test</title>
+<meta name="assert" content="https://html.spec.whatwg.org/multipage/browsing-the-web.html#history-traversal">
+<meta name="assert" content="Traversing history should restore scroll position after dispatching popstate and before dispatching hashchange">
+
+<style>
+ body {
+ height: 200vh;
+ width: 200vw;
+ }
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ 'use strict';
+ async_test(function(t) {
+ window.addEventListener('load', t.step_func(function() {
+ // Allow 1px epsilon for fractional scrolling.
+ assert_array_approx_equals(scrollPosition(), [0, 0], 1);
+
+ history.pushState('#1', '', '#1');
+ window.scrollTo(50, 100);
+ assert_array_approx_equals(scrollPosition(), [50, 100], 1);
+
+ history.pushState('#2', '', '#2');
+ window.scrollTo(100, 200);
+ assert_array_approx_equals(scrollPosition(), [100, 200], 1);
+
+ setTimeout(t.step_func(function(){
+ history.pushState(null, null, '#done');
+ window.scrollTo(555, 555);
+ assert_array_approx_equals(scrollPosition(), [555, 555], 1);
+ // Kick off the verification.
+ window.history.back();
+ }), 0);
+ }));
+
+ window.addEventListener('popstate', t.step_func(function() {
+ // Verify that scroll position is *not* restored before popstate.
+ const key = location.hash;
+ const expected_scroll_position = expectedScrollPositionForKey(key);
+ assert_not_equals(scrollPosition()[0], expected_scroll_position[0], `scroll is restored before popstate for ${key}`);
+ assert_not_equals(scrollPosition()[1], expected_scroll_position[1], `scroll is restored before popstate for ${key}`);
+
+ if (key == '')
+ t.done();
+ else
+ setTimeout(t.step_func(function(){ window.history.back(); }), 0);
+ }));
+
+ window.addEventListener('hashchange', t.step_func(function() {
+ // Verify that scroll position is restored before hashchange.
+ var key = location.hash;
+ const expected_scroll_position = expectedScrollPositionForKey(key);
+ assert_array_approx_equals(scrollPosition(), expected_scroll_position, 1, `scroll is restored before hashchange for ${key}`);
+ }));
+
+ function scrollPosition() {
+ return [window.pageXOffset, window.pageYOffset];
+ }
+
+ function expectedScrollPositionForKey(key) {
+ switch (key) {
+ case '#2': return [100, 200];
+ case '#1': return [50, 100];
+ case '' : return [0, 0];
+ default: assert_unreached();
+ }
+ }
+
+ }, 'Traversing history should restore scroll position after dispatching popstate and before dispatching hashchange');
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/browsers/offline/appcache/appcache-iframe.https.html b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/appcache-iframe.https.html
new file mode 100644
index 00000000000..8e726643715
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/appcache-iframe.https.html
@@ -0,0 +1,37 @@
+<html manifest="resources/appcache-iframe.manifest">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+const initPromise = new Promise(resolve => {
+ applicationCache.addEventListener('cached', resolve, false);
+ applicationCache.addEventListener('noupdate', resolve, false);
+});
+
+function with_iframe(url) {
+ return new Promise(resolve => {
+ let frame = document.createElement('iframe');
+ frame.src = url;
+ frame.onload = () => { resolve(frame); };
+ document.body.appendChild(frame);
+ add_result_callback(() => frame.remove());
+ });
+}
+
+promise_test(async t => {
+ await initPromise;
+ const frame =
+ await with_iframe('resources/appcache-iframe.py?type=cached');
+ const msgEvent = await new Promise(r => window.onmessage = r);
+ assert_equals(msgEvent.data, 'Done: cached');
+ }, 'iframe should be loaded from application caches.');
+
+promise_test(async t => {
+ await initPromise;
+ const frame =
+ await with_iframe('resources/appcache-iframe.py?type=fallingback');
+ const msgEvent = await new Promise(r => window.onmessage = r);
+ assert_equals(msgEvent.data, 'Done: fallbacked');
+ }, 'iframe should be loaded from application caches for fallback.');
+
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-data.py b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-data.py
new file mode 100644
index 00000000000..f92c5116c08
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-data.py
@@ -0,0 +1,5 @@
+def main(request, response):
+ type = request.GET['type']
+ if request.GET['type'] == 'fallingback':
+ return 404, [('Content-Type', 'text/plain')], "Page not found"
+ return [('Content-Type', 'text/plain')], type
diff --git a/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-iframe.manifest b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-iframe.manifest
new file mode 100644
index 00000000000..7221e909c6f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-iframe.manifest
@@ -0,0 +1,8 @@
+CACHE MANIFEST
+
+appcache-iframe.py?type=cached
+appcache-data.py?type=cached
+
+FALLBACK:
+appcache-iframe.py?type=fallingback appcache-iframe.py?type=fallbacked
+appcache-data.py?type=fallingback appcache-data.py?type=fallbacked
diff --git a/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-iframe.py b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-iframe.py
new file mode 100644
index 00000000000..bc82788045f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/resources/appcache-iframe.py
@@ -0,0 +1,43 @@
+script = '''
+<script>
+function fetchCachedFileTest() {
+ return fetch('appcache-data.py?type=cached')
+ .then(res => res.text(),
+ _ => { throw new Error('Failed to fetch cached file'); })
+ .then(text => {
+ if (text != 'cached') {
+ throw new Error('cached file missmatch');
+ }
+ });
+}
+
+function fetchNotInCacheFileTest() {
+ return fetch('appcache-data.py?type=not-in-cache')
+ .then(_ => { throw new Error('Fetching not-in-cache file must fail'); },
+ _ => {});
+}
+
+function fetchFallbackFileTest() {
+ return fetch('appcache-data.py?type=fallingback')
+ .then(res => res.text(),
+ _ => { throw new Error('Failed to fetch fallingback file'); })
+ .then(text => {
+ if (text != 'fallbacked') {
+ throw new Error('fallbacked file miss match');
+ }
+ });
+}
+
+fetchCachedFileTest()
+ .then(fetchNotInCacheFileTest)
+ .then(fetchFallbackFileTest)
+ .then(_ => window.parent.postMessage('Done: %s'),
+ error => window.parent.postMessage(error.toString()));
+</script>
+'''
+
+def main(request, response):
+ type = request.GET['type']
+ if request.GET['type'] == 'fallingback':
+ return 404, [('Content-Type', 'text/plain')], "Page not found"
+ return [('Content-Type', 'text/html')], script % type
diff --git a/tests/wpt/web-platform-tests/html/browsers/offline/appcache/workers/resources/appcache-worker.py b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/workers/resources/appcache-worker.py
index 00281a2be72..10643219199 100644
--- a/tests/wpt/web-platform-tests/html/browsers/offline/appcache/workers/resources/appcache-worker.py
+++ b/tests/wpt/web-platform-tests/html/browsers/offline/appcache/workers/resources/appcache-worker.py
@@ -91,6 +91,7 @@ initPromise
.then(importFallbackScriptTest)
.then(fetchCachedFileTest)
.then(fetchNotInCacheFileTest)
+ .then(fetchFallbackFileTest)
.then(_ => postMessage('Done: %s'),
error => postMessage(error.toString()));
'''
diff --git a/tests/wpt/web-platform-tests/interfaces/payment-request.idl b/tests/wpt/web-platform-tests/interfaces/payment-request.idl
index d930b57291e..843c66107b3 100644
--- a/tests/wpt/web-platform-tests/interfaces/payment-request.idl
+++ b/tests/wpt/web-platform-tests/interfaces/payment-request.idl
@@ -49,7 +49,7 @@ dictionary PaymentDetailsUpdate : PaymentDetailsBase {
DOMString error;
PaymentItem total;
AddressErrors shippingAddressErrors;
- PayerErrorFields payerErrors;
+ PayerErrors payerErrors;
object paymentMethodErrors;
};
@@ -169,13 +169,13 @@ interface PaymentResponse : EventTarget {
};
dictionary PaymentValidationErrors {
- PayerErrorFields payer;
+ PayerErrors payer;
AddressErrors shippingAddress;
DOMString error;
object paymentMethod;
};
-dictionary PayerErrorFields {
+dictionary PayerErrors {
DOMString email;
DOMString name;
DOMString phone;
diff --git a/tests/wpt/web-platform-tests/interfaces/wasm-web-api.idl b/tests/wpt/web-platform-tests/interfaces/wasm-web-api.idl
new file mode 100644
index 00000000000..1cc2f17679b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/interfaces/wasm-web-api.idl
@@ -0,0 +1,10 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content was automatically extracted by Reffy into reffy-reports
+// (https://github.com/tidoust/reffy-reports)
+// Source: WebAssembly Web API (https://webassembly.github.io/spec/web-api/)
+
+partial namespace WebAssembly {
+ Promise<Module> compileStreaming(Promise<Response> source);
+ Promise<WebAssemblyInstantiatedSource> instantiateStreaming(
+ Promise<Response> source, optional object importObject);
+};
diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-clone.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-clone.https.html
new file mode 100644
index 00000000000..134918815c3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-clone.https.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<html>
+<head>
+<title>MediaStream and MediaStreamTrack clone()</title>
+<link rel="help" href="https://w3c.github.io/mediacapture-main/#dom-mediastream-clone">
+<link rel="help" href="https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-clone">
+</head>
+<body>
+<p class="instructions">When prompted, accept to give permission to use your audio and video devices.</p>
+<h1 class="instructions">Description</h1>
+<p class="instructions">This test checks that cloning MediaStreams and MediaStreamTracks works as expected.</p>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+
+promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});
+ assert_equals(stream.getAudioTracks().length, 1);
+ assert_equals(stream.getVideoTracks().length, 1);
+
+ const clone1 = stream.clone();
+ assert_equals(clone1.getAudioTracks().length, 1);
+ assert_equals(clone1.getVideoTracks().length, 1);
+ assert_not_equals(stream.getAudioTracks()[0].id, clone1.getAudioTracks()[0].id);
+ assert_not_equals(stream.getVideoTracks()[0].id, clone1.getVideoTracks()[0].id);
+
+ stream.getTracks().forEach(track => track.stop());
+ assert_false(stream.active);
+ assert_equals(stream.getAudioTracks()[0].readyState, "ended");
+ assert_equals(stream.getVideoTracks()[0].readyState, "ended");
+ assert_true(clone1.active);
+ assert_equals(clone1.getAudioTracks()[0].readyState, "live");
+ assert_equals(clone1.getVideoTracks()[0].readyState, "live");
+
+ clone1.getAudioTracks()[0].stop();
+ assert_true(clone1.active);
+ assert_equals(clone1.getAudioTracks()[0].readyState, "ended");
+ assert_equals(clone1.getVideoTracks()[0].readyState, "live");
+
+ const clone2 = clone1.clone();
+ assert_true(clone2.active);
+ assert_equals(clone2.getAudioTracks()[0].readyState, "ended");
+ assert_equals(clone2.getVideoTracks()[0].readyState, "live");
+
+ clone1.getVideoTracks()[0].stop();
+ clone2.getVideoTracks()[0].stop();
+
+ const clone3 = clone2.clone();
+ assert_false(clone3.active);
+ assert_equals(clone3.getAudioTracks()[0].readyState, "ended");
+ assert_equals(clone3.getVideoTracks()[0].readyState, "ended");
+ assert_not_equals(clone1.getAudioTracks()[0].id, clone2.getAudioTracks()[0].id);
+ assert_not_equals(clone1.getVideoTracks()[0].id, clone2.getVideoTracks()[0].id);
+ assert_not_equals(clone2.getAudioTracks()[0].id, clone3.getAudioTracks()[0].id);
+ assert_not_equals(clone2.getVideoTracks()[0].id, clone3.getVideoTracks()[0].id);
+ assert_not_equals(clone1.getAudioTracks()[0].id, clone3.getAudioTracks()[0].id);
+ assert_not_equals(clone1.getVideoTracks()[0].id, clone3.getVideoTracks()[0].id);
+}, "Tests that cloning MediaStream objects works as expected");
+
+promise_test(async t => {
+ const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});
+ assert_equals(stream.getAudioTracks().length, 1);
+ assert_equals(stream.getVideoTracks().length, 1);
+ assert_equals(stream.getAudioTracks()[0].readyState, "live");
+ assert_equals(stream.getVideoTracks()[0].readyState, "live");
+ assert_true(stream.active);
+
+ const audio_clone = stream.getAudioTracks()[0].clone();
+ const video_clone = stream.getVideoTracks()[0].clone();
+ assert_equals(audio_clone.readyState, "live");
+ assert_equals(video_clone.readyState, "live");
+ assert_not_equals(stream.getAudioTracks()[0].id, audio_clone.id);
+ assert_not_equals(stream.getVideoTracks()[0].id, video_clone.id);
+
+ stream.getTracks().forEach(track => track.stop());
+ assert_false(stream.active);
+ assert_equals(stream.getAudioTracks()[0].readyState, "ended");
+ assert_equals(stream.getVideoTracks()[0].readyState, "ended");
+ assert_equals(audio_clone.readyState, "live");
+ assert_equals(video_clone.readyState, "live");
+
+ stream.addTrack(audio_clone);
+ stream.addTrack(video_clone);
+ assert_true(stream.active);
+
+ stream.getTracks().forEach(track => track.stop());
+ assert_false(stream.active);
+ assert_equals(audio_clone.readyState, "ended");
+ assert_equals(video_clone.readyState, "ended");
+}, "Tests that cloning MediaStreamTrack objects works as expected");
+
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-idl.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-idl.https.html
index 8e60709cf1b..32e34f2b4b6 100644
--- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-idl.https.html
+++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-idl.https.html
@@ -20,36 +20,45 @@ follows the algorithm set in the spec.</p>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
-var t = async_test("Tests that a MediaStream constructor follows the algorithm set in the spec", {timeout: 10000});
-t.step(function() {
+let t = async_test("Tests that a MediaStream constructor follows the algorithm set in the spec", {timeout: 10000});
+t.step(() => {
navigator.mediaDevices.getUserMedia({video: true, audio:true})
- .then(t.step_func(function (stream) {
- var stream1 = new MediaStream();
+ .then(t.step_func(stream => {
+ let stream1 = new MediaStream();
assert_not_equals(stream.id, stream1.id, "Two different MediaStreams have different ids");
- var stream2 = new MediaStream(stream);
- assert_not_equals(stream.id, stream2.id, "A MediaStream constructed from another have different ids");
- var audioTrack1 = stream.getAudioTracks()[0];
- var videoTrack = stream.getVideoTracks()[0];
- assert_equals(audioTrack1, stream2.getAudioTracks()[0], "A MediaStream constructed from another share the same audio track");
- assert_equals(videoTrack, stream2.getVideoTracks()[0], "A MediaStream constructed from another share the same video track");
- var stream4 = new MediaStream([audioTrack1]);
+ let stream2 = new MediaStream(stream);
+ assert_not_equals(stream.id, stream2.id, "A MediaStream constructed from another has a different id");
+ let audioTrack1 = stream.getAudioTracks()[0];
+ let videoTrack = stream.getVideoTracks()[0];
+ assert_equals(audioTrack1, stream2.getAudioTracks()[0], "A MediaStream constructed from another shares the same audio track");
+ assert_equals(videoTrack, stream2.getVideoTracks()[0], "A MediaStream constructed from another shares the same video track");
+ let stream4 = new MediaStream([audioTrack1]);
assert_equals(stream4.getTrackById(audioTrack1.id), audioTrack1, "a non-ended track gets added via the MediaStream constructor");
- var audioTrack2 = audioTrack1.clone();
+ let audioTrack2 = audioTrack1.clone();
audioTrack2.addEventListener("ended", t.unreached_func("ended event should not be fired by MediaStreamTrack.stop()."));
audioTrack2.stop();
assert_equals(audioTrack2.readyState, "ended", "a stopped track is marked ended synchronously");
- var stream3 = new MediaStream([audioTrack2, videoTrack]);
+ let stream3 = new MediaStream([audioTrack2, videoTrack]);
assert_equals(stream3.getTrackById(audioTrack2.id), audioTrack2, "an ended track gets added via the MediaStream constructor");
assert_equals(stream3.getTrackById(videoTrack.id), videoTrack, "a non-ended track gets added via the MediaStream constructor even if the previous track was ended");
- var stream5 = new MediaStream([audioTrack2]);
+ let stream5 = new MediaStream([audioTrack2]);
assert_equals(stream5.getTrackById(audioTrack2.id), audioTrack2, "an ended track gets added via the MediaStream constructor");
assert_false(stream5.active, "a MediaStream created using the MediaStream() constructor whose arguments are lists of MediaStreamTrack objects that are all ended, the MediaStream object MUST be created with its active attribute set to false");
- // Use a timeout to detect a misfire of the ended event.
- t.step_timeout(t.step_func_done());
+ stream.oninactive = t.step_func(() => {
+ assert_false(stream.active);
+ stream.getTracks().forEach(track => {
+ assert_equals(track.readyState, "ended");
+ });
+ // Use a timeout to detect a misfire of the ended event.
+ t.step_timeout(t.step_func_done());
+ });
+
+ audioTrack1.stop();
+ videoTrack.stop();
})
);
});
diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html
index 455b65a7da3..e5d0c7a66ee 100644
--- a/tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html
+++ b/tests/wpt/web-platform-tests/payment-request/payment-request-id-attribute.https.html
@@ -20,7 +20,7 @@ test(() => {
// Test for https://github.com/w3c/payment-request/pull/665
test(() => {
- const uuidRegExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-4][0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
+ const uuidRegExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
const request1 = new PaymentRequest(methods, {
total,
});
diff --git a/tests/wpt/web-platform-tests/speech-api/idlharness.window.js b/tests/wpt/web-platform-tests/speech-api/idlharness.window.js
index 2f9702878a3..6cfcbb2e95f 100644
--- a/tests/wpt/web-platform-tests/speech-api/idlharness.window.js
+++ b/tests/wpt/web-platform-tests/speech-api/idlharness.window.js
@@ -3,10 +3,27 @@
'use strict';
+// https://w3c.github.io/speech-api/#dom-speechsynthesis-getvoices can
+// return an empty list and a voiceschanged event is fired if the list of
+// voices is determined asynchronously.
+function getVoices() {
+ return new Promise(resolve => {
+ const voices = speechSynthesis.getVoices();
+ if (voices.length) {
+ resolve(voices);
+ } else {
+ // wait for voiceschanged event
+ speechSynthesis.addEventListener('voiceschanged', () => {
+ resolve(speechSynthesis.getVoices());
+ }, { once: true });
+ }
+ });
+}
+
idl_test(
['speech-api'],
['dom', 'html'],
- idl_array => {
+ (idl_array, t) => {
idl_array.add_objects({
SpeechGrammar: ['new SpeechGrammar()'],
SpeechGrammarList: ['new SpeechGrammarList()'],
@@ -20,15 +37,14 @@ idl_test(
// TODO: SpeechSynthesisErrorEvent
// TODO: SpeechSynthesisEvent
SpeechSynthesisUtterance: ['new SpeechSynthesisUtterance()'],
+ SpeechSynthesisVoice: ['voice'],
Window: ['self'],
});
- // https://w3c.github.io/speech-api/#dom-speechsynthesis-getvoices can
- // return an empty list, so add SpeechSynthesisVoice conditionally.
- const voices = speechSynthesis.getVoices();
- if (voices.length) {
- self.voice = voices[0];
- idl_array.add_objects({ SpeechSynthesisVoice: ['voice'] });
- }
+ const awaitVoice = getVoices().then(voices => self.voice = voices[0]);
+ const timeout = new Promise((_, reject) => {
+ t.step_timeout(() => reject('Timed out waiting for voice'), 3000);
+ });
+ return Promise.race([awaitVoice, timeout]);
}
);
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py
index db271acc50e..ddb1667a22f 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py
@@ -93,7 +93,7 @@ def browser_kwargs(test_type, run_info_data, config, **kwargs):
"symbols_path": kwargs["symbols_path"],
"stackwalk_binary": kwargs["stackwalk_binary"],
"certutil_binary": kwargs["certutil_binary"],
- "ca_certificate_path": kwargs["ssl_env"].ca_cert_path(),
+ "ca_certificate_path": config.ssl_config["ca_cert_path"],
"stackfix_dir": kwargs["stackfix_dir"],
"binary_args": kwargs["binary_args"],
"timeout_multiplier": get_timeout_multiplier(test_type,
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py
index 9482f2f7743..b09114a9a54 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py
@@ -1,7 +1,7 @@
from .base import Browser, ExecutorBrowser, require_arg
from ..executors import executor_kwargs as base_executor_kwargs
-from ..executors.executorselenium import (SeleniumTestharnessExecutor, # noqa: F401
- SeleniumRefTestExecutor) # noqa: F401
+from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401
+ WebDriverRefTestExecutor) # noqa: F401
from ..executors.executorwebkit import WebKitDriverWdspecExecutor # noqa: F401
from ..webdriver_server import WebKitDriverServer
@@ -10,8 +10,8 @@ __wptrunner__ = {"product": "webkit",
"check_args": "check_args",
"browser": "WebKitBrowser",
"browser_kwargs": "browser_kwargs",
- "executor": {"testharness": "SeleniumTestharnessExecutor",
- "reftest": "SeleniumRefTestExecutor",
+ "executor": {"testharness": "WebDriverTestharnessExecutor",
+ "reftest": "WebDriverRefTestExecutor",
"wdspec": "WebKitDriverWdspecExecutor"},
"executor_kwargs": "executor_kwargs",
"env_extras": "env_extras",
@@ -31,18 +31,21 @@ def browser_kwargs(test_type, run_info_data, config, **kwargs):
def capabilities_for_port(server_config, **kwargs):
- from selenium.webdriver import DesiredCapabilities
-
if kwargs["webkit_port"] == "gtk":
- capabilities = dict(DesiredCapabilities.WEBKITGTK.copy())
- capabilities["webkitgtk:browserOptions"] = {
- "binary": kwargs["binary"],
- "args": kwargs.get("binary_args", []),
- "certificates": [
- {"host": server_config["browser_host"],
- "certificateFile": kwargs["host_cert_path"]}
- ]
+ capabilities = {
+ "browserName": "MiniBrowser",
+ "browserVersion": "2.20",
+ "platformName": "ANY",
+ "webkitgtk:browserOptions": {
+ "binary": kwargs["binary"],
+ "args": kwargs.get("binary_args", []),
+ "certificates": [
+ {"host": server_config["browser_host"],
+ "certificateFile": kwargs["host_cert_path"]}
+ ]
+ }
}
+
return capabilities
return {}
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py
index caa97145560..49b682c749f 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorservo.py
@@ -8,7 +8,7 @@ import uuid
from mozprocess import ProcessHandler
-from serve.serve import make_hosts_file
+from tools.serve.serve import make_hosts_file
from .base import (ConnectionlessProtocol,
RefTestImplementation,
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
index 83b2c621641..0299ea0e62b 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
@@ -144,12 +144,10 @@ class TestTrickle(TestUsingServer):
self.assertEqual(resp.info()["Expires"], "0")
class TestPipesWithVariousHandlers(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_file_handler(self):
resp = self.request("/test_string.py", query="pipe=slice(null,2)")
- self.assertEqual(resp.read(), "PA")
+ self.assertEqual(resp.read(), b"PA")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_func_handler(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -157,9 +155,8 @@ class TestPipesWithVariousHandlers(TestUsingServer):
route = ("GET", "/test/test_pipes_1/", handler)
self.server.router.register(*route)
resp = self.request(route[1], query="pipe=slice(null,2)")
- self.assertEqual(resp.read(), "PA")
+ self.assertEqual(resp.read(), b"PA")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_func_handler_using_response_writer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -168,9 +165,8 @@ class TestPipesWithVariousHandlers(TestUsingServer):
self.server.router.register(*route)
resp = self.request(route[1], query="pipe=slice(null,2)")
# slice has not been applied to the response, because response.writer was used.
- self.assertEqual(resp.read(), "PASS")
+ self.assertEqual(resp.read(), b"PASS")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_header_pipe_with_python_func_using_response_writer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -180,7 +176,7 @@ class TestPipesWithVariousHandlers(TestUsingServer):
resp = self.request(route[1], query="pipe=header(X-TEST,FAIL)")
# header pipe was ignored, because response.writer was used.
self.assertFalse(resp.info().get("X-TEST"))
- self.assertEqual(resp.read(), "CONTENT")
+ self.assertEqual(resp.read(), b"CONTENT")
@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_json_handler(self):
@@ -192,30 +188,27 @@ class TestPipesWithVariousHandlers(TestUsingServer):
resp = self.request(route[1], query="pipe=slice(null,2)")
self.assertEqual(resp.read(), '"{')
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_slice_with_as_is_handler(self):
resp = self.request("/test.asis", query="pipe=slice(null,2)")
self.assertEqual(202, resp.getcode())
self.assertEqual("Giraffe", resp.msg)
self.assertEqual("PASS", resp.info()["X-Test"])
# slice has not been applied to the response, because response.writer was used.
- self.assertEqual("Content", resp.read())
+ self.assertEqual(b"Content", resp.read())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_headers_with_as_is_handler(self):
resp = self.request("/test.asis", query="pipe=header(X-TEST,FAIL)")
self.assertEqual(202, resp.getcode())
self.assertEqual("Giraffe", resp.msg)
# header pipe was ignored.
self.assertEqual("PASS", resp.info()["X-TEST"])
- self.assertEqual("Content", resp.read())
+ self.assertEqual(b"Content", resp.read())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_trickle_with_as_is_handler(self):
t0 = time.time()
resp = self.request("/test.asis", query="pipe=trickle(1:d2:5:d1:r2)")
t1 = time.time()
- self.assertTrue('Content' in resp.read())
+ self.assertTrue(b'Content' in resp.read())
self.assertGreater(6, t1-t0)
if __name__ == '__main__':
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py
index ec150ba5c8f..e248280ef36 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py
@@ -1,29 +1,32 @@
from . import utils
-content_types = utils.invert_dict({"text/html": ["htm", "html"],
- "application/json": ["json"],
- "application/xhtml+xml": ["xht", "xhtm", "xhtml"],
- "application/xml": ["xml"],
- "application/x-xpinstall": ["xpi"],
- "text/javascript": ["js"],
- "text/css": ["css"],
- "text/plain": ["txt", "md"],
- "image/svg+xml": ["svg"],
- "image/gif": ["gif"],
- "image/jpeg": ["jpg", "jpeg"],
- "image/png": ["png"],
- "image/bmp": ["bmp"],
- "text/event-stream": ["event_stream"],
- "text/cache-manifest": ["manifest"],
- "video/mp4": ["mp4", "m4v"],
- "audio/mp4": ["m4a"],
- "audio/mpeg": ["mp3"],
- "video/webm": ["webm"],
- "audio/webm": ["weba"],
- "video/ogg": ["ogg", "ogv"],
- "audio/ogg": ["oga"],
- "audio/x-wav": ["wav"],
- "text/vtt": ["vtt"],})
+content_types = utils.invert_dict({
+ "application/json": ["json"],
+ "application/wasm": ["wasm"],
+ "application/xhtml+xml": ["xht", "xhtm", "xhtml"],
+ "application/xml": ["xml"],
+ "application/x-xpinstall": ["xpi"],
+ "audio/mp4": ["m4a"],
+ "audio/mpeg": ["mp3"],
+ "audio/ogg": ["oga"],
+ "audio/webm": ["weba"],
+ "audio/x-wav": ["wav"],
+ "image/bmp": ["bmp"],
+ "image/gif": ["gif"],
+ "image/jpeg": ["jpg", "jpeg"],
+ "image/png": ["png"],
+ "image/svg+xml": ["svg"],
+ "text/cache-manifest": ["manifest"],
+ "text/css": ["css"],
+ "text/event-stream": ["event_stream"],
+ "text/html": ["htm", "html"],
+ "text/javascript": ["js"],
+ "text/plain": ["txt", "md"],
+ "text/vtt": ["vtt"],
+ "video/mp4": ["mp4", "m4v"],
+ "video/ogg": ["ogg", "ogv"],
+ "video/webm": ["webm"],
+})
response_codes = {
100: ('Continue', 'Request received, please continue'),
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
index 44299cc994e..00a609b2950 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
@@ -183,8 +183,10 @@ class Response(object):
True, the entire content of the file will be returned as a string facilitating
non-streaming operations like template substitution.
"""
- if isinstance(self.content, (binary_type, text_type)):
+ if isinstance(self.content, binary_type):
yield self.content
+ elif isinstance(self.content, text_type):
+ yield self.content.encode(self.encoding)
elif hasattr(self.content, "read"):
if read_file:
yield self.content.read()
diff --git a/tests/wpt/web-platform-tests/wasm/webapi/contenttype.any.js b/tests/wpt/web-platform-tests/wasm/webapi/contenttype.any.js
new file mode 100644
index 00000000000..78069c03c9f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/webapi/contenttype.any.js
@@ -0,0 +1,23 @@
+// META: global=window,worker
+
+const contenttypes = [
+ "",
+ "application/javascript",
+ "application/octet-stream",
+ "text/wasm",
+ "application/wasm;",
+ "application/wasm;x",
+ "application/wasm;charset=UTF-8",
+];
+
+for (const contenttype of contenttypes) {
+ promise_test(t => {
+ const response = fetch(`/wasm/incrementer.wasm?pipe=header(Content-Type,${encodeURIComponent(contenttype)})`);
+ return promise_rejects(t, new TypeError(), WebAssembly.compileStreaming(response));
+ }, `Response with Content-Type ${format_value(contenttype)}: compileStreaming`);
+
+ promise_test(t => {
+ const response = fetch(`/wasm/incrementer.wasm?pipe=header(Content-Type,${encodeURIComponent(contenttype)})`);
+ return promise_rejects(t, new TypeError(), WebAssembly.instantiateStreaming(response));
+ }, `Response with Content-Type ${format_value(contenttype)}: instantiateStreaming`);
+}
diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/play-states.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/play-states.html
index 5d8fdeac6ec..ec7d8c842fc 100644
--- a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/play-states.html
+++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/play-states.html
@@ -22,8 +22,7 @@ test(t => {
+ ' and no pending tasks')
test(t => {
- const div = createDiv(t);
- const animation = div.animate({}, 100 * MS_PER_SEC);
+ const animation = createDiv(t).animate({}, 100 * MS_PER_SEC);
animation.pause();
@@ -134,8 +133,7 @@ test(t => {
+ ' current time = 0');
test(t => {
- const div = createDiv(t);
- const animation = div.animate({}, 0);
+ const animation = createDiv(t).animate({}, 0);
assert_equals(animation.startTime, null,
'Sanity check: start time should be unresolved');
@@ -144,8 +142,7 @@ test(t => {
+ ' current time = target effect end and there is a pending play task');
test(t => {
- const div = createDiv(t);
- const animation = div.animate({}, 100 * MS_PER_SEC);
+ const animation = createDiv(t).animate({}, 100 * MS_PER_SEC);
assert_equals(animation.startTime, null,
'Sanity check: start time should be unresolved');
@@ -153,5 +150,36 @@ test(t => {
}, 'reports \'running\' when playback rate > 0 and'
+ ' current time < target effect end and there is a pending play task');
+test(t => {
+ const animation = createDiv(t).animate({}, 100 * MS_PER_SEC);
+ assert_equals(animation.playState, 'running');
+ assert_true(animation.pending);
+}, 'reports \'running\' for a play-pending animation');
+
+test(t => {
+ const animation = createDiv(t).animate({}, 100 * MS_PER_SEC);
+ animation.pause();
+ assert_equals(animation.playState, 'paused');
+ assert_true(animation.pending);
+}, 'reports \'paused\' for a pause-pending animation');
+
+test(t => {
+ const animation = createDiv(t).animate({}, 0);
+ assert_equals(animation.playState, 'finished');
+ assert_true(animation.pending);
+}, 'reports \'finished\' for a finished-pending animation');
+
+test(t => {
+ const animation = createDiv(t).animate({}, 100 * MS_PER_SEC);
+ // Set up the pending playback rate
+ animation.updatePlaybackRate(-1);
+ // Call play again so that we seek to the end while remaining play-pending
+ animation.play();
+ // For a pending animation, the play state should always report what the
+ // play state _will_ be once we finish pending.
+ assert_equals(animation.playState, 'running');
+ assert_true(animation.pending);
+}, 'reports the play state based on the pending playback rate');
+
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCIceTransport-extension.https.html b/tests/wpt/web-platform-tests/webrtc/RTCIceTransport-extension.https.html
index 5adee9fbe61..7803bde9b3a 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCIceTransport-extension.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCIceTransport-extension.https.html
@@ -15,12 +15,6 @@
// makeIceTransport
// makeGatherAndStartTwoIceTransports
-function makeIceTransport(t) {
- const iceTransport = new RTCIceTransport();
- t.add_cleanup(() => iceTransport.stop());
- return iceTransport;
-}
-
test(() => {
const iceTransport = new RTCIceTransport();
}, 'RTCIceTransport constructor does not throw');
@@ -260,4 +254,49 @@ promise_test(async t => {
]);
}, 'Two RTCIceTransports connect to each other');
+promise_test(async t => {
+ async function waitForConnectedThenSelectedCandidatePairChange(t, transport,
+ transportName) {
+ const watcher = new EventWatcher(t, transport,
+ [ 'statechange', 'selectedcandidatepairchange' ]);
+ await watcher.wait_for('statechange');
+ assert_equals(transport.state, 'connected',
+ `${transportName} state should be 'connected'`);
+ await watcher.wait_for('selectedcandidatepairchange');
+ const selectedCandidatePair = transport.getSelectedCandidatePair();
+ assert_not_equals(selectedCandidatePair, null,
+ `${transportName} selected candidate pair should not be null once ` +
+ 'the selectedcandidatepairchange event fires');
+ assert_true(
+ transport.getLocalCandidates().some(
+ ({ candidate }) =>
+ candidate === selectedCandidatePair.local.candidate),
+ `${transportName} selected candidate pair local should be in the ` +
+ 'list of local candidates');
+ assert_true(
+ transport.getRemoteCandidates().some(
+ ({ candidate }) =>
+ candidate === selectedCandidatePair.remote.candidate),
+ `${transportName} selected candidate pair local should be in the ` +
+ 'list of remote candidates');
+ }
+ const [ localTransport, remoteTransport ] =
+ makeGatherAndStartTwoIceTransports(t);
+ await Promise.all([
+ waitForConnectedThenSelectedCandidatePairChange(t, localTransport,
+ 'local transport'),
+ waitForConnectedThenSelectedCandidatePairChange(t, remoteTransport,
+ 'remote transport'),
+ ]);
+}, 'Selected candidate pair changes once the RTCIceTransports connect.');
+
+promise_test(async t => {
+ const [ transport, ] = makeGatherAndStartTwoIceTransports(t);
+ const watcher = new EventWatcher(t, transport, 'selectedcandidatepairchange');
+ await watcher.wait_for('selectedcandidatepairchange');
+ transport.stop();
+ assert_equals(transport.getSelectedCandidatePair(), null);
+}, 'getSelectedCandidatePair() returns null once the RTCIceTransport is ' +
+ 'stopped.');
+
</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html
index c0c5d782c2f..6df056117d0 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html
@@ -354,56 +354,6 @@
});
}, `addTransceiver() with valid rid value should succeed`);
- /*
- 5.1. addTransceiver
- 7. If any RTCRtpEncodingParameters dictionary in sendEncodings contains a
- read-only parameter other than rid, throw an InvalidAccessError.
-
- - The sendEncodings argument can be used to specify the number of offered
- simulcast encodings, and optionally their RIDs and encoding parameters.
- Aside from rid , all read-only parameters in the RTCRtpEncodingParameters
- dictionaries, such as ssrc, must be left unset, or an error will be thrown.
- */
- test(t => {
- const pc = new RTCPeerConnection();
- t.add_cleanup(() => pc.close());
-
- assert_throws('InvalidAccessError', () =>
- pc.addTransceiver('audio', {
- sendEncodings: [{
- ssrc: 2
- }]
- }));
- }, `addTransceiver() with readonly ssrc set should throw InvalidAccessError`);
-
- test(t => {
- const pc = new RTCPeerConnection();
- t.add_cleanup(() => pc.close());
-
- assert_throws('InvalidAccessError', () =>
- pc.addTransceiver('audio', {
- sendEncodings: [{
- rtx: {
- ssrc: 2
- }
- }]
- }));
- }, `addTransceiver() with readonly rtx set should throw InvalidAccessError`);
-
- test(t => {
- const pc = new RTCPeerConnection();
- t.add_cleanup(() => pc.close());
-
- assert_throws('InvalidAccessError', () =>
- pc.addTransceiver('audio', {
- sendEncodings: [{
- fec: {
- ssrc: 2
- }
- }]
- }));
- }, `addTransceiver() with readonly fec set should throw InvalidAccessError`);
-
test(t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html
index 33025451b25..68c88e2757c 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html
@@ -13,13 +13,14 @@
// The following helper functions are called from RTCQuicTransport-helper.js:
// makeStandaloneQuicTransport
+// makeTwoConnectedQuicTransports
promise_test(async t => {
- const quicTransport = await makeStandaloneQuicTransport(t);
+ const [ quicTransport, ] = await makeTwoConnectedQuicTransports(t);
const quicStream = quicTransport.createStream();
assert_equals(quicStream.transport, quicTransport,
'Expect transport to be set to the creating RTCQuicTransport.');
- assert_equals(quicStream.state, 'new', `Expect state to be 'new'.`);
+ assert_equals(quicStream.state, 'open', `Expect state to be 'open'.`);
assert_equals(quicStream.readBufferedAmount, 0,
'Expect read buffered amount to be 0.');
assert_equals(quicStream.writeBufferedAmount, 0,
@@ -28,17 +29,130 @@ promise_test(async t => {
promise_test(async t => {
const quicTransport = await makeStandaloneQuicTransport(t);
+ assert_throws('InvalidStateError', () => quicTransport.createStream());
+}, 'createStream() throws if the transport is not connected.');
+
+promise_test(async t => {
+ const quicTransport = await makeStandaloneQuicTransport(t);
quicTransport.stop();
assert_throws('InvalidStateError', () => quicTransport.createStream());
}, 'createStream() throws if the transport is closed.');
promise_test(async t => {
- const quicTransport = await makeStandaloneQuicTransport(t);
+ const [ quicTransport, ] = await makeTwoConnectedQuicTransports(t);
const firstQuicStream = quicTransport.createStream();
const secondQuicStream = quicTransport.createStream();
quicTransport.stop();
assert_equals(firstQuicStream.state, 'closed');
assert_equals(secondQuicStream.state, 'closed');
-}, 'RTCQuicTransport.stop() closes all streams.');
+}, 'RTCQuicTransport.stop() closes all local streams.');
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ const firstLocalStream = localQuicTransport.createStream();
+ firstLocalStream.finish();
+ const secondLocalStream = localQuicTransport.createStream();
+ secondLocalStream.finish();
+ const remoteWatcher =
+ new EventWatcher(t, remoteQuicTransport, [ 'quicstream', 'statechange' ]);
+ const { stream: firstRemoteStream } =
+ await remoteWatcher.wait_for('quicstream');
+ const { stream: secondRemoteStream } =
+ await remoteWatcher.wait_for('quicstream');
+ localQuicTransport.stop();
+ await remoteWatcher.wait_for('statechange');
+ assert_equals(firstRemoteStream.state, 'closed');
+ assert_equals(secondRemoteStream.state, 'closed');
+}, 'RTCQuicTransport.stop() closes all remote streams.');
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ const localStream = localQuicTransport.createStream();
+ localStream.finish();
+ assert_equals(localStream.state, 'closing');
+}, `finish() changes state to 'closing'.`);
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ const localStream = localQuicTransport.createStream();
+ localStream.finish();
+ localStream.finish();
+ assert_equals(localStream.state, 'closing');
+}, `finish() twice does not change state.`);
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ const localStream = localQuicTransport.createStream();
+ localStream.reset();
+ assert_equals(localStream.state, 'closed');
+}, `reset() changes state to 'closed'.`);
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ const localStream = localQuicTransport.createStream();
+ localStream.finish();
+ localStream.reset();
+ assert_equals(localStream.state, 'closed');
+}, `reset() following finish() changes state to 'closed'.`);
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ const localStream = localQuicTransport.createStream();
+ localStream.finish();
+ const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
+ const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
+ assert_equals(remoteStream.state, 'open');
+ const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange');
+ await remoteStreamWatcher.wait_for('statechange');
+ assert_equals(remoteStream.state, 'closing');
+}, 'createStream() followed by finish() fires a quicstream event followed by ' +
+ `a statechange event to 'closing' on the remote side.`);
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ const localStream = localQuicTransport.createStream();
+ localStream.reset();
+ const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
+ const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
+ assert_equals(remoteStream.state, 'open');
+ const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange');
+ await remoteStreamWatcher.wait_for('statechange');
+ assert_equals(remoteStream.state, 'closed');
+}, 'createStream() followed by reset() fires a quicstream event followed ' +
+ `by a statechange event to 'closed' on the remote side.`);
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ remoteQuicTransport.onquicstream = ({ stream }) => stream.reset();
+ const localStream = localQuicTransport.createStream();
+ localStream.finish();
+ const localWatcher = new EventWatcher(t, localStream, 'statechange');
+ await localWatcher.wait_for('statechange');
+ assert_equals(localStream.state, 'closed');
+}, 'finish() on a remote stream that has already finished fires a ' +
+ `statechange event to 'closed' on the remote side.`);
+
+promise_test(async t => {
+ const [ localQuicTransport, remoteQuicTransport ] =
+ await makeTwoConnectedQuicTransports(t);
+ const localStream = localQuicTransport.createStream();
+ localStream.finish();
+ localStream.reset();
+ const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
+ const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
+ const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange');
+ await remoteStreamWatcher.wait_for('statechange');
+ assert_equals(remoteStream.state, 'closing');
+ await remoteStreamWatcher.wait_for('statechange');
+ assert_equals(remoteStream.state, 'closed');
+}, 'finish() then reset() fires two statechange events on the remote side.');
</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js
index 3ea19d7a78e..7e28feae093 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js
+++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js
@@ -79,4 +79,3 @@ async function makeTwoConnectedQuicTransports(t) {
]);
return [ localQuicTransport, remoteQuicTransport ];
}
-
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html
index ec79bc228ad..3bcc93d9537 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html
@@ -17,6 +17,7 @@
// makeAndGatherTwoIceTransports
// The following helper functions are called from RTCQuicTransport-helper.js:
+// generateCertificate
// makeQuicTransport
// makeStandaloneQuicTransport
// makeAndStartTwoQuicTransports
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html
index b4a60c8a6d4..b446dde230e 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html
@@ -45,15 +45,6 @@
};
dictionary RTCRtpEncodingParameters {
- [readonly]
- unsigned long ssrc;
-
- [readonly]
- RTCRtpRtxParameters rtx;
-
- [readonly]
- RTCRtpFecParameters fec;
-
RTCDtxStatus dtx;
boolean active;
RTCPriorityType priority;
@@ -67,16 +58,6 @@
double scaleResolutionDownBy;
};
- dictionary RTCRtpRtxParameters {
- [readonly]
- unsigned long ssrc;
- };
-
- dictionary RTCRtpFecParameters {
- [readonly]
- unsigned long ssrc;
- };
-
enum RTCDtxStatus {
"disabled",
"enabled"
@@ -229,32 +210,9 @@
param.encodings = undefined;
- return promise_rejects(t, 'InvalidModificationError',
- sender.setParameters(param));
- }, `sender.setParameters() with encodings unset should reject with InvalidModificationError`);
-
- promise_test(async t => {
- const pc = new RTCPeerConnection();
- t.add_cleanup(() => pc.close());
- const { sender } = pc.addTransceiver('audio');
- await doOfferAnswerExchange(t, pc);
-
- const param = sender.getParameters();
- validateSenderRtpParameters(param);
- const encoding = getFirstEncoding(param);
- const { rtx } = encoding;
-
- if(rtx === undefined) {
- encoding.rtx = { ssrc: 2 };
- } else if(rtx.ssrc === undefined) {
- rtx.ssrc = 2;
- } else {
- rtx.ssrc += 1;
- }
-
- return promise_rejects(t, 'InvalidModificationError',
+ return promise_rejects(t, new TypeError(),
sender.setParameters(param));
- }, `setParameters() with modified encoding.rtx field should reject with InvalidModificationError`);
+ }, `sender.setParameters() with encodings unset should reject with TypeError`);
promise_test(async t => {
const pc = new RTCPeerConnection();
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-helper.js
index 9c4b6cd412e..c4105decdfc 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-helper.js
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-helper.js
@@ -69,11 +69,6 @@ function validateSenderRtpParameters(param) {
When getParameters is called, the RTCRtpParameters dictionary is constructed
as follows:
- - encodings is populated based on SSRCs and RIDs present in the current remote
- description, including SSRCs used for RTX and FEC, if signaled. Every member
- of the RTCRtpEncodingParameters dictionaries other than the SSRC and RID fields
- is left undefined.
-
- The headerExtensions sequence is populated based on the header extensions that
the receiver is currently prepared to receive.
@@ -144,15 +139,6 @@ function validateRtpParameters(param) {
/*
dictionary RTCRtpEncodingParameters {
- [readonly]
- unsigned long ssrc;
-
- [readonly]
- RTCRtpRtxParameters rtx;
-
- [readonly]
- RTCRtpFecParameters fec;
-
RTCDtxStatus dtx;
boolean active;
RTCPriorityType priority;
@@ -166,16 +152,6 @@ function validateRtpParameters(param) {
double scaleResolutionDownBy;
};
- dictionary RTCRtpRtxParameters {
- [readonly]
- unsigned long ssrc;
- };
-
- dictionary RTCRtpFecParameters {
- [readonly]
- unsigned long ssrc;
- };
-
enum RTCDtxStatus {
"disabled",
"enabled"
@@ -189,18 +165,6 @@ function validateRtpParameters(param) {
};
*/
function validateEncodingParameters(encoding) {
- assert_optional_unsigned_int_field(encoding, 'ssrc');
-
- assert_optional_dict_field(encoding, 'rtx');
- if(encoding.rtx) {
- assert_unsigned_int_field(encoding.rtx, 'ssrc');
- }
-
- assert_optional_dict_field(encoding, 'fec');
- if(encoding.fec) {
- assert_unsigned_int_field(encoding.fec, 'ssrc');
- }
-
assert_optional_enum_field(encoding, 'dtx',
['disabled', 'enabled']);
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getParameters.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getParameters.html
index 8b6d648bf61..97e5d10d1e5 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getParameters.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getParameters.html
@@ -22,11 +22,6 @@
When getParameters is called, the RTCRtpParameters dictionary is constructed
as follows:
- - encodings is populated based on SSRCs and RIDs present in the current remote
- description, including SSRCs used for RTX and FEC, if signaled. Every member
- of the RTCRtpEncodingParameters dictionaries other than the SSRC and RID fields
- is left undefined.
-
- The headerExtensions sequence is populated based on the header extensions that
the receiver is currently prepared to receive.
diff --git a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
index bdd647de65c..6d572b37c0b 100644
--- a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
+++ b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
@@ -17,3 +17,6 @@
[WebGL test #588: could not create image (SVG)]
expected: FAIL
+ [WebGL test #156: could not create image (SVG)]
+ expected: FAIL
+