aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2018-07-22 21:05:03 -0400
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2018-07-22 22:39:46 -0400
commita5af9a106a1a3937dbbcafb2d18c783e5311749c (patch)
tree09b46fdc3b1c25decafe9bbea5641afcfc636fc5
parent4997ec26c27b470bbcaaf0088d32472c3eed800d (diff)
downloadservo-a5af9a106a1a3937dbbcafb2d18c783e5311749c.tar.gz
servo-a5af9a106a1a3937dbbcafb2d18c783e5311749c.zip
Update web-platform-tests to revision 3f9178031eec5374c9a7d5709a7e11ba4a1955ed
-rw-r--r--tests/wpt/metadata/MANIFEST.json1057
-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/encoding/single-byte-decoder.html.ini2
-rw-r--r--tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini2
-rw-r--r--tests/wpt/metadata/gamepad/idlharness.html.ini4
-rw-r--r--tests/wpt/metadata/gamepad/idlharness.window.js.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini60
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-textarea-element/textarea-validity-clone.html.ini4
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html.ini4
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/excluded-properties.html.ini91
-rw-r--r--tests/wpt/metadata/websockets/binary/001.html.ini2
-rw-r--r--tests/wpt/metadata/websockets/binary/002.html.ini2
-rw-r--r--tests/wpt/metadata/websockets/binary/004.html.ini2
-rw-r--r--tests/wpt/metadata/websockets/binary/005.html.ini2
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.html.ini2
-rw-r--r--tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob.html.ini2
-rw-r--r--tests/wpt/metadata/webstorage/idlharness.html.ini4
-rw-r--r--tests/wpt/metadata/webstorage/idlharness.window.js.ini4
-rw-r--r--tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini4
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html17
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html11
-rw-r--r--tests/wpt/web-platform-tests/ambient-light/idlharness.https.html37
-rw-r--r--tests/wpt/web-platform-tests/ambient-light/idlharness.https.window.js17
-rw-r--r--tests/wpt/web-platform-tests/background-fetch/idlharness.any.js25
-rw-r--r--tests/wpt/web-platform-tests/background-fetch/interfaces.https.any.js24
-rw-r--r--tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.html32
-rw-r--r--tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js20
-rw-r--r--tests/wpt/web-platform-tests/conformance-checkers/messages.json4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-layout-001.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-layout-002.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-layout-003.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-layout-004.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-layout-005.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-002.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-003.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-004.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-005.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-006.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-014.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-015.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-016.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-017.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-018.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-paint-019.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-001.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-002.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-003.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-006.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-007.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-008.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-009.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-010.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-011.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-012.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-002-ref.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-004-ref.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-005-ref.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-004-ref.html7
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-014-ref.html5
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-001-ref.html8
-rw-r--r--tests/wpt/web-platform-tests/css/css-counter-styles/idlharness.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-font-loading/idlharness.https.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-armenian-ref.html10
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-armenian.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-circle-ref.html12
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-circle.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-leading-zero-ref.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-leading-zero.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-ref.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-disc-ref.html12
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-disc.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-georgian-ref.html10
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-georgian.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-greek-ref.html10
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-greek.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-latin-ref.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-latin.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-roman-ref.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-roman.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-square-ref.html12
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-square.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-latin-ref.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-latin.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-roman-ref.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-roman.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-pseudo/marker-inherit-line-height-ref.html16
-rw-r--r--tests/wpt/web-platform-tests/css/css-pseudo/marker-inherit-line-height.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-regions/idlharness.html21
-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/word-break/reference/word-break-break-all-010-ref.html16
-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/encoding/idlharness.any.js21
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/async-script.js1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/defer-script.js1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/parser-blocking-script.js1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/sync-script-test.js9
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/sync-script.tentative.https.sub.html22
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/sync-script.tentative.https.sub.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/picture-in-picture-default-feature-policy.https.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/resources/picture-in-picture.js5
-rw-r--r--tests/wpt/web-platform-tests/gamepad/idlharness-manual.html44
-rw-r--r--tests/wpt/web-platform-tests/gamepad/idlharness.html30
-rw-r--r--tests/wpt/web-platform-tests/gamepad/idlharness.window.js18
-rw-r--r--tests/wpt/web-platform-tests/geolocation-sensor/idlharness.https.html35
-rw-r--r--tests/wpt/web-platform-tests/geolocation-sensor/idlharness.https.window.js17
-rw-r--r--tests/wpt/web-platform-tests/gyroscope/idlharness.https.html37
-rw-r--r--tests/wpt/web-platform-tests/gyroscope/idlharness.https.window.js17
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html26
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-maxlength.html51
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-minlength.html51
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-textLength.html19
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-validity-clone.html27
-rw-r--r--tests/wpt/web-platform-tests/interfaces/background-fetch.idl22
-rw-r--r--tests/wpt/web-platform-tests/interfaces/battery-status.idl19
-rw-r--r--tests/wpt/web-platform-tests/interfaces/battery.idl19
-rw-r--r--tests/wpt/web-platform-tests/interfaces/css-counter-styles.idl23
-rw-r--r--tests/wpt/web-platform-tests/interfaces/css-regions.idl35
-rw-r--r--tests/wpt/web-platform-tests/interfaces/geolocation-API.idl13
-rw-r--r--tests/wpt/web-platform-tests/interfaces/media-source.idl (renamed from tests/wpt/web-platform-tests/media-source/interfaces.html)108
-rw-r--r--tests/wpt/web-platform-tests/interfaces/netinfo.idl55
-rw-r--r--tests/wpt/web-platform-tests/interfaces/payment-request.idl2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/pointerevents-extension.idl14
-rw-r--r--tests/wpt/web-platform-tests/interfaces/requestidlecallback.idl14
-rw-r--r--tests/wpt/web-platform-tests/interfaces/resource-timing.idl41
-rw-r--r--tests/wpt/web-platform-tests/interfaces/selection-api.idl62
-rw-r--r--tests/wpt/web-platform-tests/interfaces/touch-events.idl112
-rw-r--r--tests/wpt/web-platform-tests/interfaces/user-timing.idl6
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webaudio.idl4
-rw-r--r--tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.html34
-rw-r--r--tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.window.js18
-rw-r--r--tests/wpt/web-platform-tests/keyboard-map/idlharness.https.html31
-rw-r--r--tests/wpt/web-platform-tests/keyboard-map/idlharness.https.window.js21
-rw-r--r--tests/wpt/web-platform-tests/magnetometer/idlharness.https.html38
-rw-r--r--tests/wpt/web-platform-tests/magnetometer/idlharness.https.window.js18
-rw-r--r--tests/wpt/web-platform-tests/media-source/idlharness.any.js59
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/idlharness.html49
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/idlharness.window.js27
-rw-r--r--tests/wpt/web-platform-tests/mediasession/idlharness.html32
-rw-r--r--tests/wpt/web-platform-tests/mediasession/idlharness.window.js19
-rw-r--r--tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.html38
-rw-r--r--tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.window.js19
-rw-r--r--tests/wpt/web-platform-tests/picture-in-picture/disable-picture-in-picture.html2
-rw-r--r--tests/wpt/web-platform-tests/picture-in-picture/idlharness.window.js33
-rw-r--r--tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture-twice.html21
-rw-r--r--tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html13
-rw-r--r--tests/wpt/web-platform-tests/picture-in-picture/resources/picture-in-picture-helpers.js31
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/extension/idlharness.html56
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/extension/idlharness.window.js15
-rw-r--r--tests/wpt/web-platform-tests/presentation-api/controlling-ua/idlharness.https.html24
-rw-r--r--tests/wpt/web-platform-tests/proximity/idlharness.https.html37
-rw-r--r--tests/wpt/web-platform-tests/proximity/idlharness.https.window.js17
-rw-r--r--tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html60
-rw-r--r--tests/wpt/web-platform-tests/resource-timing/idlharness.any.js36
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webxr-test.js383
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webxr-test.js.headers1
-rw-r--r--tests/wpt/web-platform-tests/selection/idlharness.window.js20
-rw-r--r--tests/wpt/web-platform-tests/selection/interfaces.html33
-rw-r--r--tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.html17
-rw-r--r--tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.https.html17
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/malformed-http-response.asis1
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/update_shell.py31
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-fetch-event.https.html111
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-redirect.https.html73
-rw-r--r--tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-003.html37
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py2
-rw-r--r--tests/wpt/web-platform-tests/touch-events/idlharness.window.js31
-rw-r--r--tests/wpt/web-platform-tests/user-timing/idlharness.any.js38
-rw-r--r--tests/wpt/web-platform-tests/web-share/idlharness.https.html32
-rw-r--r--tests/wpt/web-platform-tests/web-share/idlharness.https.window.js17
-rw-r--r--tests/wpt/web-platform-tests/webaudio/historical.html14
-rw-r--r--tests/wpt/web-platform-tests/webaudio/idlharness.https.html97
-rw-r--r--tests/wpt/web-platform-tests/webaudio/idlharness.https.window.js75
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html8
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/actions/control_click.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/actions/support/keys.py8
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py4
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.html3
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-transceivers.https.html496
-rw-r--r--tests/wpt/web-platform-tests/webstorage/idlharness.html83
-rw-r--r--tests/wpt/web-platform-tests/webstorage/idlharness.window.js30
-rw-r--r--tests/wpt/web-platform-tests/webxr/resources/webxr_util.js52
-rw-r--r--tests/wpt/web-platform-tests/webxr/xrSession_exclusive_requestAnimationFrame.https.html91
192 files changed, 3944 insertions, 1928 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index b0e14361c0c..0b8ba11ebd4 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -19035,6 +19035,18 @@
{}
]
],
+ "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html": [
+ [
+ "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html",
+ [
+ [
+ "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"2dcontext/line-styles/canvas_linestyles_linecap_001.htm": [
[
"/2dcontext/line-styles/canvas_linestyles_linecap_001.htm",
@@ -108924,7 +108936,7 @@
"/css/css-contain/contain-layout-001.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -108936,7 +108948,7 @@
"/css/css-contain/contain-layout-002.html",
[
[
- "/css/css-contain/reference/contain-layout-002-ref.html",
+ "/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
@@ -108948,7 +108960,7 @@
"/css/css-contain/contain-layout-003.html",
[
[
- "/css/css-contain/reference/contain-layout-002-ref.html",
+ "/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
@@ -108960,7 +108972,7 @@
"/css/css-contain/contain-layout-004.html",
[
[
- "/css/css-contain/reference/contain-layout-004-ref.html",
+ "/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
@@ -108972,7 +108984,7 @@
"/css/css-contain/contain-layout-005.html",
[
[
- "/css/css-contain/reference/contain-layout-005-ref.html",
+ "/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
@@ -109140,7 +109152,7 @@
"/css/css-contain/contain-paint-002.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109152,7 +109164,7 @@
"/css/css-contain/contain-paint-003.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109164,7 +109176,7 @@
"/css/css-contain/contain-paint-004.html",
[
[
- "/css/css-contain/reference/contain-paint-004-ref.html",
+ "/css/reference/nothing.html",
"=="
]
],
@@ -109176,7 +109188,7 @@
"/css/css-contain/contain-paint-005.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109188,7 +109200,7 @@
"/css/css-contain/contain-paint-006.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109284,7 +109296,7 @@
"/css/css-contain/contain-paint-014.html",
[
[
- "/css/css-contain/reference/contain-paint-014-ref.html",
+ "/css/reference/nothing.html",
"=="
]
],
@@ -109296,7 +109308,7 @@
"/css/css-contain/contain-paint-015.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109308,7 +109320,7 @@
"/css/css-contain/contain-paint-016.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109320,7 +109332,7 @@
"/css/css-contain/contain-paint-017.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109332,7 +109344,7 @@
"/css/css-contain/contain-paint-018.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109344,7 +109356,7 @@
"/css/css-contain/contain-paint-019.html",
[
[
- "/css/css-contain/reference/contain-paint-014-ref.html",
+ "/css/reference/nothing.html",
"=="
]
],
@@ -109356,7 +109368,7 @@
"/css/css-contain/contain-size-001.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109368,7 +109380,7 @@
"/css/css-contain/contain-size-002.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109380,7 +109392,7 @@
"/css/css-contain/contain-size-003.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109416,7 +109428,7 @@
"/css/css-contain/contain-size-006.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109428,7 +109440,7 @@
"/css/css-contain/contain-size-007.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109440,7 +109452,7 @@
"/css/css-contain/contain-size-008.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109452,7 +109464,7 @@
"/css/css-contain/contain-size-009.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109464,7 +109476,7 @@
"/css/css-contain/contain-size-010.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -109476,7 +109488,7 @@
"/css/css-contain/contain-size-011.html",
[
[
- "/css/css-contain/reference/contain-paint-014-ref.html",
+ "/css/reference/nothing.html",
"=="
]
],
@@ -109488,7 +109500,7 @@
"/css/css-contain/contain-size-012.html",
[
[
- "/css/css-contain/reference/contain-size-001-ref.html",
+ "/css/reference/pass_if_pass_below.html",
"=="
]
],
@@ -122343,6 +122355,150 @@
{}
]
],
+ "css/css-lists/content-property/marker-text-matches-armenian.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-armenian.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-armenian-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-circle.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-circle.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-circle-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-decimal-leading-zero.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-decimal-leading-zero.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-decimal-leading-zero-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-decimal.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-decimal.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-decimal-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-disc.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-disc.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-disc-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-georgian.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-georgian.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-georgian-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-greek.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-lower-greek.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-lower-greek-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-latin.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-lower-latin.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-lower-latin-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-roman.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-lower-roman.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-lower-roman-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-square.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-square.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-square-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-upper-latin.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-upper-latin.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-upper-latin-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-upper-roman.html": [
+ [
+ "/css/css-lists/content-property/marker-text-matches-upper-roman.html",
+ [
+ [
+ "/css/css-lists/content-property/marker-text-matches-upper-roman-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-lists/counter-increment-inside-display-contents.html": [
[
"/css/css-lists/counter-increment-inside-display-contents.html",
@@ -127515,6 +127671,18 @@
{}
]
],
+ "css/css-pseudo/marker-inherit-line-height.html": [
+ [
+ "/css/css-pseudo/marker-inherit-line-height.html",
+ [
+ [
+ "/css/css-pseudo/marker-inherit-line-height-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-pseudo/marker-inherit-values.html": [
[
"/css/css-pseudo/marker-inherit-values.html",
@@ -135187,18 +135355,6 @@
{}
]
],
- "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",
@@ -137323,30 +137479,6 @@
{}
]
],
- "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-keep-all-000.html": [
[
"/css/css-text/word-break/word-break-keep-all-000.html",
@@ -184727,6 +184859,18 @@
{}
]
],
+ "svg/linking/reftests/use-descendant-combinator-003.html": [
+ [
+ "/svg/linking/reftests/use-descendant-combinator-003.html",
+ [
+ [
+ "/svg/linking/reftests/use-descendant-combinator-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"svg/painting/currentColor-override-pserver-fallback.svg": [
[
"/svg/painting/currentColor-override-pserver-fallback.svg",
@@ -189840,6 +189984,11 @@
{}
]
],
+ "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html": [
+ [
+ {}
+ ]
+ ],
"2dcontext/drawing-rectangles-to-the-canvas/clear-100x50.png": [
[
{}
@@ -241990,21 +242139,6 @@
{}
]
],
- "css/css-contain/reference/contain-layout-002-ref.html": [
- [
- {}
- ]
- ],
- "css/css-contain/reference/contain-layout-004-ref.html": [
- [
- {}
- ]
- ],
- "css/css-contain/reference/contain-layout-005-ref.html": [
- [
- {}
- ]
- ],
"css/css-contain/reference/contain-layout-breaks-002-ref.html": [
[
{}
@@ -242015,11 +242149,6 @@
{}
]
],
- "css/css-contain/reference/contain-paint-004-ref.html": [
- [
- {}
- ]
- ],
"css/css-contain/reference/contain-paint-007-ref.html": [
[
{}
@@ -242035,16 +242164,6 @@
{}
]
],
- "css/css-contain/reference/contain-paint-014-ref.html": [
- [
- {}
- ]
- ],
- "css/css-contain/reference/contain-size-001-ref.html": [
- [
- {}
- ]
- ],
"css/css-contain/reference/contain-size-004-ref.html": [
[
{}
@@ -252960,6 +253079,66 @@
{}
]
],
+ "css/css-lists/content-property/marker-text-matches-armenian-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-circle-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-decimal-leading-zero-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-decimal-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-disc-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-georgian-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-greek-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-latin-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-roman-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-square-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-upper-latin-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-lists/content-property/marker-text-matches-upper-roman-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-lists/counter-7-ref.html": [
[
{}
@@ -254585,6 +254764,11 @@
{}
]
],
+ "css/css-pseudo/marker-inherit-line-height-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-pseudo/marker-inherit-values-ref.html": [
[
{}
@@ -258855,11 +259039,6 @@
{}
]
],
- "css/css-text/word-break/reference/word-break-break-all-010-ref.html": [
- [
- {}
- ]
- ],
"css/css-text/word-break/reference/word-break-break-all-ref-000.html": [
[
{}
@@ -275195,11 +275374,21 @@
{}
]
],
+ "feature-policy/experimental-features/resources/async-script.js": [
+ [
+ {}
+ ]
+ ],
"feature-policy/experimental-features/resources/common.js": [
[
{}
]
],
+ "feature-policy/experimental-features/resources/defer-script.js": [
+ [
+ {}
+ ]
+ ],
"feature-policy/experimental-features/resources/document-write.html": [
[
{}
@@ -275225,6 +275414,16 @@
{}
]
],
+ "feature-policy/experimental-features/resources/parser-blocking-script.js": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/experimental-features/resources/sync-script-test.js": [
+ [
+ {}
+ ]
+ ],
"feature-policy/experimental-features/resources/vertical-scroll-scrollintoview.html": [
[
{}
@@ -275255,6 +275454,11 @@
{}
]
],
+ "feature-policy/experimental-features/sync-script.tentative.https.sub.html.headers": [
+ [
+ {}
+ ]
+ ],
"feature-policy/experimental-features/unsized-image.tentative.https.sub.html.headers": [
[
{}
@@ -287570,7 +287774,7 @@
{}
]
],
- "interfaces/battery.idl": [
+ "interfaces/battery-status.idl": [
[
{}
]
@@ -287630,6 +287834,11 @@
{}
]
],
+ "interfaces/css-counter-styles.idl": [
+ [
+ {}
+ ]
+ ],
"interfaces/css-font-loading.idl": [
[
{}
@@ -287650,6 +287859,11 @@
{}
]
],
+ "interfaces/css-regions.idl": [
+ [
+ {}
+ ]
+ ],
"interfaces/css-transitions.idl": [
[
{}
@@ -287790,6 +288004,11 @@
{}
]
],
+ "interfaces/media-source.idl": [
+ [
+ {}
+ ]
+ ],
"interfaces/mediacapture-depth.idl": [
[
{}
@@ -295330,6 +295549,11 @@
{}
]
],
+ "service-workers/service-worker/resources/malformed-http-response.asis": [
+ [
+ {}
+ ]
+ ],
"service-workers/service-worker/resources/malformed-worker.py": [
[
{}
@@ -295865,6 +296089,11 @@
{}
]
],
+ "service-workers/service-worker/resources/update_shell.py": [
+ [
+ {}
+ ]
+ ],
"service-workers/service-worker/resources/vtt-frame.html": [
[
{}
@@ -310764,9 +310993,9 @@
{}
]
],
- "ambient-light/idlharness.https.html": [
+ "ambient-light/idlharness.https.window.js": [
[
- "/ambient-light/idlharness.https.html",
+ "/ambient-light/idlharness.https.window.html",
{}
]
],
@@ -310834,13 +311063,21 @@
{}
]
],
- "background-fetch/interfaces.https.any.js": [
+ "background-fetch/idlharness.any.js": [
+ [
+ "/background-fetch/idlharness.any.html",
+ {}
+ ],
+ [
+ "/background-fetch/idlharness.any.sharedworker.html",
+ {}
+ ],
[
- "/background-fetch/interfaces.https.any.html",
+ "/background-fetch/idlharness.any.worker.html",
{}
],
[
- "/background-fetch/interfaces.https.any.worker.html",
+ "/background-fetch/idlharness.https.any.serviceworker.html",
{}
]
],
@@ -310868,9 +311105,9 @@
{}
]
],
- "battery-status/battery-interface-idlharness.https.html": [
+ "battery-status/battery-interface-idlharness.https.window.js": [
[
- "/battery-status/battery-interface-idlharness.https.html",
+ "/battery-status/battery-interface-idlharness.https.window.html",
{}
]
],
@@ -316728,6 +316965,12 @@
{}
]
],
+ "css/css-counter-styles/idlharness.html": [
+ [
+ "/css/css-counter-styles/idlharness.html",
+ {}
+ ]
+ ],
"css/css-display/display-contents-computed-style.html": [
[
"/css/css-display/display-contents-computed-style.html",
@@ -319482,6 +319725,12 @@
{}
]
],
+ "css/css-regions/idlharness.html": [
+ [
+ "/css/css-regions/idlharness.html",
+ {}
+ ]
+ ],
"css/css-regions/stacking-context/javascript-stacking-context-001.html": [
[
"/css/css-regions/stacking-context/javascript-stacking-context-001.html",
@@ -338140,6 +338389,12 @@
{}
]
],
+ "feature-policy/experimental-features/sync-script.tentative.https.sub.html": [
+ [
+ "/feature-policy/experimental-features/sync-script.tentative.https.sub.html",
+ {}
+ ]
+ ],
"feature-policy/experimental-features/unsized-image.tentative.https.sub.html": [
[
"/feature-policy/experimental-features/unsized-image.tentative.https.sub.html",
@@ -339736,9 +339991,9 @@
{}
]
],
- "gamepad/idlharness.html": [
+ "gamepad/idlharness.window.js": [
[
- "/gamepad/idlharness.html",
+ "/gamepad/idlharness.window.html",
{}
]
],
@@ -339862,9 +340117,9 @@
{}
]
],
- "geolocation-sensor/idlharness.https.html": [
+ "geolocation-sensor/idlharness.https.window.js": [
[
- "/geolocation-sensor/idlharness.https.html",
+ "/geolocation-sensor/idlharness.https.window.html",
{}
]
],
@@ -339916,9 +340171,9 @@
{}
]
],
- "gyroscope/idlharness.https.html": [
+ "gyroscope/idlharness.https.window.js": [
[
- "/gyroscope/idlharness.https.html",
+ "/gyroscope/idlharness.https.window.html",
{}
]
],
@@ -346366,6 +346621,14 @@
}
]
],
+ "html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html": [
+ [
+ "/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"html/semantics/embedded-content/the-img-element/decode/image-decode.html": [
[
"/html/semantics/embedded-content/the-img-element/decode/image-decode.html",
@@ -347640,18 +347903,42 @@
{}
]
],
+ "html/semantics/forms/the-textarea-element/textarea-maxlength.html": [
+ [
+ "/html/semantics/forms/the-textarea-element/textarea-maxlength.html",
+ {}
+ ]
+ ],
+ "html/semantics/forms/the-textarea-element/textarea-minlength.html": [
+ [
+ "/html/semantics/forms/the-textarea-element/textarea-minlength.html",
+ {}
+ ]
+ ],
"html/semantics/forms/the-textarea-element/textarea-setcustomvalidity.html": [
[
"/html/semantics/forms/the-textarea-element/textarea-setcustomvalidity.html",
{}
]
],
+ "html/semantics/forms/the-textarea-element/textarea-textLength.html": [
+ [
+ "/html/semantics/forms/the-textarea-element/textarea-textLength.html",
+ {}
+ ]
+ ],
"html/semantics/forms/the-textarea-element/textarea-type.html": [
[
"/html/semantics/forms/the-textarea-element/textarea-type.html",
{}
]
],
+ "html/semantics/forms/the-textarea-element/textarea-validity-clone.html": [
+ [
+ "/html/semantics/forms/the-textarea-element/textarea-validity-clone.html",
+ {}
+ ]
+ ],
"html/semantics/forms/the-textarea-element/value-defaultValue-textContent-xhtml.xhtml": [
[
"/html/semantics/forms/the-textarea-element/value-defaultValue-textContent-xhtml.xhtml",
@@ -353120,9 +353407,9 @@
{}
]
],
- "keyboard-lock/idlharness.https.html": [
+ "keyboard-lock/idlharness.https.window.js": [
[
- "/keyboard-lock/idlharness.https.html",
+ "/keyboard-lock/idlharness.https.window.html",
{}
]
],
@@ -353162,9 +353449,9 @@
{}
]
],
- "keyboard-map/idlharness.https.html": [
+ "keyboard-map/idlharness.https.window.js": [
[
- "/keyboard-map/idlharness.https.html",
+ "/keyboard-map/idlharness.https.window.html",
{}
]
],
@@ -353318,9 +353605,9 @@
{}
]
],
- "magnetometer/idlharness.https.html": [
+ "magnetometer/idlharness.https.window.js": [
[
- "/magnetometer/idlharness.https.html",
+ "/magnetometer/idlharness.https.window.html",
{}
]
],
@@ -353534,9 +353821,13 @@
{}
]
],
- "media-source/interfaces.html": [
+ "media-source/idlharness.any.js": [
+ [
+ "/media-source/idlharness.any.html",
+ {}
+ ],
[
- "/media-source/interfaces.html",
+ "/media-source/idlharness.any.worker.html",
{}
]
],
@@ -353898,9 +354189,9 @@
{}
]
],
- "mediacapture-image/idlharness.html": [
+ "mediacapture-image/idlharness.window.js": [
[
- "/mediacapture-image/idlharness.html",
+ "/mediacapture-image/idlharness.window.html",
{}
]
],
@@ -354090,9 +354381,9 @@
{}
]
],
- "mediasession/idlharness.html": [
+ "mediasession/idlharness.window.js": [
[
- "/mediasession/idlharness.html",
+ "/mediasession/idlharness.window.html",
{}
]
],
@@ -365394,9 +365685,9 @@
{}
]
],
- "orientation-sensor/idlharness.https.html": [
+ "orientation-sensor/idlharness.https.window.js": [
[
- "/orientation-sensor/idlharness.https.html",
+ "/orientation-sensor/idlharness.https.window.html",
{}
]
],
@@ -366046,6 +366337,14 @@
}
]
],
+ "picture-in-picture/request-picture-in-picture-twice.html": [
+ [
+ "/picture-in-picture/request-picture-in-picture-twice.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"picture-in-picture/request-picture-in-picture.html": [
[
"/picture-in-picture/request-picture-in-picture.html",
@@ -366062,9 +366361,9 @@
}
]
],
- "pointerevents/extension/idlharness.html": [
+ "pointerevents/extension/idlharness.window.js": [
[
- "/pointerevents/extension/idlharness.html",
+ "/pointerevents/extension/idlharness.window.html",
{}
]
],
@@ -366360,9 +366659,9 @@
{}
]
],
- "proximity/idlharness.https.html": [
+ "proximity/idlharness.https.window.js": [
[
- "/proximity/idlharness.https.html",
+ "/proximity/idlharness.https.window.html",
{}
]
],
@@ -366450,6 +366749,12 @@
{}
]
],
+ "quirks/unitless-length/excluded-properties.html": [
+ [
+ "/quirks/unitless-length/excluded-properties.html",
+ {}
+ ]
+ ],
"quirks/unitless-length/limited-quirks.html": [
[
"/quirks/unitless-length/limited-quirks.html",
@@ -375872,9 +376177,9 @@
{}
]
],
- "selection/interfaces.html": [
+ "selection/idlharness.window.js": [
[
- "/selection/interfaces.html",
+ "/selection/idlharness.window.html",
{}
]
],
@@ -377309,6 +377614,14 @@
"service-workers/service-worker/update-after-navigation-fetch-event.https.html": [
[
"/service-workers/service-worker/update-after-navigation-fetch-event.https.html",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "service-workers/service-worker/update-after-navigation-redirect.https.html": [
+ [
+ "/service-workers/service-worker/update-after-navigation-redirect.https.html",
{}
]
],
@@ -381472,9 +381785,9 @@
{}
]
],
- "web-share/idlharness.https.html": [
+ "web-share/idlharness.https.window.js": [
[
- "/web-share/idlharness.https.html",
+ "/web-share/idlharness.https.window.html",
{}
]
],
@@ -381508,9 +381821,9 @@
{}
]
],
- "webaudio/idlharness.https.html": [
+ "webaudio/idlharness.https.window.js": [
[
- "/webaudio/idlharness.https.html",
+ "/webaudio/idlharness.https.window.html",
{
"timeout": "long"
}
@@ -383630,6 +383943,12 @@
{}
]
],
+ "webrtc/RTCPeerConnection-transceivers.https.html": [
+ [
+ "/webrtc/RTCPeerConnection-transceivers.https.html",
+ {}
+ ]
+ ],
"webrtc/RTCPeerConnectionIceEvent-constructor.html": [
[
"/webrtc/RTCPeerConnectionIceEvent-constructor.html",
@@ -385994,9 +386313,9 @@
}
]
],
- "webstorage/idlharness.html": [
+ "webstorage/idlharness.window.js": [
[
- "/webstorage/idlharness.html",
+ "/webstorage/idlharness.window.html",
{}
]
],
@@ -386800,6 +387119,12 @@
{}
]
],
+ "webxr/xrSession_exclusive_requestAnimationFrame.https.html": [
+ [
+ "/webxr/xrSession_exclusive_requestAnimationFrame.https.html",
+ {}
+ ]
+ ],
"workers/SharedWorkerPerformanceNow.html": [
[
"/workers/SharedWorkerPerformanceNow.html",
@@ -410469,6 +410794,14 @@
"3b15af010f2ce13316fed6fcab9d85e05484b60d",
"testharness"
],
+ "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html": [
+ "ec6a6d1111aae9ce051cd1a2503a5b01149ceca6",
+ "reftest"
+ ],
+ "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html": [
+ "f09c2922fc630872519fc37de47f232ecc8cc677",
+ "support"
+ ],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image.html": [
"ec86f8f5c84628cd5f3b8673de8dde34dc372fd9",
"testharness"
@@ -417129,8 +417462,8 @@
"a1f6a1ae10eeaccc4288d31a9a1c1584cfbafb22",
"support"
],
- "ambient-light/idlharness.https.html": [
- "0b3417b7e88f77777d124793e2179eac0e5e5b4d",
+ "ambient-light/idlharness.https.window.js": [
+ "10e42151ea1345b66c0daa273ffd65ffe85ac3f1",
"testharness"
],
"animation-worklet/META.yml": [
@@ -419213,8 +419546,8 @@
"6177ea08e069fd1aca85fd3d772a53022b07f519",
"support"
],
- "background-fetch/interfaces.https.any.js": [
- "34a07e3b0425cb5a1b940c9581573e2b3322724f",
+ "background-fetch/idlharness.any.js": [
+ "5c0eebc307b9cdb534003593248b03004352dacd",
"testharness"
],
"background-fetch/mixed-content-and-allowed-schemes.https.window.js": [
@@ -419261,8 +419594,8 @@
"39639373d161846186cbcb7eb33466493bcc77ad",
"testharness"
],
- "battery-status/battery-interface-idlharness.https.html": [
- "0390a5ad8de487a38e9b981ae61786c33c980222",
+ "battery-status/battery-interface-idlharness.https.window.js": [
+ "a95b16677ae52391ccd2d92b40eba679664c83bd",
"testharness"
],
"battery-status/battery-plugging-in-manual.https.html": [
@@ -437754,7 +438087,7 @@
"support"
],
"conformance-checkers/messages.json": [
- "8f8eb9dbff99fb25ef4a875b865dbaf41275614b",
+ "876e8e40feaa96e289d6528497dc4ba1c8027511",
"support"
],
"conformance-checkers/tools/build-svg-tests.py": [
@@ -506610,23 +506943,23 @@
"support"
],
"css/css-contain/contain-layout-001.html": [
- "325039fe561cd040fe680c42155a53d59eaf114e",
+ "d7e8b61bd8a7f5a2e212861f8ece100ce2d5bf49",
"reftest"
],
"css/css-contain/contain-layout-002.html": [
- "950f95e3be4bfa0b7458699e1f34e6f0567b9a35",
+ "be7015089e1e8e8fe25890734862cf703b790d48",
"reftest"
],
"css/css-contain/contain-layout-003.html": [
- "ab1c4fa31dd731e4b0993c4a2a2ba8d82ec3d524",
+ "ee83742ffee11bdb5d892b8513cc4b5ac08c691a",
"reftest"
],
"css/css-contain/contain-layout-004.html": [
- "bb9d7c13fa5745171c5e3319e04e7dc1c4007807",
+ "b42792df963aa8a6295df498ba9ace7770660cbe",
"reftest"
],
"css/css-contain/contain-layout-005.html": [
- "26160f813c0b3e5c963d4aae7bb23f90e9956941",
+ "33af5800bb2bc8cff3a5e6a2979cb9224aada355",
"reftest"
],
"css/css-contain/contain-layout-006.html": [
@@ -506682,23 +507015,23 @@
"reftest"
],
"css/css-contain/contain-paint-002.html": [
- "50adc0e83ba0d3bffd957dbf8acdf7474f6350f5",
+ "fdf31fdc298da8545f125406bc6b7d679bbe3132",
"reftest"
],
"css/css-contain/contain-paint-003.html": [
- "7eb703232b2a448b3b49394ed0102b65aa37e647",
+ "cb8c27b18abe50d15c0dc80520cc3e920aff2160",
"reftest"
],
"css/css-contain/contain-paint-004.html": [
- "2db5aaea054ed4b3a2c2db1786f29fc44515cdd4",
+ "7b4b39e623ee8e4845cde4eb51a9f81a2993cec2",
"reftest"
],
"css/css-contain/contain-paint-005.html": [
- "68c7155386ef96ba8fe22ce55d996634f928b703",
+ "18716da09c82bb564ad29628ff83d3ce914bc2b2",
"reftest"
],
"css/css-contain/contain-paint-006.html": [
- "935d160de8000eb1f83ac6a987b6c7047ca80e93",
+ "e95dfaad34be2427cab57f0320872b5481ff7a25",
"reftest"
],
"css/css-contain/contain-paint-007.html": [
@@ -506730,39 +507063,39 @@
"reftest"
],
"css/css-contain/contain-paint-014.html": [
- "c22ee90cf05992dab4188cc86c255bd040babe26",
+ "272e9031acbe072e8daab8a6b034e93395dee933",
"reftest"
],
"css/css-contain/contain-paint-015.html": [
- "3941644b7fffc11a2786e55dc28d6fcfe55c57dc",
+ "8de03ed418d767537b000ba317897aa4faa5f0da",
"reftest"
],
"css/css-contain/contain-paint-016.html": [
- "fbedca7cd40c2e5a6aea020de403d81ea334f2c1",
+ "f413eba1117e883daa04e734c414a66f891753af",
"reftest"
],
"css/css-contain/contain-paint-017.html": [
- "40a82207bac0728925609faf19e0aa896f956009",
+ "cbd018f0c83662866b216cb3828a97f9ddb847f0",
"reftest"
],
"css/css-contain/contain-paint-018.html": [
- "74f65ae0e2f8c4ceb77c54fa8bf9b1d364f55c38",
+ "f1a438d882f622974276d52dc737e1daa8b04b91",
"reftest"
],
"css/css-contain/contain-paint-019.html": [
- "75b780b1b791b6c3c06cddbd9462103b88bbd603",
+ "a0c12cdb221a1bb1e73c81b982ba78f87a63b93c",
"reftest"
],
"css/css-contain/contain-size-001.html": [
- "089c4fd7352f91a85d5d8f6bf8c5f261c868cd37",
+ "05060bb62063edcc4b7d7ad095e73f703c68eb01",
"reftest"
],
"css/css-contain/contain-size-002.html": [
- "ea16d90e56729c1678b327412cd945a0dea6b762",
+ "235ec0441285890c93dffb4ff2bd0872f3f95dd7",
"reftest"
],
"css/css-contain/contain-size-003.html": [
- "4b1fd16d90f0eebd7ce97a82a5ef55806f92060e",
+ "a49f582fbed96fab59ab3bce4295ff86c3032c22",
"reftest"
],
"css/css-contain/contain-size-004.html": [
@@ -506774,31 +507107,31 @@
"reftest"
],
"css/css-contain/contain-size-006.html": [
- "2952e1bfc74d784dd2d16867ad95199d78c08efa",
+ "bd204b37cafa98d3d3eb1796896c893c55c3e028",
"reftest"
],
"css/css-contain/contain-size-007.html": [
- "54d0f08274e3bb380d098fb5dbf9edeee67780f3",
+ "8c75bee5e46d80563532d441f6195a1e5bf455f8",
"reftest"
],
"css/css-contain/contain-size-008.html": [
- "eaff3d8150332dffa1c70fc75efd66929f8adc79",
+ "cbe3b7b06287b828b49e992f247a4a6e00cfcc80",
"reftest"
],
"css/css-contain/contain-size-009.html": [
- "727fa2cfad094c1a4e4785fb71cdc3c09a5d7f1b",
+ "14b67af417b6c662fbb38f6875ebb2a625923063",
"reftest"
],
"css/css-contain/contain-size-010.html": [
- "1bfca9e97f9135b4f4b1b456f017a641c8b85a1c",
+ "efe7acae5fc908a049275c407acc26843dc89552",
"reftest"
],
"css/css-contain/contain-size-011.html": [
- "c4b06e89428d47d9777610bb949714f70685dac5",
+ "de95aef6aef63dc6cfa71bdc6ca749feeca9d575",
"reftest"
],
"css/css-contain/contain-size-012.html": [
- "51cc7a37659688af3830dbca89b9a515e22b2551",
+ "b85a20c31a5b0c33f2f4f459c6507e3eb40958f0",
"reftest"
],
"css/css-contain/contain-size-013.html": [
@@ -506881,18 +507214,6 @@
"5067c9308951cae6deb33f4383398f96d859428f",
"reftest"
],
- "css/css-contain/reference/contain-layout-002-ref.html": [
- "cb077e2b280d7200c33e945fb175ffdbb536651a",
- "support"
- ],
- "css/css-contain/reference/contain-layout-004-ref.html": [
- "6a591187b27feb07fa982059850e06ae65f80e32",
- "support"
- ],
- "css/css-contain/reference/contain-layout-005-ref.html": [
- "6320656dc24c5377756d0895edcc2134a4ba1da1",
- "support"
- ],
"css/css-contain/reference/contain-layout-breaks-002-ref.html": [
"f5804830fd9d22117b027135bf5b9191f0f3f15e",
"support"
@@ -506901,10 +507222,6 @@
"be57e942110661fd32f0342bbe2870e4e3280d86",
"support"
],
- "css/css-contain/reference/contain-paint-004-ref.html": [
- "eecbc6d0ea1638e8c853458ed59cfbd67d096ef0",
- "support"
- ],
"css/css-contain/reference/contain-paint-007-ref.html": [
"c34cc4f333edcc4949ae8418ca736154632dc5eb",
"support"
@@ -506917,14 +507234,6 @@
"c3d8d642f2b4b25df84170669222b61866ab3057",
"support"
],
- "css/css-contain/reference/contain-paint-014-ref.html": [
- "1f281c10ae1bf7dd0f1c9119458b3698077a8e60",
- "support"
- ],
- "css/css-contain/reference/contain-size-001-ref.html": [
- "6f68316c3e9647eb6f71d299bb1d43e286899a7d",
- "support"
- ],
"css/css-contain/reference/contain-size-004-ref.html": [
"090aba85ddcf927a33de227157ac8e411fd5c268",
"support"
@@ -507237,6 +507546,10 @@
"fa84f0514e4437d3f7bfa244d0c918adcdb2b387",
"manual"
],
+ "css/css-counter-styles/idlharness.html": [
+ "74110d44fac33763366a06a867bec0d8eb804316",
+ "testharness"
+ ],
"css/css-counter-styles/japanese-formal/css3-counter-styles-047.html": [
"97e41edc2a10dfb95589ce63a578edea9c369a59",
"manual"
@@ -512306,7 +512619,7 @@
"testharness"
],
"css/css-font-loading/idlharness.https.html": [
- "93c01c16bf27adc0789dda15dd2e704b96715415",
+ "3284f427d0cecb3337b83a6fbfd60b16e5db0600",
"testharness"
],
"css/css-fonts/META.yml": [
@@ -522873,6 +523186,102 @@
"3ddf25363a61baa64374747cdfadeb9329e87f81",
"support"
],
+ "css/css-lists/content-property/marker-text-matches-armenian-ref.html": [
+ "36a124835188ab9172d59dcf8615d050f3b4b37d",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-armenian.html": [
+ "08e07d745f07a15806d532ab2b859a528ea58f0b",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-circle-ref.html": [
+ "5cf7f2cb8c066d220dfd441bb50aeec2f514bf25",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-circle.html": [
+ "3191e867c0d1a02840977838fd13e25e12cdb491",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-decimal-leading-zero-ref.html": [
+ "428d093039a3e489e0b5765b0dfe1a3587d1bf92",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-decimal-leading-zero.html": [
+ "648d651fce939501916074632c5704764115fcd5",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-decimal-ref.html": [
+ "f7c2fcd3655546e3d8e6d5fdd82523db81c69927",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-decimal.html": [
+ "c00f56ab58e7fd3ce8a2fc281543ddcde05d26fb",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-disc-ref.html": [
+ "6eee62533f2d54b12a5c9b39e93c3224cb2ffafb",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-disc.html": [
+ "876d93ca33eac5044084c7a5d0e5e445f3770a98",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-georgian-ref.html": [
+ "60f3e664d51a2a71df464f470cb644904f21f612",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-georgian.html": [
+ "192b49e24f250a1b403ab4b4f815c2d916a17abd",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-greek-ref.html": [
+ "4f2732719698d51272bb5cccf891e64a016cef8d",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-greek.html": [
+ "967b17032b21f3a041fd69b00a7b10a78d6743e6",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-latin-ref.html": [
+ "0b9981e525a3bcfe86a1b837d32c70af5355f7c0",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-latin.html": [
+ "258697c2a8b72849da7e99db6fcb1e18bed313b1",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-roman-ref.html": [
+ "d0c2e9b1b84254e32956f9f26461f7d8751e17b8",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-lower-roman.html": [
+ "8507450cf81d498202277ad20f47d9047b82803c",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-square-ref.html": [
+ "1b69ce33b9dd6e674407f78937e47b3aa4d012af",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-square.html": [
+ "198deb47052925b046d8b9f37ddb2b2109d29c25",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-upper-latin-ref.html": [
+ "f2b5bb160a67b42add362f0bdd3d492f1992b3ff",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-upper-latin.html": [
+ "5640698b5296d42d403591796cb35984d4f44e3a",
+ "reftest"
+ ],
+ "css/css-lists/content-property/marker-text-matches-upper-roman-ref.html": [
+ "188a77cab595081eac21b18005a911cf2c3c53ec",
+ "support"
+ ],
+ "css/css-lists/content-property/marker-text-matches-upper-roman.html": [
+ "5b66ea59ac497741a1501c3c6d91764fb8d99e0d",
+ "reftest"
+ ],
"css/css-lists/counter-7-ref.html": [
"6391e214ad5262afaab7cd6caaf57e7f2506fb4d",
"support"
@@ -526253,6 +526662,14 @@
"7d4739f2252956461b38d8b8566a84ead3c1d8b1",
"reftest"
],
+ "css/css-pseudo/marker-inherit-line-height-ref.html": [
+ "e0b76bc582df84e630c911cd45a77bd714ae3727",
+ "support"
+ ],
+ "css/css-pseudo/marker-inherit-line-height.html": [
+ "d6da862bc43db77db9e22a1fd1090a26a497e8cc",
+ "reftest"
+ ],
"css/css-pseudo/marker-inherit-values-ref.html": [
"92bdc9d8f482c34ad389f27c957d4024a7e05b43",
"support"
@@ -527177,6 +527594,10 @@
"bede636479a9450801076e2cb5a91a7a8effc0ec",
"reftest"
],
+ "css/css-regions/idlharness.html": [
+ "b91447384f751f12fde804a03f76017c53dae523",
+ "testharness"
+ ],
"css/css-regions/interactivity/full-screen/fullscreen-region-content-001.html": [
"3957e4a00d80b21da053611ca095cfda0caa6807",
"manual"
@@ -533605,10 +534026,6 @@
"63bbe4f7fb67f33217876af58c1de4d032c369f4",
"reftest"
],
- "css/css-text/overflow-wrap/overflow-wrap-break-word-004.html": [
- "ca2b98f9db6ac13da149380dab3311301d741045",
- "reftest"
- ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [
"9f88a667825f8cb725dc348e17081e1a25b3f4de",
"reftest"
@@ -535173,10 +535590,6 @@
"5ad54c7b9197746f66fa30628b6059a369f5bd36",
"support"
],
- "css/css-text/word-break/reference/word-break-break-all-010-ref.html": [
- "0b16a0bdb25ddd647ad96dd82e3430274667ee87",
- "support"
- ],
"css/css-text/word-break/reference/word-break-break-all-ref-000.html": [
"765afbeeede3d3dd8ad33b88927d6eb8e5435463",
"support"
@@ -535353,14 +535766,6 @@
"fd5f0cf9f57152d3c6df7c4b59c0fe70733bf9f4",
"manual"
],
- "css/css-text/word-break/word-break-break-all-010.html": [
- "f9eedfe8e72bcf6693f8049bfdf2e1efdf3084ef",
- "reftest"
- ],
- "css/css-text/word-break/word-break-break-all-011.html": [
- "047e950374d902e426287900a2d03c63726420a2",
- "reftest"
- ],
"css/css-text/word-break/word-break-keep-all-000.html": [
"219e6b0435541a834ebbee114b0dd40e15956f75",
"reftest"
@@ -568482,7 +568887,7 @@
"testharness"
],
"encoding/idlharness.any.js": [
- "d37d060ee1ab2b54cf4dccc2cb80796771324ef7",
+ "60a9348e7608a10af6091b0a157943ffc31a2e8a",
"testharness"
],
"encoding/iso-2022-jp-decoder.any.js": [
@@ -570777,10 +571182,18 @@
"c91dfd7dd6d0f18e3a5d224823676f623f9dd426",
"testharness"
],
+ "feature-policy/experimental-features/resources/async-script.js": [
+ "2c4a6fbbaec1f46e4f22a8f07f9601c498b6c4b7",
+ "support"
+ ],
"feature-policy/experimental-features/resources/common.js": [
"36dd671a85ed93f2e69927c843243cb953f82a97",
"support"
],
+ "feature-policy/experimental-features/resources/defer-script.js": [
+ "5084a464bf3da0a8ffd2c92ce5a1b49c66210c75",
+ "support"
+ ],
"feature-policy/experimental-features/resources/document-write.html": [
"a0e39689056dc5cc24ad2d7e6fb2c681e84fd35d",
"support"
@@ -570801,6 +571214,14 @@
"39f716f4bc22283fc444ea0b3a807ae426e2aadf",
"support"
],
+ "feature-policy/experimental-features/resources/parser-blocking-script.js": [
+ "833b1492f3558f16486bfe88670a180657b08a4d",
+ "support"
+ ],
+ "feature-policy/experimental-features/resources/sync-script-test.js": [
+ "432e7f767cccc0254385b2345cbfd1eca57138dc",
+ "support"
+ ],
"feature-policy/experimental-features/resources/vertical-scroll-scrollintoview.html": [
"7be60c6f51698ea1e63030bf94aad995881e0049",
"support"
@@ -570825,6 +571246,14 @@
"7c6d80135c0688eb5ef5e79351c8ebbd24cb7d77",
"support"
],
+ "feature-policy/experimental-features/sync-script.tentative.https.sub.html": [
+ "eb102d262fd4c9a1c600beb6bba79e5b4c055d64",
+ "testharness"
+ ],
+ "feature-policy/experimental-features/sync-script.tentative.https.sub.html.headers": [
+ "28b3d20a2ee88ab7771fc2ea671dd139182f5182",
+ "support"
+ ],
"feature-policy/experimental-features/unsized-image.tentative.https.sub.html": [
"ac063a3e3084a9416a272bbac413016124e5289f",
"testharness"
@@ -570986,11 +571415,11 @@
"support"
],
"feature-policy/picture-in-picture-default-feature-policy.https.sub.html": [
- "49c95204e8d3478f6c4509740fa0ed605146ca36",
+ "97beb6665671a5ccead61b3e512840d478bf3a7a",
"testharness"
],
"feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html": [
- "fb7ea1dbfb4bd71aa007bb456ce5528c3f71fb0c",
+ "6cf3bfd76a411e9981b34b30e538a190c76da206",
"testharness"
],
"feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html.headers": [
@@ -571050,7 +571479,7 @@
"support"
],
"feature-policy/resources/picture-in-picture.js": [
- "5f8637f67053cd55cfa0aa03d0bcbc7dee3ba876",
+ "ec1d60b406b88b9b710dd92749e61f9b96a5ab24",
"support"
],
"feature-policy/resources/redirect-on-load.html": [
@@ -573226,11 +573655,11 @@
"manual"
],
"gamepad/idlharness-manual.html": [
- "e570c8f2defac5b53f5f18fa3a09b184e8adb845",
+ "ebca979aed330d7790bc348f23f30f1a69a8fb72",
"manual"
],
- "gamepad/idlharness.html": [
- "0cb95e9fda86db8327efdd3a05c3b2a99d480255",
+ "gamepad/idlharness.window.js": [
+ "30bf94fe8e091d9c0245d071c42c19e96936b4a0",
"testharness"
],
"gamepad/timestamp-manual.html": [
@@ -573385,8 +573814,8 @@
"f30e3e92646c4ab20aab3b14d2418214e9e0a918",
"support"
],
- "geolocation-sensor/idlharness.https.html": [
- "38c75b8946de5be961435045007b8af9a4627cd2",
+ "geolocation-sensor/idlharness.https.window.js": [
+ "c29a81848d39576fc68ad145216ab17c27a1f213",
"testharness"
],
"graphics-aam/META.yml": [
@@ -573469,8 +573898,8 @@
"45ddcab383d36c4993f487dadb339adc729f63eb",
"support"
],
- "gyroscope/idlharness.https.html": [
- "8b9b8fcdc6d33fb20c174b67306a182bdbb707fd",
+ "gyroscope/idlharness.https.window.js": [
+ "5d74b2071370ce6232e7ea541ca984f9b9fbf95d",
"testharness"
],
"hr-time/META.yml": [
@@ -585661,6 +586090,10 @@
"9405efb65176096957438cbdcc59109b488d80e6",
"testharness"
],
+ "html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html": [
+ "cd7e495a854d848712b46cddec40e3ebffe9d3ba",
+ "testharness"
+ ],
"html/semantics/embedded-content/the-img-element/decode/image-decode.html": [
"5368b62bf6c950e8d57b16b36148e5695ce16fd8",
"testharness"
@@ -586789,6 +587222,14 @@
"b61235681689807b5d46b8aaca9ae6c7a18039f7",
"testharness"
],
+ "html/semantics/forms/the-textarea-element/textarea-maxlength.html": [
+ "fb2796fe7e542bd9551c18c0176a4f822ee347cd",
+ "testharness"
+ ],
+ "html/semantics/forms/the-textarea-element/textarea-minlength.html": [
+ "fcccb00d0db7222af1fb03e7481ccf31e51ec924",
+ "testharness"
+ ],
"html/semantics/forms/the-textarea-element/textarea-newline-bidi-ref.html": [
"26eb3e615f8b0e15cf02b7ee18d39fd71b04da70",
"support"
@@ -586813,10 +587254,18 @@
"5f5932aeba8a0a7da66ee006a6e604780210d57b",
"testharness"
],
+ "html/semantics/forms/the-textarea-element/textarea-textLength.html": [
+ "0f9b8cdaace12d4f4e7fbd57a90fcba7e826ced5",
+ "testharness"
+ ],
"html/semantics/forms/the-textarea-element/textarea-type.html": [
"81a270bc3c9304f8b2e7dd526519f4eab7d94f45",
"testharness"
],
+ "html/semantics/forms/the-textarea-element/textarea-validity-clone.html": [
+ "d0334cee779937e5d800e478013e5c8ffeaa6a1c",
+ "testharness"
+ ],
"html/semantics/forms/the-textarea-element/value-defaultValue-textContent-xhtml.xhtml": [
"03ce5d00e9887037bbd96f2d49e116c6b3329802",
"testharness"
@@ -592014,11 +592463,11 @@
"support"
],
"interfaces/background-fetch.idl": [
- "272d5ef66a2df3a6c3fefaf9688802ed93a9ad5f",
+ "4f744971f4eb6fc90bfb5fa4cc7514230e5e57dd",
"support"
],
- "interfaces/battery.idl": [
- "37550560186be55b56d226be2fdecc1e36574a6d",
+ "interfaces/battery-status.idl": [
+ "0afe8bca88113d4a8116663a308079c439b5530d",
"support"
],
"interfaces/beacon.idl": [
@@ -592065,6 +592514,10 @@
"0019e54201874e5d2a2b10c887e44b8c42199c32",
"support"
],
+ "interfaces/css-counter-styles.idl": [
+ "437dd5859385f5a17f9b9b2509b8f50eeb42a717",
+ "support"
+ ],
"interfaces/css-font-loading.idl": [
"9f2f252c5b63c159d9680de46a932bfa4335bf11",
"support"
@@ -592081,6 +592534,10 @@
"9939fb7f08cab0f167e6e0762eac6ad94b2dfd9f",
"support"
],
+ "interfaces/css-regions.idl": [
+ "23d01fa1c91539c443b2227df6a89e377b65a393",
+ "support"
+ ],
"interfaces/css-transitions.idl": [
"54dd701233a71187c8b675ebbf7336f852a7cace",
"support"
@@ -592142,7 +592599,7 @@
"support"
],
"interfaces/geolocation-API.idl": [
- "87be830712d8d40ec01b200935a41422e72ab7c4",
+ "ae1b33281c8833971cabe9ffb3ab37c065251fc0",
"support"
],
"interfaces/geolocation-sensor.idl": [
@@ -592193,6 +592650,10 @@
"dad6123e39feca39ec620de51307e56823cc5408",
"support"
],
+ "interfaces/media-source.idl": [
+ "a3c8e49db54b906ae99e2aa2cc385c0e4d949a80",
+ "support"
+ ],
"interfaces/mediacapture-depth.idl": [
"2ac0dcf83f5afb227f24c9063d738dd22e941fe9",
"support"
@@ -592218,7 +592679,7 @@
"support"
],
"interfaces/netinfo.idl": [
- "357a99c1a5cb73265ee63d1ab1a0e413c6ced458",
+ "c40e777040b92c90591f40a02a66440ecc228c5a",
"support"
],
"interfaces/orientation-event.idl": [
@@ -592246,7 +592707,7 @@
"support"
],
"interfaces/payment-request.idl": [
- "1523f682dd32680417a5e45d9201743685549fe6",
+ "8e5193372ad6f38d36fc20c454ea7b55e21b6379",
"support"
],
"interfaces/performance-timeline.idl": [
@@ -592258,11 +592719,11 @@
"support"
],
"interfaces/picture-in-picture.idl": [
- "4051a7f0ba28e984294ca32a5a2aef73b7f9a6bb",
+ "6feee4b6ea8d50e9ec572a6786c8fd9b4b8f80da",
"support"
],
"interfaces/pointerevents-extension.idl": [
- "26055736a27852501eba7da7f0cab7c57eceb652",
+ "e3f284d2a59f53f6127f7d146b8759918431d859",
"support"
],
"interfaces/pointerevents.idl": [
@@ -592294,11 +592755,11 @@
"support"
],
"interfaces/requestidlecallback.idl": [
- "e49a6aad4ba17b797516f397096703690bcbecd9",
+ "72a32cc188200761e80bb1b35f21f3a86b0839fe",
"support"
],
"interfaces/resource-timing.idl": [
- "75fcdf5c6ac811254e1a025cd58d958f27ab5b5b",
+ "d500e42e860b94614c0efeeb0b46d2ad7e8d79f9",
"support"
],
"interfaces/screen-orientation.idl": [
@@ -592314,7 +592775,7 @@
"support"
],
"interfaces/selection-api.idl": [
- "10e7cdeb0e3c5e3871c81e30e89e72412d3f572f",
+ "622e064c826b3d25618e0bd6041e4297f9939d78",
"support"
],
"interfaces/server-timing.idl": [
@@ -592334,7 +592795,7 @@
"support"
],
"interfaces/touch-events.idl": [
- "00811ff421c7ecafb8070d1a3d17310e1228c725",
+ "4e456ecce04a5f8fb19a7be5ae0d9e5bd69a1ec1",
"support"
],
"interfaces/touchevents.idl": [
@@ -592350,7 +592811,7 @@
"support"
],
"interfaces/user-timing.idl": [
- "41c00eec8e9c1b2137bd05e85bdc029b7a87c349",
+ "e91a31115b596326e55da3c9ccd141b2b5e7275a",
"support"
],
"interfaces/vibration.idl": [
@@ -592382,7 +592843,7 @@
"support"
],
"interfaces/webaudio.idl": [
- "a2adb319de88d1d33080a837972caefa5c5c1946",
+ "1750df8547db73ffe06d1c3e87f34fbcc7c49dcb",
"support"
],
"interfaces/webauthn.idl": [
@@ -592621,8 +593082,8 @@
"94a99910be54c9c6db2a318a8a6bcbd18947541d",
"support"
],
- "keyboard-lock/idlharness.https.html": [
- "d196b06e8606572e1e6c1a9e81e2f0920641c069",
+ "keyboard-lock/idlharness.https.window.js": [
+ "70fb3044f9154dd97ca82c5b3f76a4e383252ff3",
"testharness"
],
"keyboard-lock/navigator-keyboard-lock-blocked-from-cross-origin-iframe.https.html": [
@@ -592657,8 +593118,8 @@
"abee315df71456ef5fd663747ff570cc3c6d3dfc",
"support"
],
- "keyboard-map/idlharness.https.html": [
- "3215b6729d83ca2841baf6eb33445eb07e0a7c25",
+ "keyboard-map/idlharness.https.window.js": [
+ "30317f694273b15b2b1b6fea2fddc88c806a3303",
"testharness"
],
"keyboard-map/navigator-keyboard-map-blocked-from-cross-origin-iframe.https.html": [
@@ -592821,8 +593282,8 @@
"5da81d90bd6960c94d5b3dd7592aa4c93d996e1a",
"manual"
],
- "magnetometer/idlharness.https.html": [
- "d5ba7fe95ed2740eec56757dfe3b0a900f3ea4c4",
+ "magnetometer/idlharness.https.window.js": [
+ "2d163a0c50467e06311dfff5c0c3b60420e6150b",
"testharness"
],
"mathml/META.yml": [
@@ -593337,14 +593798,14 @@
"fefa39b93290d8d97b18f606c5166d7792193251",
"support"
],
+ "media-source/idlharness.any.js": [
+ "d9b97ca6d0883ef11491723a5db5b9e92e32a380",
+ "testharness"
+ ],
"media-source/import_tests.sh": [
"943d26f264d59f2a7c01db30f5d91e72dafa9935",
"support"
],
- "media-source/interfaces.html": [
- "f836da38e12662cd56590d5a0534ad555dbf249e",
- "testharness"
- ],
"media-source/manifest.txt": [
"d1e89d132c19294d2c7bb677668c03f3309b475e",
"support"
@@ -593909,8 +594370,8 @@
"0e0b75556b814c4d95b6bbefa19597d7f618467d",
"support"
],
- "mediacapture-image/idlharness.html": [
- "ad2c957734eb67577ef3e50f95984eeb999f4743",
+ "mediacapture-image/idlharness.window.js": [
+ "2a422e686bd462ea9cf1d8718becac291e3da2e9",
"testharness"
],
"mediacapture-record/BlobEvent-constructor.html": [
@@ -594065,8 +594526,8 @@
"5ceecb2611837e6c52a303cec32d8cb9fabe93a6",
"support"
],
- "mediasession/idlharness.html": [
- "e5b4267255f62b4505b3c656d2b377380f8dfab5",
+ "mediasession/idlharness.window.js": [
+ "5ab75d11ae3fcb7dc19971865df170cdf4e706ee",
"testharness"
],
"mediasession/mediametadata.html": [
@@ -602481,8 +602942,8 @@
"9bf83c64eb5dcf284eb6c45db8ac278ab3c637a2",
"testharness"
],
- "orientation-sensor/idlharness.https.html": [
- "1f94329cb330a1a904d409a6e158a5fe9f8dd709",
+ "orientation-sensor/idlharness.https.window.js": [
+ "0be5ccc874864dd3f1a0aeb9a79f0ddfe601b30e",
"testharness"
],
"orientation-sensor/orientation-sensor-tests.js": [
@@ -603106,7 +603567,7 @@
"support"
],
"picture-in-picture/disable-picture-in-picture.html": [
- "d97bf03a6e2f991c173248f9e28bd713da19a6f4",
+ "f80cdccd1c6edcf6a859a1ae2315a9f65188d812",
"testharness"
],
"picture-in-picture/enter-picture-in-picture.html": [
@@ -603118,7 +603579,7 @@
"testharness"
],
"picture-in-picture/idlharness.window.js": [
- "a2a5c08651d42ef14d4ffd1ac0fa0c56a7a2eb37",
+ "8861876d089790497afb99496c118ac24f43eadd",
"testharness"
],
"picture-in-picture/leave-picture-in-picture.html": [
@@ -603133,12 +603594,16 @@
"628cc1c6d8d2c83a6f3e466bc66a26ea76b85ff2",
"testharness"
],
+ "picture-in-picture/request-picture-in-picture-twice.html": [
+ "c45cc223ec4336916d46c3d4db8bc4decbbd3332",
+ "testharness"
+ ],
"picture-in-picture/request-picture-in-picture.html": [
- "3ffc08be84a5c7b67d35b21c614ccc8fa2a8c642",
+ "fb6711b83e61613cef5928b6829b048d2cb7d73b",
"testharness"
],
"picture-in-picture/resources/picture-in-picture-helpers.js": [
- "f31184184ba9a74456ab449c480a6777e860a81a",
+ "b41a3c97a777a69ab28eea3b33f464379303da3d",
"support"
],
"picture-in-picture/shadow-dom.html": [
@@ -603157,8 +603622,8 @@
"cba44e2dd2a3c54106bfecc6cdd407643e2ba995",
"manual"
],
- "pointerevents/extension/idlharness.html": [
- "70f3fc4fce01d7acb4611aa870d7f95a1d734dbc",
+ "pointerevents/extension/idlharness.window.js": [
+ "ec3860925d71afeda168b89025e5ee6085e67d3e",
"testharness"
],
"pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html": [
@@ -603838,7 +604303,7 @@
"testharness"
],
"presentation-api/controlling-ua/idlharness.https.html": [
- "75dca68e8398772129feacc28bfe574e9c8d402b",
+ "b369c2a6001fa89daffbee9dc588388c74c6badc",
"testharness"
],
"presentation-api/controlling-ua/reconnectToPresentation_notfound_error.https.html": [
@@ -604025,8 +604490,8 @@
"5c6c0c5c8abd844fa89a01e646def9cd21f4864d",
"manual"
],
- "proximity/idlharness.https.html": [
- "7265649abefcaec47f159b4980b0c43ca7e47528",
+ "proximity/idlharness.https.window.js": [
+ "8e3e606f370b32c31d2acb1a1de32985c048ae36",
"testharness"
],
"push-api/META.yml": [
@@ -604101,6 +604566,10 @@
"b7a8466a3842237ddf9446bd3ab49de043001526",
"testharness"
],
+ "quirks/unitless-length/excluded-properties.html": [
+ "d1214dc257034cf6a844289039ffd8a2e736193c",
+ "testharness"
+ ],
"quirks/unitless-length/limited-quirks.html": [
"5d34a17086a2f3abb58b0e3e3f0599bc39f8486e",
"testharness"
@@ -612142,7 +612611,7 @@
"testharness"
],
"resource-timing/idlharness.any.js": [
- "a1bb5ee0f67683b42035fa683e9a984b0cf4d5dc",
+ "2065b03393c21199e49553ec99902aaddec74ce0",
"testharness"
],
"resource-timing/iframe-setdomain.sub.html": [
@@ -612709,8 +613178,8 @@
"4b5b638ae5cdaab02fbe9cca255a119134238a7d",
"testharness"
],
- "selection/interfaces.html": [
- "78e92642e2562da8040c791e4c3a7ad1de53e600",
+ "selection/idlharness.window.js": [
+ "2a89076946fd12a1629ef962c2e459accba952df",
"testharness"
],
"selection/isCollapsed.html": [
@@ -613466,11 +613935,11 @@
"support"
],
"server-timing/server_timing_header-parsing.html": [
- "10f756bbf749b7ad8f7c6eb4efe752ee79c44b4a",
+ "7ec595af5a8c240c0fe0a4b10469fd11e2f56cbf",
"testharness"
],
"server-timing/server_timing_header-parsing.https.html": [
- "10f756bbf749b7ad8f7c6eb4efe752ee79c44b4a",
+ "7ec595af5a8c240c0fe0a4b10469fd11e2f56cbf",
"testharness"
],
"server-timing/service_worker_idl.https.html": [
@@ -615113,6 +615582,10 @@
"7a74ae709c072750cf0639f78bf9a0ac4f16f50b",
"support"
],
+ "service-workers/service-worker/resources/malformed-http-response.asis": [
+ "06de4e389698b70ab9b354c9b3df5678f342c7ab",
+ "support"
+ ],
"service-workers/service-worker/resources/malformed-worker.py": [
"a9f19c8f8f6908c4a4732bbd0f6b2f3d19401909",
"support"
@@ -615541,6 +616014,10 @@
"f2c2345c448cee3c12b8f6dcc6e6da3c32b2d43a",
"support"
],
+ "service-workers/service-worker/resources/update_shell.py": [
+ "429b6a398c226bb18100f95380d08aa5c777b5bd",
+ "support"
+ ],
"service-workers/service-worker/resources/vtt-frame.html": [
"6ecbf39466212039c7f3ed307e19c89ef2e12735",
"support"
@@ -615686,7 +616163,11 @@
"testharness"
],
"service-workers/service-worker/update-after-navigation-fetch-event.https.html": [
- "14d79d1008193c96f0eadaf3e47ef321a429b905",
+ "48622ab7b06a9da3946d4ade596bf3f8f6d2fda7",
+ "testharness"
+ ],
+ "service-workers/service-worker/update-after-navigation-redirect.https.html": [
+ "f81390e04cd4d04e0b44ba3884aabcaae64d9772",
"testharness"
],
"service-workers/service-worker/update-after-oneday.https.html": [
@@ -620269,6 +620750,10 @@
"3d51ca0fc007d52147e7ea03493cac7ee1bb7903",
"reftest"
],
+ "svg/linking/reftests/use-descendant-combinator-003.html": [
+ "d9155d3b92ecf0735f82ed9a0f2a8fd3fc380d55",
+ "reftest"
+ ],
"svg/linking/reftests/use-descendant-combinator-ref.html": [
"fb8aec792684b97151d2964b85d1e70829e141ad",
"support"
@@ -620830,7 +621315,7 @@
"testharness"
],
"touch-events/idlharness.window.js": [
- "c5bcdd44381f6f49f0e653c48d05cc14c93f424a",
+ "8a4eee7d4002836a205a1cd0aceb3a8008a1a929",
"testharness"
],
"touch-events/multi-touch-interactions-manual.html": [
@@ -621782,7 +622267,7 @@
"testharness"
],
"user-timing/idlharness.any.js": [
- "6a0dcd26b5ff16b18603c50b9257d55e6e25f0ce",
+ "62a3040dfb0508df0ef9d572a33e750cdd2b0d18",
"testharness"
],
"user-timing/invoke_with_timing_attributes.html": [
@@ -623617,8 +624102,8 @@
"bb99f1213ae2dfd767b69ee42b3c55978f5ce0fd",
"support"
],
- "web-share/idlharness.https.html": [
- "17e370aefd324ffac6a6f4b0211fbaecd1781ad4",
+ "web-share/idlharness.https.window.js": [
+ "cd9160bc9790e6e734a73a1f0656f70f8583e246",
"testharness"
],
"web-share/resources/manual-helper.js": [
@@ -623710,11 +624195,11 @@
"support"
],
"webaudio/historical.html": [
- "93068df297042344669093ce899f0230c87ebf54",
+ "c6e3c7d6751731c708edfb0f4e32df8a6a3b80b0",
"testharness"
],
- "webaudio/idlharness.https.html": [
- "0403de985b3346240ba1d4b465a8e0838f3860bc",
+ "webaudio/idlharness.https.window.js": [
+ "cadc212b4ecb16e95581e34886f49f0357c593bc",
"testharness"
],
"webaudio/js/buffer-loader.js": [
@@ -624542,7 +625027,7 @@
"testharness"
],
"webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html": [
- "820c902b9bcfeed9611ec9c3cba3ee2179a8cee7",
+ "7ea63964142ab76e3883bef9e73c2e8e0b28ea96",
"testharness"
],
"webaudio/the-audio-api/the-pannernode-interface/panner-equalpower-stereo.html": [
@@ -624730,7 +625215,7 @@
"support"
],
"webdriver/tests/actions/control_click.py": [
- "341a8fbfe64f5231a91999768de0b44bba121122",
+ "cbe7cc08b4a991da0cce1dfefd96b25be3b50138",
"wdspec"
],
"webdriver/tests/actions/key.py": [
@@ -624774,7 +625259,7 @@
"support"
],
"webdriver/tests/actions/support/keys.py": [
- "528ab8473914c14f9671d89b8a888d30162714ec",
+ "b06f684335c4ebb18ee8d0dd9e9b757f4cdcd52a",
"support"
],
"webdriver/tests/actions/support/mouse.py": [
@@ -625262,7 +625747,7 @@
"support"
],
"webdriver/tests/set_window_rect/set.py": [
- "79de443bc251f7effaa7c2ef3b95695f22db01c6",
+ "04161b59c5b144dd571dca3ef224595f9d4612f2",
"wdspec"
],
"webdriver/tests/set_window_rect/user_prompts.py": [
@@ -625950,7 +626435,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-addTransceiver.html": [
- "c2d5766daa3ea4050ccb2777d7c08af1a1bd176f",
+ "3d1531048c244d0f3391d6fe30e7c8bc7e13ef35",
"testharness"
],
"webrtc/RTCPeerConnection-canTrickleIceCandidates.html": [
@@ -626089,6 +626574,10 @@
"d40ed4a64f9e769c21060b0ba9b593938d8f8403",
"testharness"
],
+ "webrtc/RTCPeerConnection-transceivers.https.html": [
+ "a7eee2ccff5db0c393346cfcb842b0b6d9e3b966",
+ "testharness"
+ ],
"webrtc/RTCPeerConnectionIceEvent-constructor.html": [
"f273bd7fdfc883a15e8fb16fef5309061254c6cc",
"testharness"
@@ -627333,8 +627822,8 @@
"6ba7d14a894e782495d818e43f4b0901607c207e",
"support"
],
- "webstorage/idlharness.html": [
- "9bbb03ed7a846411183963fba16241a107652c0f",
+ "webstorage/idlharness.window.js": [
+ "4aeab6abb761637eeb0d03e6f95dcc5c8a9e00c1",
"testharness"
],
"webstorage/missing_arguments.html": [
@@ -630474,13 +630963,17 @@
"support"
],
"webxr/resources/webxr_util.js": [
- "e8e9631d39b75b8e01a583636de765bc9c81dcd1",
+ "e145f999bb691a4d19067c75adc0f1206a63835d",
"support"
],
"webxr/webxr_availability.http.sub.html": [
"d8aa0ef8b7b3363fd23af2700dc6d9186201c408",
"testharness"
],
+ "webxr/xrSession_exclusive_requestAnimationFrame.https.html": [
+ "e75f95ee7d2751f7cbeadda9d6219bb29dbedfdc",
+ "testharness"
+ ],
"workers/META.yml": [
"e10618bcfad6f80d5d983b9f4da878560b644108",
"support"
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
deleted file mode 100644
index 1df73b03f34..00000000000
--- a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[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
deleted file mode 100644
index e6a156581dd..00000000000
--- a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-010.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[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
deleted file mode 100644
index 6833da89a76..00000000000
--- a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-011.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[word-break-break-all-011.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
index 4957cfd5c0b..b98c1201f0b 100644
--- a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
+++ b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
@@ -34,3 +34,5 @@
[windows-1254: iso_8859-9:1989 (XMLHttpRequest)]
expected: FAIL
+
+[single-byte-decoder.html?TextDecoder]
diff --git a/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini b/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini
index c2a729a1e63..57f7b4fc44f 100644
--- a/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini
+++ b/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini
@@ -24,3 +24,5 @@
[A Keep-Alive fetch() with a body over the Quota Limit should reject.]
expected: FAIL
+
+[request-keepalive-quota.html?include=slow-1]
diff --git a/tests/wpt/metadata/gamepad/idlharness.html.ini b/tests/wpt/metadata/gamepad/idlharness.html.ini
deleted file mode 100644
index 6211f10656e..00000000000
--- a/tests/wpt/metadata/gamepad/idlharness.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[idlharness.html]
- [Gamepad IDL tests]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/gamepad/idlharness.window.js.ini b/tests/wpt/metadata/gamepad/idlharness.window.js.ini
new file mode 100644
index 00000000000..e663f693ac3
--- /dev/null
+++ b/tests/wpt/metadata/gamepad/idlharness.window.js.ini
@@ -0,0 +1,4 @@
+[idlharness.window.html]
+ [idlharness]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
index 20865f493ec..9579b42287e 100644
--- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
@@ -30,3 +30,6 @@
[Set HTTP URL frame location.protocol to data]
expected: FAIL
+ [Set HTTP URL frame location.protocol to x]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html.ini
index a3331003f7b..54f6b43a6f2 100644
--- a/tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html.ini
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html.ini
@@ -292,3 +292,7 @@
[<meta>: "1\\furl=foo"]
expected: TIMEOUT
+
+[parsing.html?131-last]
+
+[parsing.html?81-90]
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
index 559c27de134..1de3f8d68b2 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html.ini
@@ -172,63 +172,3 @@
[XHTML img usemap="http://example.org/#garbage-before-hash-id"]
expected: FAIL
- [HTML (quirks) IMG usemap="no-hash-name"]
- expected: FAIL
-
- [HTML (quirks) IMG usemap="no-hash-id"]
- expected: FAIL
-
- [HTML (quirks) IMG usemap="hash-last#"]
- expected: FAIL
-
- [HTML (quirks) IMG usemap=""]
- expected: FAIL
-
- [HTML (quirks) IMG usemap="#"]
- expected: FAIL
-
- [HTML (quirks) IMG usemap="#percent-escape-name-%41"]
- expected: FAIL
-
- [HTML (quirks) IMG usemap="#percent-escape-id-%41"]
- expected: FAIL
-
- [HTML (quirks) IMG usemap="#no-such-map"]
- expected: FAIL
-
- [HTML (quirks) IMG usemap="#different-CASE-name"]
- expected: FAIL
-
- [HTML (quirks) IMG usemap="#different-CASE-id"]
- expected: FAIL
-
- [XHTML img usemap="no-hash-name"]
- expected: FAIL
-
- [XHTML img usemap="no-hash-id"]
- expected: FAIL
-
- [XHTML img usemap="hash-last#"]
- expected: FAIL
-
- [XHTML img usemap=""]
- expected: FAIL
-
- [XHTML img usemap="#"]
- expected: FAIL
-
- [XHTML img usemap="#percent-escape-name-%41"]
- expected: FAIL
-
- [XHTML img usemap="#percent-escape-id-%41"]
- expected: FAIL
-
- [XHTML img usemap="#no-such-map"]
- expected: FAIL
-
- [XHTML img usemap="#different-CASE-name"]
- expected: FAIL
-
- [XHTML img usemap="#different-CASE-id"]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html.ini
new file mode 100644
index 00000000000..27790990a42
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html.ini
@@ -0,0 +1,4 @@
+[image-decode-with-quick-attach.html]
+ [HTMLImageElement.prototype.decode(), attach to DOM before promise resolves.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/forms/the-textarea-element/textarea-validity-clone.html.ini b/tests/wpt/metadata/html/semantics/forms/the-textarea-element/textarea-validity-clone.html.ini
new file mode 100644
index 00000000000..ac858953e17
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/forms/the-textarea-element/textarea-validity-clone.html.ini
@@ -0,0 +1,4 @@
+[textarea-validity-clone.html]
+ [<textarea> validity state should be preserved after a clone]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html.ini
new file mode 100644
index 00000000000..33164945eb6
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html.ini
@@ -0,0 +1,4 @@
+[010.html]
+ [Salvagability of document.opened document]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/quirks/unitless-length/excluded-properties.html.ini b/tests/wpt/metadata/quirks/unitless-length/excluded-properties.html.ini
new file mode 100644
index 00000000000..ad7ce80e8f2
--- /dev/null
+++ b/tests/wpt/metadata/quirks/unitless-length/excluded-properties.html.ini
@@ -0,0 +1,91 @@
+[excluded-properties.html]
+ [Property block-size does not support quirky length]
+ expected: FAIL
+
+ [Property inline-size does not support quirky length]
+ expected: FAIL
+
+ [Property margin-block-end does not support quirky length]
+ expected: FAIL
+
+ [Property margin-block-start does not support quirky length]
+ expected: FAIL
+
+ [Property margin-inline-end does not support quirky length]
+ expected: FAIL
+
+ [Property margin-inline-start does not support quirky length]
+ expected: FAIL
+
+ [Property min-block-size does not support quirky length]
+ expected: FAIL
+
+ [Property min-inline-size does not support quirky length]
+ expected: FAIL
+
+ [Property offset-distance does not support quirky length]
+ expected: FAIL
+
+ [Property padding-block-end does not support quirky length]
+ expected: FAIL
+
+ [Property padding-block-start does not support quirky length]
+ expected: FAIL
+
+ [Property padding-inline-end does not support quirky length]
+ expected: FAIL
+
+ [Property padding-inline-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-block-end does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-block-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-bottom does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-inline-end does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-inline-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-left does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-right does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-top does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-block-end does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-block-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-bottom does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-inline-end does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-inline-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-left does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-right does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-top does not support quirky length]
+ expected: FAIL
+
+ [Property shape-margin does not support quirky length]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/websockets/binary/001.html.ini b/tests/wpt/metadata/websockets/binary/001.html.ini
index e951021f33d..5bd89b3b338 100644
--- a/tests/wpt/metadata/websockets/binary/001.html.ini
+++ b/tests/wpt/metadata/websockets/binary/001.html.ini
@@ -4,3 +4,5 @@
[WebSockets: Send/Receive blob, blob size less than network array buffer]
expected: TIMEOUT
+
+[001.html]
diff --git a/tests/wpt/metadata/websockets/binary/002.html.ini b/tests/wpt/metadata/websockets/binary/002.html.ini
index e147562b356..95f1b8e77c8 100644
--- a/tests/wpt/metadata/websockets/binary/002.html.ini
+++ b/tests/wpt/metadata/websockets/binary/002.html.ini
@@ -3,3 +3,5 @@
[WebSockets: Send/Receive blob, blob size greater than network array buffer]
expected: TIMEOUT
+
+[002.html]
diff --git a/tests/wpt/metadata/websockets/binary/004.html.ini b/tests/wpt/metadata/websockets/binary/004.html.ini
index 81e00c88a70..1c519088836 100644
--- a/tests/wpt/metadata/websockets/binary/004.html.ini
+++ b/tests/wpt/metadata/websockets/binary/004.html.ini
@@ -3,3 +3,5 @@
[WebSockets: Send/Receive ArrayBuffer, size greater than network array buffer]
expected: TIMEOUT
+
+[004.html]
diff --git a/tests/wpt/metadata/websockets/binary/005.html.ini b/tests/wpt/metadata/websockets/binary/005.html.ini
index bf6e162f08d..12097e48faa 100644
--- a/tests/wpt/metadata/websockets/binary/005.html.ini
+++ b/tests/wpt/metadata/websockets/binary/005.html.ini
@@ -4,3 +4,5 @@
[WebSockets: Send/Receive ArrayBuffer, size less than network array buffer]
expected: TIMEOUT
+
+[005.html]
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.html.ini
index 01192f9a402..03f0d0a344c 100644
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.html.ini
+++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.html.ini
@@ -4,3 +4,5 @@
[WebSockets: bufferedAmount for ArrayBuffer]
expected: TIMEOUT
+
+[bufferedAmount-arraybuffer.html]
diff --git a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob.html.ini b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob.html.ini
index 06242c11870..8c7df5100a0 100644
--- a/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob.html.ini
+++ b/tests/wpt/metadata/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob.html.ini
@@ -4,3 +4,5 @@
[WebSockets: bufferedAmount for blob]
expected: TIMEOUT
+
+[bufferedAmount-blob.html]
diff --git a/tests/wpt/metadata/webstorage/idlharness.html.ini b/tests/wpt/metadata/webstorage/idlharness.html.ini
deleted file mode 100644
index a02c58f603a..00000000000
--- a/tests/wpt/metadata/webstorage/idlharness.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[idlharness.html]
- [Web Storage IDL tests]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/webstorage/idlharness.window.js.ini b/tests/wpt/metadata/webstorage/idlharness.window.js.ini
new file mode 100644
index 00000000000..e663f693ac3
--- /dev/null
+++ b/tests/wpt/metadata/webstorage/idlharness.window.js.ini
@@ -0,0 +1,4 @@
+[idlharness.window.html]
+ [idlharness]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini b/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini
index ecff1270f56..842f7f5f93f 100644
--- a/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini
+++ b/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini
@@ -5,3 +5,7 @@
[sync-no-timeout]
expected: FAIL
+
+[sync-no-timeout.any.worker.html]
+
+[sync-no-timeout.any.html]
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html
new file mode 100644
index 00000000000..83cf53583ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html
@@ -0,0 +1,17 @@
+<link rel="match" href="drawimage_canvas_self_ref.html">
+<canvas id="dest" height="100" width="100"></canvas>
+<script>
+var canvasWidth = canvasHeight = 100;
+var destWidth = canvasWidth / 4;
+var destHeight = canvasHeight / 4;
+var destCanvas = document.getElementById('dest');
+var destCtx = destCanvas.getContext('2d');
+
+destCtx.fillStyle = 'red';
+destCtx.fillRect(0, 0, canvasWidth, canvasHeight);
+destCtx.fillStyle = 'green';
+destCtx.fillRect(0, 0, canvasWidth / 2, canvasHeight / 2);
+destCtx.drawImage(destCanvas,
+ 0, 0, destWidth, destHeight,
+ canvasWidth / 2, canvasHeight / 2, destWidth, destHeight);
+</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html
new file mode 100644
index 00000000000..9f297cacdcd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html
@@ -0,0 +1,11 @@
+<canvas id="dest" height="100" width="100"></canvas>
+<script>
+var canvasWidth = canvasHeight = 100;
+var destCanvas = document.getElementById('dest');
+var destCtx = destCanvas.getContext('2d');
+destCtx.fillStyle = 'red';
+destCtx.fillRect(0, 0, canvasWidth, canvasHeight);
+destCtx.fillStyle = 'green';
+destCtx.fillRect(0, 0, canvasWidth / 2, canvasHeight / 2);
+destCtx.fillRect(canvasWidth / 2, canvasHeight / 2, canvasWidth / 4, canvasHeight / 4);
+</script>
diff --git a/tests/wpt/web-platform-tests/ambient-light/idlharness.https.html b/tests/wpt/web-platform-tests/ambient-light/idlharness.https.html
deleted file mode 100644
index 962a8f7519f..00000000000
--- a/tests/wpt/web-platform-tests/ambient-light/idlharness.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Ambient Light Sensor IDL tests</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://w3c.github.io/ambient-light/">
-<link rel="help" href="https://w3c.github.io/sensors/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-"use strict";
-
-function doTest([dom, generic_sensor, ambient_light]) {
- const idl_array = new IdlArray();
- idl_array.add_untested_idls(dom);
- idl_array.add_untested_idls('interface EventHandler {};');
- idl_array.add_idls(generic_sensor, { only: ['Sensor'] });
- idl_array.add_idls(ambient_light);
- idl_array.add_objects({
- AmbientLightSensor: ['new AmbientLightSensor()']
- });
- idl_array.test();
-}
-
-function fetchText(url) {
- return fetch(url).then((response) => response.text());
-}
-
-promise_test(() => {
- return Promise.all([
- "/interfaces/dom.idl",
- "/interfaces/sensors.idl",
- "/interfaces/ambient-light.idl",
- ].map(fetchText)).then(doTest);
-}, "Test IDL implementation of Ambient Light Sensor");
-</script>
diff --git a/tests/wpt/web-platform-tests/ambient-light/idlharness.https.window.js b/tests/wpt/web-platform-tests/ambient-light/idlharness.https.window.js
new file mode 100644
index 00000000000..ea99fc1fc8a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/ambient-light/idlharness.https.window.js
@@ -0,0 +1,17 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/ambient-light/
+
+'use strict';
+
+idl_test(
+ ['ambient-light'],
+ ['generic-sensor', 'dom'],
+ idl_array => {
+ idl_array.add_objects({
+ AmbientLightSensor: ['new AmbientLightSensor()']
+ });
+ },
+ 'Test IDL implementation of Ambient Light Sensor'
+);
diff --git a/tests/wpt/web-platform-tests/background-fetch/idlharness.any.js b/tests/wpt/web-platform-tests/background-fetch/idlharness.any.js
new file mode 100644
index 00000000000..ad204771c3a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/background-fetch/idlharness.any.js
@@ -0,0 +1,25 @@
+// META: global=window,worker
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+'use strict';
+
+// https://wicg.github.io/background-fetch/
+
+idl_test(
+ ['background-fetch'],
+ ['service-workers', 'dedicated-workers', 'dom'],
+ idl_array => {
+ const isServiceWorker = location.pathname.includes('.serviceworker.');
+ if (isServiceWorker) {
+ idl_array.add_objects({
+ ServiceWorkerGlobalScope: ['self'],
+ ServiceWorkerRegistration: ['registration'],
+ BackgroundFetchManager: ['registration.backgroundFetch'],
+ BackgroundFetchEvent: ['new BackgroundFetchEvent("type")'],
+ BackgroundFetchUpdateEvent: ['new BackgroundFetchUpdateEvent("type")'],
+ });
+ }
+ },
+ 'background-fetch interfaces'
+);
diff --git a/tests/wpt/web-platform-tests/background-fetch/interfaces.https.any.js b/tests/wpt/web-platform-tests/background-fetch/interfaces.https.any.js
deleted file mode 100644
index b95b8562b77..00000000000
--- a/tests/wpt/web-platform-tests/background-fetch/interfaces.https.any.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// META: script=/resources/WebIDLParser.js
-// META: script=/resources/idlharness.js
-
-'use strict';
-
-// https://wicg.github.io/background-fetch/
-
-promise_test(async () => {
- const srcs = [
- 'background-fetch',
- 'dedicated-workers',
- 'service-workers',
- 'dom'
- ];
- const [idls, worker, serviceWorker, dom] = await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- var idlArray = new IdlArray();
- idlArray.add_idls(idls);
- idlArray.add_dependency_idls(serviceWorker);
- idlArray.add_dependency_idls(worker);
- idlArray.add_dependency_idls(dom);
- idlArray.test();
-}, 'background-fetch interfaces');
diff --git a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.html b/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.html
deleted file mode 100644
index 1a6ad544129..00000000000
--- a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Battery test: IDL</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://www.w3.org/TR/battery-status/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-"use strict";
-
-promise_test(async () => {
- const idl_array = new IdlArray();
- const dom_idl = await fetch("/interfaces/dom.idl").then(r => r.text());
- const battery_idl = await fetch("/interfaces/battery.idl").then(r => r.text());
- const manager = await navigator.getBattery();
-
- idl_array.add_untested_idls(dom_idl, {only: ['EventTarget']});
- idl_array.add_untested_idls('interface EventHandler {};');
- idl_array.add_untested_idls('interface Navigator {};');
- idl_array.add_idls(battery_idl);
-
- window.manager = manager;
-
- idl_array.add_objects({
- Navigator: ['navigator'],
- BatteryManager: ['manager'],
- });
- idl_array.test();
-}, "Test IDL implementation of Battery Status API");
-</script>
diff --git a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js b/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js
new file mode 100644
index 00000000000..3db3e16e2e4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js
@@ -0,0 +1,20 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/battery/
+
+'use strict';
+
+idl_test(
+ ['battery'],
+ ['dom', 'html'],
+ async idl_array => {
+ idl_array.add_objects({
+ Navigator: ['navigator'],
+ BatteryManager: ['manager'],
+ })
+
+ self.manager = await navigator.getBattery();
+ },
+ 'Test IDL implementation of Battery Status API'
+);
diff --git a/tests/wpt/web-platform-tests/conformance-checkers/messages.json b/tests/wpt/web-platform-tests/conformance-checkers/messages.json
index ecd084d7e03..281326646ff 100644
--- a/tests/wpt/web-platform-tests/conformance-checkers/messages.json
+++ b/tests/wpt/web-platform-tests/conformance-checkers/messages.json
@@ -1412,7 +1412,7 @@
"html/elements/label/for-descendant-no-id-novalid.html": "Any \u201cinput\u201d descendant of a \u201clabel\u201d element with a \u201cfor\u201d attribute must have an ID value that matches that \u201cfor\u201d attribute.",
"html/elements/label/multiple-descendants-novalid.html": "The \u201clabel\u201d element may contain at most one \u201cbutton\u201d, \u201cinput\u201d, \u201cmeter\u201d, \u201coutput\u201d, \u201cprogress\u201d, \u201cselect\u201d, or \u201ctextarea\u201d descendant.",
"html/elements/link/href-empty-novalid.html": "Bad value \u201c\u201d for attribute \u201chref\u201d on element \u201clink\u201d: Bad URL: Must be non-empty.",
- "html/elements/link/href-missing-novalid.html": "Element \u201clink\u201d is missing required attribute \u201chref\u201d.",
+ "html/elements/link/href-missing-novalid.html": "Element \u201clink\u201d is missing one or more of the following attributes: [href, resource].",
"html/elements/link/href-whitespace-only-novalid.html": "Bad value \u201c\t \n\u201d for attribute \u201chref\u201d on element \u201clink\u201d: Bad URL: Must be non-empty.",
"html/elements/link/href/fragment-backslash-novalid.html": "Bad value \u201c#\\\u201d for attribute \u201chref\u201d on element \u201clink\u201d: Bad URL: Illegal character in fragment: \u201c\\\u201d is not allowed.",
"html/elements/link/href/fragment-contains-hash-novalid.html": "Bad value \u201chttp://foo/path#f#g\u201d for attribute \u201chref\u201d on element \u201clink\u201d: Bad URL: Illegal character in fragment: \u201c#\u201d is not allowed.",
@@ -2406,7 +2406,7 @@
"xhtml/elements/keygen/360-novalid.xhtml": "The \u201ckeygen\u201d element is obsolete. ",
"xhtml/elements/keygen/361-novalid.xhtml": "The \u201ckeygen\u201d element is obsolete. ",
"xhtml/elements/keygen/keygen-novalid.xhtml": "The \u201ckeygen\u201d element is obsolete. ",
- "xhtml/elements/link/001-novalid.xhtml": "Element \u201clink\u201d is missing required attribute \u201chref\u201d.",
+ "xhtml/elements/link/001-novalid.xhtml": "Element \u201clink\u201d is missing one or more of the following attributes: [href, resource].",
"xhtml/elements/menu/menu-containing-hr-novalid.xhtml": "Element \u201chr\u201d not allowed as child of element \u201cmenu\u201d in this context. (Suppressing further errors from this subtree.)",
"xhtml/elements/menu/menu-containing-menu-novalid.xhtml": "Element \u201cmenu\u201d not allowed as child of element \u201cmenu\u201d in this context. (Suppressing further errors from this subtree.)",
"xhtml/elements/menu/menu-containing-text-novalid.xhtml": "Text not allowed in element \u201cmenu\u201d in this context.",
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-001.html b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-001.html
index 3a49cb9ea8e..c8895b9a667 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-001.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-001.html
@@ -5,7 +5,7 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="layout containment does not apply to non atomic inlines">
- <link rel="match" href="reference/contain-size-001-ref.html">
+ <link rel="match" href="../reference/pass_if_pass_below.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-layout">
<style>
@@ -15,5 +15,5 @@ span {
}
</style>
-<p>This test passes if you can see the word PASS below.
+<p>Test passes if there is the word "PASS" below.</p>
<div><span>PA</span>SS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-002.html b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-002.html
index c39d759c1a6..1ae149f1aaf 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-002.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-002.html
@@ -5,28 +5,32 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="ahem">
<meta name=assert content="layout containment does not apply to ruby-base">
- <link rel="match" href="reference/contain-layout-002-ref.html">
+ <link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-layout">
<style>
+div {
+ position: relative;
+ background: red;
+ width: 100px;
+ height: 100px;
+ padding: 25px;
+ box-sizing: border-box;
+}
rb {
contain: layout;
display: ruby-base;
- font-family: ahem;
- font-size: 20px;
+ font-family: Ahem;
+ font-size: 100px;
line-height: 1;
}
-rb::before {
- content: "X";
- color: green;
-}
rb::after {
content: "X";
- color: white;
+ color: green;
position: absolute;
top:0; left: 0;
}
</style>
-<p>This test passes if you can see a green box below.
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div><ruby><rb></rb></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-003.html b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-003.html
index b1bc2418893..1b063f1965b 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-003.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-003.html
@@ -5,28 +5,32 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="ahem">
<meta name=assert content="layout containment does not apply to ruby-base-container">
- <link rel="match" href="reference/contain-layout-002-ref.html">
+ <link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-layout">
<style>
+div {
+ position: relative;
+ background: red;
+ width: 100px;
+ height: 100px;
+ padding: 25px;
+ box-sizing: border-box;
+}
rbc {
contain: layout;
display: ruby-base-container;
- font-family: ahem;
- font-size: 20px;
+ font-family: Ahem;
+ font-size: 100px;
line-height: 1;
}
-rbc::before {
- content: "X";
- color: green;
-}
rbc::after {
content: "X";
- color: white;
+ color: green;
position: absolute;
top:0; left: 0;
}
</style>
-<p>This test passes if you can see a green box below.
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div><ruby><rbc></rbc></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-004.html b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-004.html
index 93af6ee4511..483aeae7603 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-004.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-004.html
@@ -5,28 +5,32 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="ahem">
<meta name=assert content="layout containment does not apply to ruby-text-container">
- <link rel="match" href="reference/contain-layout-004-ref.html">
+ <link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-layout">
<style>
+div {
+ position: relative;
+ background: red;
+ width: 100px;
+ height: 100px;
+ padding: 25px;
+ box-sizing: border-box;
+}
rtc {
contain: layout;
display: ruby-text-container;
- font-family: ahem;
- font-size: 20px;
+ font-family: Ahem;
+ font-size: 100px;
line-height: 1;
}
-rtc::before {
- content: "X";
- color: green;
-}
rtc::after {
content: "X";
- color: white;
+ color: green;
position: absolute;
top:0; left: 0;
}
</style>
-<p>This test passes if you can see a green box below.
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div><ruby><rtc></rtc></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-005.html b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-005.html
index f348359a117..39ef209b2b7 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-layout-005.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-layout-005.html
@@ -5,28 +5,32 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="ahem">
<meta name=assert content="layout containment does not apply to ruby-text">
- <link rel="match" href="reference/contain-layout-005-ref.html">
+ <link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-layout">
<style>
+div {
+ position: relative;
+ background: red;
+ width: 100px;
+ height: 100px;
+ padding: 25px;
+ box-sizing: border-box;
+}
rt {
contain: layout;
display: ruby-text;
- font-family: ahem;
- font-size: 20px;
+ font-family: Ahem;
+ font-size: 100px;
line-height: 1;
}
-rt::before {
- content: "X";
- color: green;
-}
rt::after {
content: "X";
- color: white;
+ color: green;
position: absolute;
top:0; left: 0;
}
</style>
-<p>This test passes if you can see a green box below.
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div><ruby><rt></rt></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-002.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-002.html
index ff59a234327..6f495f56173 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-002.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-002.html
@@ -5,7 +5,7 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="paint containment does not apply to non atomic inlines">
- <link rel="match" href="reference/contain-size-001-ref.html">
+ <link rel="match" href="../reference/pass_if_pass_below.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-paint">
<style>
@@ -19,5 +19,5 @@ span::after {
}
</style>
-<p>This test passes if you can see the word PASS below.
+<p>Test passes if there is the word "PASS" below.</p>
<div><span></span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-003.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-003.html
index 7db9c20ef00..ae9238d35bf 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-003.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-003.html
@@ -5,14 +5,14 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="paint containment applies to the principal box, which is the table wrapper box for tables">
- <link rel="match" href="reference/contain-size-001-ref.html">
+ <link rel="match" href="../reference/pass_if_pass_below.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-paint">
<style>
table { contain: paint; }
</style>
-<p>This test passes if you can see the word PASS below.
+<p>Test passes if there is the word "PASS" below.</p>
<table>
<caption>PASS</caption>
</table>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-004.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-004.html
index a3941b3f7fd..d37676dda9c 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-004.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-004.html
@@ -5,14 +5,14 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="paint containment applies to the principal box, which for list items excludes the list marker">
- <link rel="match" href="reference/contain-paint-004-ref.html">
+ <link rel="match" href="../reference/nothing.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-paint">
<style>
li { contain: paint; }
</style>
-<p>This test passes if you can see no number below.
+<p>There should be nothing below.</p>
<ol>
<li>
<li>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-005.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-005.html
index 71ceae4f025..a6817be517f 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-005.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-005.html
@@ -5,7 +5,7 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="paint containment does not apply to ruby-base">
- <link rel="match" href="reference/contain-size-001-ref.html">
+ <link rel="match" href="../reference/pass_if_pass_below.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-paint">
<style>
@@ -20,5 +20,5 @@ rb::after {
}
</style>
-<p>This test passes if you can see the word PASS below.
+<p>Test passes if there is the word "PASS" below.</p>
<div><ruby><rb></rb></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-006.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-006.html
index 1349c186e96..b04a78f9985 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-006.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-006.html
@@ -5,7 +5,7 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="paint containment does not apply to ruby-base-container">
- <link rel="match" href="reference/contain-size-001-ref.html">
+ <link rel="match" href="../reference/pass_if_pass_below.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-paint">
<style>
@@ -20,5 +20,5 @@ rbc::after {
}
</style>
-<p>This test passes if you can see the word PASS below.
+<p>Test passes if there is the word "PASS" below.</p>
<div><ruby><rbc></rbc></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-014.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-014.html
index d1eb4ec8fe2..ee6bc7876f6 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-014.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-014.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Paint containment on table-cell</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-paint">
-<link rel="match" href="reference/contain-paint-014-ref.html">
+<link rel="match" href="../reference/nothing.html">
<meta name=assert content="Paint containment does apply to table-cell elements.">
<style>
div {
@@ -15,5 +15,5 @@ span {
}
</style>
-<p>This test passes if you can NOT see the word FAIL below.</p>
+<p>There should be nothing below.</p>
<div><span>FAIL</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-015.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-015.html
index 0e50bea0c1c..702bfb62b18 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-015.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-015.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Paint containment on table-row-group</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-paint">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Paint containment doesn't apply to table-row-group elements.">
<style>
div {
@@ -15,5 +15,5 @@ span {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div><span>PASS</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-016.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-016.html
index 309b5a08099..cb16009e11e 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-016.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-016.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Paint containment on table-header-group</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-paint">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Paint containment doesn't apply to table-header-group elements.">
<style>
div {
@@ -15,5 +15,5 @@ span {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div><span>PASS</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-017.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-017.html
index 578f38205e3..d1e57d4d5c0 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-017.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-017.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Paint containment on table-footer-group</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-paint">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Paint containment doesn't apply to table-footer-group elements.">
<style>
div {
@@ -15,5 +15,5 @@ span {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div><span>PASS</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-018.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-018.html
index bf1913177de..f4b92dab876 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-018.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-018.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Paint containment on table-row</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-paint">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Paint containment doesn't apply to table-row elements.">
<style>
div {
@@ -15,5 +15,5 @@ span {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div><span>PASS</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-019.html b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-019.html
index 131463c478b..90c5a8f0540 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-paint-019.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-paint-019.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Paint containment on table-caption</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-paint">
-<link rel="match" href="reference/contain-paint-014-ref.html">
+<link rel="match" href="../reference/nothing.html">
<meta name=assert content="Paint containment does apply to table-caption elements.">
<style>
div {
@@ -15,5 +15,5 @@ span {
}
</style>
-<p>This test passes if you can NOT see the word FAIL below.</p>
+<p>There should be nothing below.</p>
<div><span>FAIL</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-001.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-001.html
index 5ed871b3cdb..85bc4f49de1 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-001.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-001.html
@@ -5,7 +5,7 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="size containment does not apply to non atomic inlines">
- <link rel="match" href="reference/contain-size-001-ref.html">
+ <link rel="match" href="../reference/pass_if_pass_below.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-size">
<style>
@@ -13,5 +13,5 @@ div { overflow: hidden; }
span { contain: size; }
</style>
-<p>This test passes if you can see the word PASS below.
+<p>Test passes if there is the word "PASS" below.</p>
<div><span>PASS</span></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-002.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-002.html
index e844c67ffbc..490fd6af5d7 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-002.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-002.html
@@ -5,7 +5,7 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="size containment does not to apply ruby-base, which is an internatl ruby element">
- <link rel="match" href="reference/contain-size-001-ref.html">
+ <link rel="match" href="../reference/pass_if_pass_below.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-size">
<link rel=help href="https://drafts.csswg.org/css-display-3/#internal-ruby-element">
@@ -20,5 +20,5 @@ rb {
}
</style>
-<p>This test passes if you can see the word PASS below.
+<p>Test passes if there is the word "PASS" below.</p>
<div><ruby><rb>PASS</rb></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-003.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-003.html
index 95827dc86e2..e767e214881 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-003.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-003.html
@@ -5,7 +5,7 @@
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<meta name=flags content="">
<meta name=assert content="size containment does not to apply ruby-base-container, which is an internatl ruby element">
- <link rel="match" href="reference/contain-size-001-ref.html">
+ <link rel="match" href="../reference/pass_if_pass_below.html">
<link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-size">
<link rel=help href="https://drafts.csswg.org/css-display-3/#internal-ruby-element">
@@ -20,5 +20,5 @@ rbc {
}
</style>
-<p>This test passes if you can see the word PASS below.
+<p>Test passes if there is the word "PASS" below.</p>
<div><ruby><rbc>PASS</rbc></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-006.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-006.html
index dc1773efac5..f5c17152d98 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-006.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-006.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Size containment on table-cell</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Size containment doesn't apply to table-cell elements.">
<style>
div {
@@ -13,5 +13,5 @@ div {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div>PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-007.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-007.html
index 9cf6d91e8f6..71e61aff4d1 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-007.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-007.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Size containment on table-row-group</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Size containment doesn't apply to table-row-group elements.">
<style>
div {
@@ -13,5 +13,5 @@ div {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div>PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-008.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-008.html
index 07ba0e2c897..fb7b5258a5a 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-008.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-008.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Size containment on table-header-group</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Size containment doesn't apply to table-header-group elements.">
<style>
div {
@@ -13,5 +13,5 @@ div {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div>PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-009.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-009.html
index a3ca43c2f8d..4b080c4ad5e 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-009.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-009.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Size containment on table-footer-group</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Size containment doesn't apply to table-footer-group elements.">
<style>
div {
@@ -13,5 +13,5 @@ div {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div>PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-010.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-010.html
index a28110d0808..59fdb8b63fd 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-010.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-010.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Size containment on table-row</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Size containment doesn't apply to table-row elements.">
<style>
div {
@@ -13,5 +13,5 @@ div {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div>PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-011.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-011.html
index 0d8e3670a03..f2a146938ec 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-011.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-011.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Size containment on table-caption</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
-<link rel="match" href="reference/contain-paint-014-ref.html">
+<link rel="match" href="../reference/nothing.html">
<meta name=assert content="Size containment does apply to table-caption elements.">
<style>
div {
@@ -13,5 +13,5 @@ div {
}
</style>
-<p>This test passes if you can NOT see the word FAIL below.</p>
+<p>There should be nothing below.</p>
<div>FAIL</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-012.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-012.html
index 73a79e04af8..6823292fdf8 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-012.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-012.html
@@ -3,7 +3,7 @@
<title>CSS Containment Test: Size containment on table</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
-<link rel="match" href="reference/contain-size-001-ref.html">
+<link rel="match" href="../reference/pass_if_pass_below.html">
<meta name=assert content="Size containment doesn't apply to table elements.">
<style>
div {
@@ -13,5 +13,5 @@ div {
}
</style>
-<p>This test passes if you can see the word PASS below.</p>
+<p>Test passes if there is the word "PASS" below.</p>
<div>PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-002-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-002-ref.html
deleted file mode 100644
index 5fbeb3a758a..00000000000
--- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-002-ref.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html>
-<html lang=en>
- <meta charset=utf-8>
- <title>CSS-contain test referene</title>
- <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
- <meta name=flags content="ahem">
-
-<style>
-rb {
- font-family: ahem;
- font-size: 20px;
- line-height: 1;
-}
-rb::before {
- content: "X";
- color: green;
-}
-rb::after {
- content: "X";
- color: white;
- position: absolute;
- top:0; left: 0;
-}
-</style>
-
-<p>This test passes if you can see a green box below.
-<div><ruby><rb></rb></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-004-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-004-ref.html
deleted file mode 100644
index f3279e9b201..00000000000
--- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-004-ref.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html>
-<html lang=en>
- <meta charset=utf-8>
- <title>CSS-contain test reference</title>
- <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
- <meta name=flags content="ahem">
-
-<style>
-rtc {
- display: ruby-text-container;
- font-family: ahem;
- font-size: 20px;
- line-height: 1;
-}
-rtc::before {
- content: "X";
- color: green;
-}
-rtc::after {
- content: "X";
- color: white;
- position: absolute;
- top:0; left: 0;
-}
-</style>
-
-<p>This test passes if you can see a green box below.
-<div><ruby><rtc></rtc></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-005-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-005-ref.html
deleted file mode 100644
index 0b2792fe282..00000000000
--- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-layout-005-ref.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html>
-<html lang=en>
- <meta charset=utf-8>
- <title>CSS-contain test reference</title>
- <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
- <meta name=flags content="ahem">
-
-<style>
-rt {
- display: ruby-text;
- font-family: ahem;
- font-size: 20px;
- line-height: 1;
-}
-rt::before {
- content: "X";
- color: green;
-}
-rt::after {
- content: "X";
- color: white;
- position: absolute;
- top:0; left: 0;
-}
-</style>
-
-<p>This test passes if you can see a green box below.
-<div><ruby><rt></rt></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-004-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-004-ref.html
deleted file mode 100644
index c03b4c857e7..00000000000
--- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-004-ref.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!doctype html>
-<html lang=en>
- <meta charset=utf-8>
- <title>CSS-contain test reference</title>
- <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
-
-<p>This test passes if you can see no number below.
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-014-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-014-ref.html
deleted file mode 100644
index 6617f7776d7..00000000000
--- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-014-ref.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Containment Test: Reference file</title>
-<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
-<p>This test passes if you can NOT see the word FAIL below.</p>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-001-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-001-ref.html
deleted file mode 100644
index 9b669db190b..00000000000
--- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-001-ref.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!doctype html>
-<html lang=en>
- <meta charset=utf-8>
- <title>CSS-contain test reference</title>
- <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
-
-<p>This test passes if you can see the word PASS below.
-<div>PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/idlharness.html b/tests/wpt/web-platform-tests/css/css-counter-styles/idlharness.html
new file mode 100644
index 00000000000..b36a5de12f0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-counter-styles/idlharness.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<title>css-counter-styles IDL tests</title>
+<link rel="help" href="https://drafts.csswg.org/css-counter-styles/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+
+<style>
+ @counter-style triangle {
+ system: cyclic;
+ symbols: ‣;
+ suffix: " ";
+ }
+</style>
+<script>
+ 'use strict';
+ idl_test(
+ ['css-counter-styles'],
+ ['cssom'],
+ idl_array => {
+ try {
+ self.counter = document.styleSheets[0].rules[0];
+ } catch (e) {
+ // Will be surfaced when counter is undefined below.
+ }
+
+ idl_array.add_objects({
+ CSSCounterStyleRule: ['counter'],
+ });
+ },
+ 'css-counter-styles interfaces'
+ );
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-font-loading/idlharness.https.html b/tests/wpt/web-platform-tests/css/css-font-loading/idlharness.https.html
index d507a61efaf..9e3d45fbe19 100644
--- a/tests/wpt/web-platform-tests/css/css-font-loading/idlharness.https.html
+++ b/tests/wpt/web-platform-tests/css/css-font-loading/idlharness.https.html
@@ -8,22 +8,17 @@
<script>
'use strict';
-promise_test(async () => {
- const srcs = ['css-font-loading', 'dom', 'html', 'cssom'];
- const [cssfontloading, dom, html, cssom] = await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- const idl_array = new IdlArray();
- idl_array.add_idls(cssfontloading);
- idl_array.add_dependency_idls(dom);
- idl_array.add_dependency_idls(html);
- idl_array.add_dependency_idls(cssom);
- idl_array.add_objects({
- Document: ['document'],
- FontFace: ['new FontFace("family", "src")'],
- FontFaceSetLoadEvent: ['new FontFaceSetLoadEvent("type")'],
- FontFaceSet: ['document.fonts'],
- });
- idl_array.test();
-}, 'css-font-loading interfaces');
+idl_test(
+ ['css-font-loading'],
+ ['dom', 'html', 'cssom'],
+ idl_array => {
+ idl_array.add_objects({
+ Document: ['document'],
+ FontFace: ['new FontFace("family", "src")'],
+ FontFaceSetLoadEvent: ['new FontFaceSetLoadEvent("type")'],
+ FontFaceSet: ['document.fonts'],
+ });
+ },
+ 'css-font-loading interfaces'
+);
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-armenian-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-armenian-ref.html
new file mode 100644
index 00000000000..f21dfff6960
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-armenian-ref.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<meta charset=utf8>
+<title>Reference: Inside list marker and normal text render identically: armenian</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>Ա. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-armenian.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-armenian.html
new file mode 100644
index 00000000000..fd0df631149
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-armenian.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: armenian</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-armenian-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: armenian inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-circle-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-circle-ref.html
new file mode 100644
index 00000000000..60a342f1a9d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-circle-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: circle</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+p::before {
+ content: counter(test, circle);
+}
+</style>
+<p> Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-circle.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-circle.html
new file mode 100644
index 00000000000..138f73cc514
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-circle.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: circle</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-circle-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: circle inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-leading-zero-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-leading-zero-ref.html
new file mode 100644
index 00000000000..997801d5699
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-leading-zero-ref.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: decimal-leading-zero</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>01. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-leading-zero.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-leading-zero.html
new file mode 100644
index 00000000000..5044d4e68dd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-leading-zero.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: decimal-leading-zero</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-decimal-leading-zero-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: decimal-leading-zero inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-ref.html
new file mode 100644
index 00000000000..8f97cc36a4f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal-ref.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: decimal</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>1. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal.html
new file mode 100644
index 00000000000..8c991bc3d6a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-decimal.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: decimal</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-decimal-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: decimal inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-disc-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-disc-ref.html
new file mode 100644
index 00000000000..e34a9009982
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-disc-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: disc</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+p::before {
+ content: counter(test, disc);
+}
+</style>
+<p> Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-disc.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-disc.html
new file mode 100644
index 00000000000..e2456cb8f34
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-disc.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: disc</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-disc-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: disc inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-georgian-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-georgian-ref.html
new file mode 100644
index 00000000000..c400acae529
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-georgian-ref.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<meta charset=utf8>
+<title>Reference: Inside list marker and normal text render identically: georgian</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>ა. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-georgian.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-georgian.html
new file mode 100644
index 00000000000..ef7615f6f52
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-georgian.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: georgian</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-georgian-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: georgian inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-greek-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-greek-ref.html
new file mode 100644
index 00000000000..f28db82b984
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-greek-ref.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<meta charset=utf8>
+<title>Reference: Inside list marker and normal text render identically: lower-greek</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>α. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-greek.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-greek.html
new file mode 100644
index 00000000000..96b5d811c26
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-greek.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: lower-greek</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-lower-greek-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: lower-greek inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-latin-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-latin-ref.html
new file mode 100644
index 00000000000..b86fe8ecf59
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-latin-ref.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: lower-latin</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>a. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-latin.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-latin.html
new file mode 100644
index 00000000000..0f6f24238b8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-latin.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: lower-latin</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-lower-latin-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: lower-latin inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-roman-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-roman-ref.html
new file mode 100644
index 00000000000..92dfa3d752f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-roman-ref.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: lower-roman</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>i. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-roman.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-roman.html
new file mode 100644
index 00000000000..db7301b3201
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-lower-roman.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: lower-roman</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-lower-roman-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: lower-roman inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-square-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-square-ref.html
new file mode 100644
index 00000000000..99b64a5424e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-square-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: square</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+p::before {
+ content: counter(test, square);
+}
+</style>
+<p> Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-square.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-square.html
new file mode 100644
index 00000000000..9095017b246
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-square.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: square</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-square-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: square inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-latin-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-latin-ref.html
new file mode 100644
index 00000000000..6cbb712e76b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-latin-ref.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: upper-latin</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>A. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-latin.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-latin.html
new file mode 100644
index 00000000000..903ef8f57dd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-latin.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: upper-latin</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-upper-latin-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: upper-latin inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-roman-ref.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-roman-ref.html
new file mode 100644
index 00000000000..6fca49f27c1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-roman-ref.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Reference: Inside list marker and normal text render identically: upper-roman</title>
+<style>
+* {
+ margin: 0;
+ padding: 0;
+}
+</style>
+<p>I. Filler Text
diff --git a/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-roman.html b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-roman.html
new file mode 100644
index 00000000000..69f34d74083
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-lists/content-property/marker-text-matches-upper-roman.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Inside list marker and normal text render identically: upper-roman</title>
+<link rel=help href="https://drafts.csswg.org/css-lists-3/#content-property">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=787382">
+<link rel=match href="marker-text-matches-upper-roman-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+}
+ol {
+ list-style: upper-roman inside;
+}
+</style>
+
+<ol>
+ <li>Filler Text</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-inherit-line-height-ref.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-inherit-line-height-ref.html
new file mode 100644
index 00000000000..fe57a281f9b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-inherit-line-height-ref.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<title>Reference: Check that :marker inherits line-height</title>
+<style>
+div {
+ font: 128px/1 Ahem;
+ border: 2px solid blue;
+ background: orange;
+ color: black;
+}
+</style>
+
+<p>There should be two black rectangles below with no space between them and
+ the border above/below.</p>
+<div>
+ 1. X
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-inherit-line-height.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-inherit-line-height.html
new file mode 100644
index 00000000000..145aedcb30c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-inherit-line-height.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<title>Check that :marker inherits line-height</title>
+<link rel=help href="https://drafts.csswg.org/css-pseudo-4/#tree-abiding">
+<link rel=help href="https://drafts.csswg.org/css-pseudo-4/#marker-pseudo">
+<link rel=help href="https://drafts.csswg.org/css-display-3/#list-items">
+<link rel=help href="https://bugzilla.mozilla.org/show_bug.cgi?id=1415759">
+<link rel=match href=marker-inherit-line-height-ref.html>
+<style>
+div {
+ font: 128px/1 Ahem;
+ border: 2px solid blue;
+ background: orange;
+ color: black;
+}
+ol {
+ margin: 0;
+ padding: 0;
+ list-style-position: inside;
+ list-style-type: decimal;
+}
+</style>
+
+<p>There should be two black rectangles below with no space between them and
+ the border above/below.</p>
+<div>
+ <ol>
+ <li>X
+ </ol>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-regions/idlharness.html b/tests/wpt/web-platform-tests/css/css-regions/idlharness.html
new file mode 100644
index 00000000000..7f56e18b379
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-regions/idlharness.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<title>css-regions IDL tests</title>
+<link rel="help" href="https://drafts.csswg.org/css-regions/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script>
+ 'use strict';
+
+ idl_test(
+ ['css-regions'],
+ ['cssom', 'dom'],
+ idl_array => {
+ idl_array.add_objects({
+ Document: ['document'],
+ })
+ },
+ 'css-regions interfaces'
+ );
+</script>
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
deleted file mode 100644
index 560ef63b2f9..00000000000
--- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!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/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
deleted file mode 100644
index 0e0300a72dc..00000000000
--- a/tests/wpt/web-platform-tests/css/css-text/word-break/reference/word-break-break-all-010-ref.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!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/word-break-break-all-010.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html
deleted file mode 100644
index 1ab97fb146a..00000000000
--- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!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
deleted file mode 100644
index ed07aeb7368..00000000000
--- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!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/encoding/idlharness.any.js b/tests/wpt/web-platform-tests/encoding/idlharness.any.js
index 25ec97a5784..14335ba2740 100644
--- a/tests/wpt/web-platform-tests/encoding/idlharness.any.js
+++ b/tests/wpt/web-platform-tests/encoding/idlharness.any.js
@@ -2,13 +2,14 @@
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
-promise_test(async() => {
- const text = await (await fetch('/interfaces/encoding.idl')).text();
- const idl_array = new IdlArray();
- idl_array.add_idls(text);
- idl_array.add_objects({
- TextEncoder: ['new TextEncoder()'],
- TextDecoder: ['new TextDecoder()']
- });
- idl_array.test();
-}, 'Encoding Standard IDL');
+idl_test(
+ ['encoding'],
+ [], // No deps
+ idl_array => {
+ idl_array.add_objects({
+ TextEncoder: ['new TextEncoder()'],
+ TextDecoder: ['new TextDecoder()']
+ });
+ },
+ 'Encoding Standard IDL'
+);
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/async-script.js b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/async-script.js
new file mode 100644
index 00000000000..3c0ee6d0234
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/async-script.js
@@ -0,0 +1 @@
+window.didExecuteExternalAsyncScript = true;
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/defer-script.js b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/defer-script.js
new file mode 100644
index 00000000000..8d248ee0d01
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/defer-script.js
@@ -0,0 +1 @@
+window.didExecuteExternalDeferredScript = true;
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/parser-blocking-script.js b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/parser-blocking-script.js
new file mode 100644
index 00000000000..c61efee8a0a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/parser-blocking-script.js
@@ -0,0 +1 @@
+window.didExecuteExternalParsingBlockingScript = true;
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/sync-script-test.js b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/sync-script-test.js
new file mode 100644
index 00000000000..65c1b21e6e8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/sync-script-test.js
@@ -0,0 +1,9 @@
+var t = async_test('Test behavior of sync-script feature policy for different script types');
+
+window.onload = t.step_func(function() {
+ assert_equals(undefined, window.didExecuteInlineParsingBlockingScript, 'inline parser blocking script should be blocked');
+ assert_equals(undefined, window.didExecuteExternalParsingBlockingScript, 'external parser blocking script should be blocked');
+ assert_true(window.didExecuteExternalAsyncScript, 'external async script should not be blocked');
+ assert_true(window.didExecuteExternalDeferredScript, 'external defer script should not be blocked');
+ t.done();
+});
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/sync-script.tentative.https.sub.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/sync-script.tentative.https.sub.html
new file mode 100644
index 00000000000..94f0dcf13fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/sync-script.tentative.https.sub.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<body>
+<script defer src="/resources/testharness.js"></script>
+<script defer src="/resources/testharnessreport.js"></script>
+<script>
+// The test harness scripts above are loaded as <script defer> because
+// they would be blocked if loaded synchronously.
+// Harness scripts should be evaluated before sync-script-test.js, so it
+// is also loaded as <script defer>
+//
+// The other scripts (both inline and external) are testing whether those
+// scripts are blocked or not.
+// sync-script-test.js asserts the results of the other scripts in onload
+// in order to guarantee that all scripts have either loaded or been blocked
+// before verifying the behavior.
+window.didExecuteInlineParsingBlockingScript = true;
+</script>
+<script src="/feature-policy/experimental-features/resources/parser-blocking-script.js"></script>
+<script async src="/feature-policy/experimental-features/resources/async-script.js"></script>
+<script defer src="/feature-policy/experimental-features/resources/defer-script.js"></script>
+<script defer src="/feature-policy/experimental-features/resources/sync-script-test.js"></script>
+</body>
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/sync-script.tentative.https.sub.html.headers b/tests/wpt/web-platform-tests/feature-policy/experimental-features/sync-script.tentative.https.sub.html.headers
new file mode 100644
index 00000000000..b468c8b1822
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/sync-script.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: sync-script 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-default-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-default-feature-policy.https.sub.html
index 94cec08f1d3..f47661bd7d5 100644
--- a/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-default-feature-policy.https.sub.html
+++ b/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-default-feature-policy.https.sub.html
@@ -26,7 +26,7 @@
async_test(t => {
test_feature_availability('picture-in-picture', t, cross_origin_src,
- expect_feature_available_default,);
+ expect_feature_available_default);
}, header + ' allows cross-origin iframes.');
</script>
diff --git a/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html
index 5080c806485..2f7576b16e1 100644
--- a/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html
+++ b/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html
@@ -26,7 +26,7 @@
async_test(t => {
test_feature_availability('picture-in-picture', t, cross_origin_src,
- expect_feature_unavailable_default,);
+ expect_feature_unavailable_default);
}, header + ' disallows cross-origin iframes.');
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/feature-policy/resources/picture-in-picture.js b/tests/wpt/web-platform-tests/feature-policy/resources/picture-in-picture.js
index 6bdb7e5e49f..e7aabcd5083 100644
--- a/tests/wpt/web-platform-tests/feature-policy/resources/picture-in-picture.js
+++ b/tests/wpt/web-platform-tests/feature-policy/resources/picture-in-picture.js
@@ -1,4 +1,7 @@
function isPictureInPictureAllowed() {
+ if (!('pictureInPictureEnabled' in document))
+ return Promise.resolve(false);
+
return new Promise(resolve => {
let video = document.createElement('video');
video.src = '/media/movie_5.ogv';
@@ -13,4 +16,4 @@ function isPictureInPictureAllowed() {
});
};
});
-} \ No newline at end of file
+}
diff --git a/tests/wpt/web-platform-tests/gamepad/idlharness-manual.html b/tests/wpt/web-platform-tests/gamepad/idlharness-manual.html
index 8bb740af724..c04b911cf24 100644
--- a/tests/wpt/web-platform-tests/gamepad/idlharness-manual.html
+++ b/tests/wpt/web-platform-tests/gamepad/idlharness-manual.html
@@ -7,26 +7,32 @@
<script src="/resources/idlharness.js"></script>
<p id="instructions">This test requires a gamepad. Connect one and press any button to start the test.</p>
<script>
-"use strict";
+'use strict';
-setup({explicit_timeout: true});
+idl_test(
+ ['gamepad'],
+ ['dom', 'html'],
+ (idl_array, t) => {
+ idl_array.add_objects({
+ Gamepad: ['gamepad'],
+ GamepadButton: ['gamepadButton'],
+ GamepadEvent: ['event'],
+ Navigator: ['navigator']
+ });
-promise_test(async t => {
- const eventWatcher = new EventWatcher(t, window, "gamepadconnected");
- let e = await eventWatcher.wait_for("gamepadconnected");
- const idl_array = new IdlArray();
- const gamepad_idl = await fetch("/interfaces/gamepad.idl").then(r => r.text());
+ const eventWatcher = new EventWatcher(t, window, "gamepadconnected");
+ const gamepadConnected = eventWatcher.wait_for("gamepadconnected")
+ .then(e => {
+ self.event = e;
+ self.gamepad = e.gamepad;
+ self.gamepadButton = e.gamepad.buttons[0];
+ });
- idl_array.add_untested_idls('interface Event {};');
- idl_array.add_untested_idls('interface Navigator {};');
- idl_array.add_idls(gamepad_idl);
-
- idl_array.add_objects({
- GamepadEvent: [e],
- Gamepad: [e.gamepad],
- GamepadButton: [e.gamepad.buttons[0]],
- Navigator: ["navigator"]
- });
- idl_array.test();
-}, "Test IDL implementation of Gamepad API");
+ const timeout = new Promise((_, reject) => {
+ t.step_timeout(() => { reject('Timed out waiting for gamepad'); }, 5000);
+ });
+ return Promise.race([gamepadConnected, timeout]);
+ },
+ 'Test IDL implementation of Gamepad API'
+);
</script>
diff --git a/tests/wpt/web-platform-tests/gamepad/idlharness.html b/tests/wpt/web-platform-tests/gamepad/idlharness.html
deleted file mode 100644
index 6a27e479f7a..00000000000
--- a/tests/wpt/web-platform-tests/gamepad/idlharness.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<title>Gamepad IDL tests</title>
-<link rel="help" href="https://w3c.github.io/gamepad/#gamepad-interface">
-<link rel="help" href="https://w3c.github.io/gamepad/#gamepadbutton-interface">
-<link rel="help" href="https://w3c.github.io/gamepad/#gamepadevent-interface">
-<link rel="help" href="https://w3c.github.io/gamepad/#navigator-interface-extension">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
- "use strict";
-
- promise_test(async () => {
- const srcs = ['gamepad', 'dom', 'html'];
- const [idl, dom, html] = await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- const idl_array = new IdlArray();
- idl_array.add_idls(idl);
- idl_array.add_dependency_idls(dom);
- idl_array.add_dependency_idls(html);
-
- idl_array.add_objects({
- GamepadEvent: [new GamepadEvent("something")],
- Navigator: ["navigator"]
- });
- idl_array.test();
- }, "Test IDL implementation of Gamepad API");
-</script>
diff --git a/tests/wpt/web-platform-tests/gamepad/idlharness.window.js b/tests/wpt/web-platform-tests/gamepad/idlharness.window.js
new file mode 100644
index 00000000000..e2c0e2b63e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/gamepad/idlharness.window.js
@@ -0,0 +1,18 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/gamepad/
+
+'use strict';
+
+idl_test(
+ ['gamepad'],
+ ['dom', 'html'],
+ idl_array => {
+ idl_array.add_objects({
+ GamepadEvent: ['new GamepadEvent("gamepad")'],
+ Navigator: ['navigator']
+ });
+ },
+ 'Test IDL implementation of Gamepad API'
+);
diff --git a/tests/wpt/web-platform-tests/geolocation-sensor/idlharness.https.html b/tests/wpt/web-platform-tests/geolocation-sensor/idlharness.https.html
deleted file mode 100644
index 75d29ebaa80..00000000000
--- a/tests/wpt/web-platform-tests/geolocation-sensor/idlharness.https.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Geolocation Sensor IDL tests</title>
-<link rel="help" href="https://wicg.github.io/geolocation-sensor/">
-<link rel="help" href="https://w3c.github.io/sensors/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-"use strict";
-
-function doTest([generic_sensor, geolocation_sensor]) {
- const idl_array = new IdlArray();
- idl_array.add_untested_idls('interface EventTarget {};');
- idl_array.add_untested_idls('interface EventHandler {};');
- idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
- idl_array.add_idls(geolocation_sensor);
- idl_array.add_objects({
- GeolocationSensor: ['new GeolocationSensor'],
- });
- idl_array.test();
-}
-
-function fetchText(url) {
- return fetch(url).then((response) => response.text());
-}
-
-promise_test(() => {
- return Promise.all([
- "/interfaces/sensors.idl",
- "/interfaces/geolocation-sensor.idl"
- ].map(fetchText)).then(doTest);
-}, "Test IDL implementation of Geolocation Sensor");
-</script>
diff --git a/tests/wpt/web-platform-tests/geolocation-sensor/idlharness.https.window.js b/tests/wpt/web-platform-tests/geolocation-sensor/idlharness.https.window.js
new file mode 100644
index 00000000000..eb3da34f672
--- /dev/null
+++ b/tests/wpt/web-platform-tests/geolocation-sensor/idlharness.https.window.js
@@ -0,0 +1,17 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://wicg.github.io/geolocation-sensor/
+
+'use strict';
+
+idl_test(
+ ['geolocation-sensor'],
+ ['generic-sensor', 'dom'],
+ idl_array => {
+ idl_array.add_objects({
+ GeolocationSensor: ['new GeolocationSensor'],
+ });
+ },
+ 'Test IDL implementation of Geolocation Sensor'
+);
diff --git a/tests/wpt/web-platform-tests/gyroscope/idlharness.https.html b/tests/wpt/web-platform-tests/gyroscope/idlharness.https.html
deleted file mode 100644
index 4b3ed48a073..00000000000
--- a/tests/wpt/web-platform-tests/gyroscope/idlharness.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Gyroscope Sensor IDL tests</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://w3c.github.io/gyroscope/">
-<link rel="help" href="https://w3c.github.io/sensors/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-"use strict";
-
-function doTest([dom, generic_sensor, gyroscope]) {
- const idl_array = new IdlArray();
- idl_array.add_untested_idls(dom);
- idl_array.add_untested_idls('interface EventHandler {};');
- idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
- idl_array.add_idls(gyroscope);
- idl_array.add_objects({
- Gyroscope: ['new Gyroscope();']
- });
- idl_array.test();
-}
-
-function fetchText(url) {
- return fetch(url).then((response) => response.text());
-}
-
-promise_test(() => {
- return Promise.all([
- "/interfaces/dom.idl",
- "/interfaces/sensors.idl",
- "/interfaces/gyroscope.idl",
- ].map(fetchText)).then(doTest);
-}, "Test IDL implementation of Gyroscope Sensor");
-</script>
diff --git a/tests/wpt/web-platform-tests/gyroscope/idlharness.https.window.js b/tests/wpt/web-platform-tests/gyroscope/idlharness.https.window.js
new file mode 100644
index 00000000000..dfdac4e1f30
--- /dev/null
+++ b/tests/wpt/web-platform-tests/gyroscope/idlharness.https.window.js
@@ -0,0 +1,17 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/gyroscope/
+
+'use strict';
+
+idl_test(
+ ['gyroscope'],
+ ['generic-sensor', 'dom'],
+ idl_array => {
+ idl_array.add_objects({
+ Gyroscope: ['new Gyroscope();']
+ });
+ },
+ 'Test IDL implementation of Gyroscope Sensor'
+);
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html
new file mode 100644
index 00000000000..be680da619e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<meta name="timeout" content="long">
+<title>HTMLImageElement.prototype.decode(), attach to DOM before promise resolves.</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel=help href="https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body></body>
+
+<script>
+"use strict";
+
+promise_test(function() {
+ const img = new Image();
+ img.src = "/images/green.png";
+ const promise = img.decode().then(function(arg) {
+ assert_equals(arg, undefined);
+ });
+ // Don't wait for the promise to resolve before attaching the image.
+ // The promise should still resolve successfully.
+ document.body.appendChild(img);
+ return promise;
+}, document.title);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-maxlength.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-maxlength.html
new file mode 100644
index 00000000000..ff4e8f1b65c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-maxlength.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <title>textarea maxlength</title>
+ <link rel="author" title="tigercosmos" href="mailto:phy.tiger@gmail.com">
+ <link rel=help href="https://html.spec.whatwg.org/multipage/#attr-textarea-maxlength">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+
+<body>
+
+ <textarea id="none"></textarea>
+ <textarea id="negative" maxlength="-5"></textarea>
+ <textarea id="non-numeric" maxlength="not-a-number"></textarea>
+ <textarea id="assign-negative"></textarea>
+ <textarea id="assign-non-numeric"></textarea>
+
+ <script>
+ test(
+ function () {
+ assert_equals(document.getElementById("none").maxLength, -1);
+ }, "Unset maxlength is -1");
+
+ test(
+ function () {
+ assert_equals(document.getElementById("negative").maxLength, -1);
+ }, "Negative maxlength is always -1");
+
+ test(
+ function () {
+ assert_equals(document.getElementById("non-numeric").maxLength, -1);
+ }, "Non-numeric maxlength is -1");
+
+ test(
+ function () {
+ assert_throws("INDEX_SIZE_ERR", function () {
+ document.getElementById("assign-negative").maxLength = -5;
+ });
+ }, "Assigning negative integer throws IndexSizeError");
+
+ test(
+ function () {
+ document.getElementById("assign-non-numeric").maxLength = "not-a-number";
+ assert_equals(document.getElementById("assign-non-numeric").maxLength, 0);
+ }, "Assigning non-numeric to maxlength sets maxlength to 0");
+ </script>
+</body>
+
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-minlength.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-minlength.html
new file mode 100644
index 00000000000..9a15a129392
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-minlength.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <title>textarea minlength</title>
+ <link rel="author" title="tigercosmos" href="mailto:phy.tiger@gmail.com">
+ <link rel=help href="https://html.spec.whatwg.org/multipage/#attr-textarea-minlength">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+
+<body>
+
+ <textarea id="none"></textarea>
+ <textarea id="negative" minlength=-5></textarea>
+ <textarea id="non-numeric" minlength="not-a-number"></textarea>
+ <textarea id="assign-negative"></textarea>
+ <textarea id="assign-non-numeric"></textarea>
+
+ <script>
+ test(
+ function () {
+ assert_equals(document.getElementById("none").minLength, -1);
+ }, "Unset minlength is -1");
+
+ test(
+ function () {
+ assert_equals(document.getElementById("negative").minLength, -1);
+ }, "Negative minlength is always -1");
+
+ test(
+ function () {
+ assert_equals(document.getElementById("non-numeric").minLength, -1);
+ }, "Non-numeric minlength is -1");
+
+ test(
+ function () {
+ assert_throws("INDEX_SIZE_ERR", function () {
+ document.getElementById("assign-negative").minLength = -5;
+ });
+ }, "Assigning negative integer throws IndexSizeError");
+
+ test(
+ function () {
+ document.getElementById("assign-non-numeric").minLength = "not-a-number";
+ assert_equals(document.getElementById("assign-non-numeric").minLength, 0);
+ }, "Assigning non-numeric to minlength sets minlength to 0");
+ </script>
+</body>
+
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-textLength.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-textLength.html
new file mode 100644
index 00000000000..d249278960e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-textLength.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<title>The textLengh IDL attribute</title>
+<meta content="charset=utf-16">
+<link rel="author" title="tigercosmos" href="mailto:phy.tiger@gmail.com">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-textarea-textlength">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<textarea id="textarea"></textarea>
+<script>
+ var textarea = document.getElementById("textarea");
+
+ test(function () {
+ textarea.value= "Hello, World!";
+ assert_equals(textarea.textLength, 13);
+
+ textarea.value = "\u4f60\u597d\uff0c\u4e16\u754c\uff01"; //你好,世界!
+ assert_equals(textarea.textLength, 6);
+ }, "Textarea's 'testLength' should work for utf-16.");
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-validity-clone.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-validity-clone.html
new file mode 100644
index 00000000000..23d90e714b2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/textarea-validity-clone.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>HTML Test: &lt;textarea&gt; validity state is correct after a clone</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-textarea-element">
+<link rel="help" href="https://bugzil.la/1472169">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(function() {
+ let form = document.createElement("form");
+ let textarea = document.createElement("textarea");
+ textarea.required = true;
+
+ textarea.appendChild(document.createTextNode("A"));
+ form.appendChild(textarea);
+
+ assert_true(textarea.validity.valid);
+
+ let formClone = form.cloneNode(true);
+ assert_equals(
+ formClone.querySelector('textarea').validity.valid,
+ textarea.validity.valid,
+ "Validity state should be preserved after a clone"
+ );
+}, "<textarea> validity state should be preserved after a clone");
+</script>
diff --git a/tests/wpt/web-platform-tests/interfaces/background-fetch.idl b/tests/wpt/web-platform-tests/interfaces/background-fetch.idl
index 68509fc1a68..fc3ed8dad35 100644
--- a/tests/wpt/web-platform-tests/interfaces/background-fetch.idl
+++ b/tests/wpt/web-platform-tests/interfaces/background-fetch.idl
@@ -18,7 +18,7 @@ partial interface ServiceWorkerRegistration {
interface BackgroundFetchManager {
Promise<BackgroundFetchRegistration> fetch(DOMString id, (RequestInfo or sequence<RequestInfo>) requests, optional BackgroundFetchOptions options);
Promise<BackgroundFetchRegistration?> get(DOMString id);
- Promise<FrozenArray<DOMString>> getIds();
+ Promise<sequence<DOMString>> getIds();
// TODO: in future this should become an async iterator for BackgroundFetchRegistration objects
};
@@ -51,14 +51,10 @@ interface BackgroundFetchRegistration : EventTarget {
};
[Exposed=(Window,Worker)]
-interface BackgroundFetchFetch {
- readonly attribute Request request;
-};
-
-[Exposed=(Window,Worker)]
interface BackgroundFetchActiveFetches {
- Promise<BackgroundFetchActiveFetch> match(RequestInfo request);
- Promise<FrozenArray<BackgroundFetchActiveFetch>> values();
+ Promise<BackgroundFetchActiveFetch> match(RequestInfo request, optional CacheQueryOptions options);
+ Promise<sequence<BackgroundFetchActiveFetch>> matchAll(RequestInfo request, optional CacheQueryOptions options);
+ Promise<sequence<BackgroundFetchActiveFetch>> values();
};
[Exposed=(Window,Worker)]
@@ -67,6 +63,11 @@ interface BackgroundFetchActiveFetch : BackgroundFetchFetch {
// In future this will include a fetch observer
};
+[Exposed=(Window,Worker)]
+interface BackgroundFetchFetch {
+ readonly attribute Request request;
+};
+
[Constructor(DOMString type, BackgroundFetchEventInit init), Exposed=ServiceWorker]
interface BackgroundFetchEvent : ExtendableEvent {
readonly attribute DOMString id;
@@ -87,8 +88,9 @@ dictionary BackgroundFetchSettledEventInit : BackgroundFetchEventInit {
[Exposed=ServiceWorker]
interface BackgroundFetchSettledFetches {
- Promise<BackgroundFetchSettledFetch> match(RequestInfo request);
- Promise<FrozenArray<BackgroundFetchSettledFetch>> values();
+ Promise<BackgroundFetchSettledFetch> match(RequestInfo request, optional CacheQueryOptions options);
+ Promise<sequence<BackgroundFetchSettledFetch>> matchAll(RequestInfo request, optional CacheQueryOptions options);
+ Promise<sequence<BackgroundFetchSettledFetch>> values();
};
[Exposed=ServiceWorker]
diff --git a/tests/wpt/web-platform-tests/interfaces/battery-status.idl b/tests/wpt/web-platform-tests/interfaces/battery-status.idl
new file mode 100644
index 00000000000..1491d6429c5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/interfaces/battery-status.idl
@@ -0,0 +1,19 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "Battery Status API" spec.
+// See: https://w3c.github.io/battery/
+
+partial interface Navigator {
+ Promise<BatteryManager> getBattery();
+};
+[Exposed=Window]
+interface BatteryManager : EventTarget {
+ readonly attribute boolean charging;
+ readonly attribute unrestricted double chargingTime;
+ readonly attribute unrestricted double dischargingTime;
+ readonly attribute double level;
+ attribute EventHandler onchargingchange;
+ attribute EventHandler onchargingtimechange;
+ attribute EventHandler ondischargingtimechange;
+ attribute EventHandler onlevelchange;
+};
diff --git a/tests/wpt/web-platform-tests/interfaces/battery.idl b/tests/wpt/web-platform-tests/interfaces/battery.idl
deleted file mode 100644
index 2596a6ebe53..00000000000
--- a/tests/wpt/web-platform-tests/interfaces/battery.idl
+++ /dev/null
@@ -1,19 +0,0 @@
-// GENERATED CONTENT - DO NOT EDIT
-// Content of this file was automatically extracted from the Battery Status API spec.
-// See https://w3c.github.io/battery/
-
-partial interface Navigator {
- Promise<BatteryManager> getBattery();
-};
-
-[Exposed=Window]
-interface BatteryManager : EventTarget {
- readonly attribute boolean charging;
- readonly attribute unrestricted double chargingTime;
- readonly attribute unrestricted double dischargingTime;
- readonly attribute double level;
- attribute EventHandler onchargingchange;
- attribute EventHandler onchargingtimechange;
- attribute EventHandler ondischargingtimechange;
- attribute EventHandler onlevelchange;
-};
diff --git a/tests/wpt/web-platform-tests/interfaces/css-counter-styles.idl b/tests/wpt/web-platform-tests/interfaces/css-counter-styles.idl
new file mode 100644
index 00000000000..b1c36639bdc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/interfaces/css-counter-styles.idl
@@ -0,0 +1,23 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "CSS Counter Styles Level 3" spec.
+// See: https://drafts.csswg.org/css-counter-styles/
+
+partial interface CSSRule {
+ const unsigned short COUNTER_STYLE_RULE = 11;
+};
+
+[Exposed=Window]
+interface CSSCounterStyleRule : CSSRule {
+ attribute CSSOMString name;
+ attribute CSSOMString system;
+ attribute CSSOMString symbols;
+ attribute CSSOMString additiveSymbols;
+ attribute CSSOMString negative;
+ attribute CSSOMString prefix;
+ attribute CSSOMString suffix;
+ attribute CSSOMString range;
+ attribute CSSOMString pad;
+ attribute CSSOMString speakAs;
+ attribute CSSOMString fallback;
+};
diff --git a/tests/wpt/web-platform-tests/interfaces/css-regions.idl b/tests/wpt/web-platform-tests/interfaces/css-regions.idl
new file mode 100644
index 00000000000..546c21ad376
--- /dev/null
+++ b/tests/wpt/web-platform-tests/interfaces/css-regions.idl
@@ -0,0 +1,35 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "CSS Regions Module Level 1" spec.
+// See: https://drafts.csswg.org/css-regions/
+
+partial interface Document {
+ readonly attribute NamedFlowMap namedFlows;
+};
+
+[Exposed=Window,
+ MapClass=(CSSOMString, NamedFlow)] interface NamedFlowMap {
+ NamedFlow? get(CSSOMString flowName);
+ boolean has(CSSOMString flowName);
+ NamedFlowMap set(CSSOMString flowName, NamedFlow flowValue);
+ boolean delete(CSSOMString flowName);
+};
+
+[Exposed=Window]
+interface NamedFlow : EventTarget {
+ readonly attribute CSSOMString name;
+ readonly attribute boolean overset;
+ sequence<Region> getRegions();
+ readonly attribute short firstEmptyRegionIndex;
+ sequence<Node> getContent();
+ sequence<Region> getRegionsByContent(Node node);
+};
+
+[Exposed=Window,
+ NoInterfaceObject]
+interface Region {
+ readonly attribute CSSOMString regionOverset;
+ sequence<Range>? getRegionFlowRanges();
+};
+
+Element implements Region;
diff --git a/tests/wpt/web-platform-tests/interfaces/geolocation-API.idl b/tests/wpt/web-platform-tests/interfaces/geolocation-API.idl
index 2972539e03b..c36fb8b8b03 100644
--- a/tests/wpt/web-platform-tests/interfaces/geolocation-API.idl
+++ b/tests/wpt/web-platform-tests/interfaces/geolocation-API.idl
@@ -7,9 +7,9 @@ partial interface Navigator {
readonly attribute Geolocation geolocation;
};
-
- [NoInterfaceObject]
+[NoInterfaceObject]
interface Geolocation {
+
void getCurrentPosition(PositionCallback successCallback,
optional PositionErrorCallback errorCallback,
optional PositionOptions options);
@@ -25,20 +25,19 @@ partial interface Navigator {
callback PositionErrorCallback = void (PositionError positionError);
- dictionary PositionOptions {
+dictionary PositionOptions {
boolean enableHighAccuracy = false;
[Clamp] unsigned long timeout = 0xFFFFFFFF;
[Clamp] unsigned long maximumAge = 0;
};
-
- [NoInterfaceObject]
+[NoInterfaceObject]
interface Position {
readonly attribute Coordinates coords;
readonly attribute DOMTimeStamp timestamp;
};
- [NoInterfaceObject]
+[NoInterfaceObject]
interface Coordinates {
readonly attribute double latitude;
readonly attribute double longitude;
@@ -49,7 +48,7 @@ partial interface Navigator {
readonly attribute double? speed;
};
- [NoInterfaceObject]
+[NoInterfaceObject]
interface PositionError {
const unsigned short PERMISSION_DENIED = 1;
const unsigned short POSITION_UNAVAILABLE = 2;
diff --git a/tests/wpt/web-platform-tests/media-source/interfaces.html b/tests/wpt/web-platform-tests/interfaces/media-source.idl
index 13e31489dd2..6476794ede0 100644
--- a/tests/wpt/web-platform-tests/media-source/interfaces.html
+++ b/tests/wpt/web-platform-tests/interfaces/media-source.idl
@@ -1,30 +1,17 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>Media Source Extensions IDL tests</title>
-<div id=log></div>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/resources/WebIDLParser.js></script>
-<script src=/resources/idlharness.js></script>
-<script type=text/plain class=untested>
-interface EventTarget {
- void addEventListener(DOMString type, EventListener? callback, optional boolean capture /* = false */);
- void removeEventListener(DOMString type, EventListener? callback, optional boolean capture /* = false */);
- boolean dispatchEvent(Event event);
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "Media Source Extensions™" spec.
+// See: https://w3c.github.io/media-source/
+
+enum ReadyState {
+ "closed",
+ "open",
+ "ended"
+};
+enum EndOfStreamError {
+ "network",
+ "decode"
};
-interface EventHandler {};
-interface URL {};
-interface HTMLVideoElement {};
-interface AudioTrack {};
-interface AudioTrackList {};
-interface VideoTrack {};
-interface VideoTrackList {};
-interface TextTrack {};
-interface TextTrackList {};
-interface TimeRanges {};
-typedef double DOMHighResTimeStamp;
-</script>
-<script type=text/plain>
[Constructor]
interface MediaSource : EventTarget {
readonly attribute SourceBufferList sourceBuffers;
@@ -41,7 +28,10 @@ interface MediaSource : EventTarget {
void clearLiveSeekableRange();
static boolean isTypeSupported(DOMString type);
};
-
+enum AppendMode {
+ "segments",
+ "sequence"
+};
interface SourceBuffer : EventTarget {
attribute AppendMode mode;
readonly attribute boolean updating;
@@ -59,86 +49,24 @@ interface SourceBuffer : EventTarget {
attribute EventHandler onabort;
void appendBuffer(BufferSource data);
void abort();
- void changeType(DOMString type);
void remove(double start, unrestricted double end);
};
-
interface SourceBufferList : EventTarget {
readonly attribute unsigned long length;
attribute EventHandler onaddsourcebuffer;
attribute EventHandler onremovesourcebuffer;
getter SourceBuffer (unsigned long index);
};
-
-[Exposed=Window,DedicatedWorker,SharedWorker]
+[Exposed=Window]
partial interface URL {
static DOMString createObjectURL(MediaSource mediaSource);
};
-
partial interface AudioTrack {
readonly attribute SourceBuffer? sourceBuffer;
};
-
partial interface VideoTrack {
readonly attribute SourceBuffer? sourceBuffer;
};
-
partial interface TextTrack {
readonly attribute SourceBuffer? sourceBuffer;
};
-
-enum EndOfStreamError {
- "network",
- "decode"
-};
-
-enum AppendMode {
- "segments",
- "sequence"
-};
-
-enum ReadyState {
- "closed",
- "open",
- "ended"
-};
-</script>
-<script>
-"use strict";
-setup({ explicit_done: true });
-var mediaSource;
-var sourceBuffer;
-var video = document.createElement("video");
-var idlCheck = function() {
- var idlArray = new IdlArray();
- [].forEach.call(document.querySelectorAll("script[type=text\\/plain]"), function(node) {
- if (node.className == "untested") {
- idlArray.add_untested_idls(node.textContent);
- } else {
- idlArray.add_idls(node.textContent);
- }
- });
- idlArray.add_objects({
- MediaSource: ['mediaSource'],
- SourceBuffer: ['sourceBuffer'],
- SourceBufferList: ['mediaSource.sourceBuffers']
- });
- idlArray.test();
- done();
-}
-mediaSource = new MediaSource();
-video.src = URL.createObjectURL(mediaSource);
-mediaSource.addEventListener("sourceopen", function () {
- var defaultType ='video/webm;codecs="vp8,vorbis"';
- if (MediaSource.isTypeSupported(defaultType)) {
- sourceBuffer = mediaSource.addSourceBuffer(defaultType);
- } else {
- sourceBuffer = mediaSource.addSourceBuffer('video/mp4');
- }
- sourceBuffer.addEventListener("updateend", function (e) {
- mediaSource.endOfStream();
- idlCheck();
- });
- sourceBuffer.appendBuffer(new ArrayBuffer());
-});
-</script>
diff --git a/tests/wpt/web-platform-tests/interfaces/netinfo.idl b/tests/wpt/web-platform-tests/interfaces/netinfo.idl
index 75edd350968..3e6212c3712 100644
--- a/tests/wpt/web-platform-tests/interfaces/netinfo.idl
+++ b/tests/wpt/web-platform-tests/interfaces/netinfo.idl
@@ -4,42 +4,39 @@
// See: https://wicg.github.io/netinfo/
enum ConnectionType {
- "bluetooth",
- "cellular",
- "ethernet",
- "mixed",
- "none",
- "other",
- "unknown",
- "wifi",
- "wimax"
+ "bluetooth",
+ "cellular",
+ "ethernet",
+ "mixed",
+ "none",
+ "other",
+ "unknown",
+ "wifi",
+ "wimax"
};
+
enum EffectiveConnectionType {
- "2g",
- "3g",
- "4g",
- "slow-2g"
+ "2g",
+ "3g",
+ "4g",
+ "slow-2g"
};
-[NoInterfaceObject,
- Exposed=(Window,Worker)]
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
interface NavigatorNetworkInformation {
- readonly attribute NetworkInformation connection;
+ readonly attribute NetworkInformation connection;
};
Navigator implements NavigatorNetworkInformation;
-
WorkerNavigator implements NavigatorNetworkInformation;
+
[Exposed=(Window,Worker)]
interface NetworkInformation : EventTarget {
- readonly attribute ConnectionType type;
- readonly attribute EffectiveConnectionType effectiveType;
- readonly attribute Megabit downlinkMax;
- readonly attribute Megabit downlink;
- readonly attribute Millisecond rtt;
- readonly attribute boolean saveData;
- attribute EventHandler onchange;
-};
-
-typedef unrestricted double Megabit;
-
-typedef unsigned long long Millisecond;
+ readonly attribute ConnectionType type;
+ readonly attribute EffectiveConnectionType effectiveType;
+ readonly attribute Megabit downlinkMax;
+ readonly attribute Megabit downlink;
+ readonly attribute Millisecond rtt;
+ readonly attribute boolean saveData;
+ attribute EventHandler onchange;
+};typedef unrestricted double Megabit;typedef unsigned long long Millisecond;
diff --git a/tests/wpt/web-platform-tests/interfaces/payment-request.idl b/tests/wpt/web-platform-tests/interfaces/payment-request.idl
index 6e42524cf0c..1018ecc93e7 100644
--- a/tests/wpt/web-platform-tests/interfaces/payment-request.idl
+++ b/tests/wpt/web-platform-tests/interfaces/payment-request.idl
@@ -166,7 +166,7 @@ interface PaymentResponse : EventTarget {
dictionary PaymentValidationErrors {
PayerErrorFields payer;
- AddressErrorFields shippingAddress;
+ AddressErrors shippingAddress;
};
dictionary PayerErrorFields {
diff --git a/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl b/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl
index cafcae11df7..78a5ae781b1 100644
--- a/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl
+++ b/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl
@@ -22,7 +22,7 @@ partial interface DocumentOrShadowRoot {
readonly attribute Element? pictureInPictureElement;
};
-interface PictureInPictureWindow {
+interface PictureInPictureWindow : EventTarget {
readonly attribute long width;
readonly attribute long height;
diff --git a/tests/wpt/web-platform-tests/interfaces/pointerevents-extension.idl b/tests/wpt/web-platform-tests/interfaces/pointerevents-extension.idl
index 63a05a58dd6..f4f2de38d0f 100644
--- a/tests/wpt/web-platform-tests/interfaces/pointerevents-extension.idl
+++ b/tests/wpt/web-platform-tests/interfaces/pointerevents-extension.idl
@@ -1,8 +1,14 @@
-dictionary PointerEventInit : MouseEventInit {
- sequence<PointerEvent> coalescedEvents;
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "PointerEvents - Level 2 - Extensions" spec.
+// See: https://w3c.github.io/pointerevents/extension.html
+
+partial dictionary PointerEventInit {
+ sequence<PointerEvent> coalescedEvents = [];
+ sequence<PointerEvent> predictedEvents = [];
};
-[Constructor(DOMString type, optional PointerEventInit eventInitDict)]
-interface PointerEvent : MouseEvent {
+partial interface PointerEvent {
sequence<PointerEvent> getCoalescedEvents();
+ sequence<PointerEvent> getPredictedEvents();
};
diff --git a/tests/wpt/web-platform-tests/interfaces/requestidlecallback.idl b/tests/wpt/web-platform-tests/interfaces/requestidlecallback.idl
index 195f3767d5f..614478155fa 100644
--- a/tests/wpt/web-platform-tests/interfaces/requestidlecallback.idl
+++ b/tests/wpt/web-platform-tests/interfaces/requestidlecallback.idl
@@ -4,19 +4,17 @@
// See: https://w3c.github.io/requestidlecallback/
partial interface Window {
- unsigned long requestIdleCallback(IdleRequestCallback callback,
- optional IdleRequestOptions options);
- void cancelIdleCallback(unsigned long handle);
+ unsigned long requestIdleCallback(IdleRequestCallback callback, optional IdleRequestOptions options);
+ void cancelIdleCallback(unsigned long handle);
};
dictionary IdleRequestOptions {
- unsigned long timeout;
+ unsigned long timeout;
};
-[Exposed=Window]
-interface IdleDeadline {
- DOMHighResTimeStamp timeRemaining();
- readonly attribute boolean didTimeout;
+[Exposed=Window] interface IdleDeadline {
+ DOMHighResTimeStamp timeRemaining();
+ readonly attribute boolean didTimeout;
};
callback IdleRequestCallback = void (IdleDeadline deadline);
diff --git a/tests/wpt/web-platform-tests/interfaces/resource-timing.idl b/tests/wpt/web-platform-tests/interfaces/resource-timing.idl
index 3f041e158e7..2668f912301 100644
--- a/tests/wpt/web-platform-tests/interfaces/resource-timing.idl
+++ b/tests/wpt/web-platform-tests/interfaces/resource-timing.idl
@@ -5,27 +5,28 @@
[Exposed=(Window,Worker)]
interface PerformanceResourceTiming : PerformanceEntry {
- readonly attribute DOMString initiatorType;
- readonly attribute DOMString nextHopProtocol;
- readonly attribute DOMHighResTimeStamp workerStart;
- readonly attribute DOMHighResTimeStamp redirectStart;
- readonly attribute DOMHighResTimeStamp redirectEnd;
- readonly attribute DOMHighResTimeStamp fetchStart;
- readonly attribute DOMHighResTimeStamp domainLookupStart;
- readonly attribute DOMHighResTimeStamp domainLookupEnd;
- readonly attribute DOMHighResTimeStamp connectStart;
- readonly attribute DOMHighResTimeStamp connectEnd;
- readonly attribute DOMHighResTimeStamp secureConnectionStart;
- readonly attribute DOMHighResTimeStamp requestStart;
- readonly attribute DOMHighResTimeStamp responseStart;
- readonly attribute DOMHighResTimeStamp responseEnd;
- readonly attribute unsigned long long transferSize;
- readonly attribute unsigned long long encodedBodySize;
- readonly attribute unsigned long long decodedBodySize;
+ readonly attribute DOMString initiatorType;
+ readonly attribute DOMString nextHopProtocol;
+ readonly attribute DOMHighResTimeStamp workerStart;
+ readonly attribute DOMHighResTimeStamp redirectStart;
+ readonly attribute DOMHighResTimeStamp redirectEnd;
+ readonly attribute DOMHighResTimeStamp fetchStart;
+ readonly attribute DOMHighResTimeStamp domainLookupStart;
+ readonly attribute DOMHighResTimeStamp domainLookupEnd;
+ readonly attribute DOMHighResTimeStamp connectStart;
+ readonly attribute DOMHighResTimeStamp connectEnd;
+ readonly attribute DOMHighResTimeStamp secureConnectionStart;
+ readonly attribute DOMHighResTimeStamp requestStart;
+ readonly attribute DOMHighResTimeStamp responseStart;
+ readonly attribute DOMHighResTimeStamp responseEnd;
+ readonly attribute unsigned long long transferSize;
+ readonly attribute unsigned long long encodedBodySize;
+ readonly attribute unsigned long long decodedBodySize;
[Default] object toJSON();
};
+
partial interface Performance {
- void clearResourceTimings();
- void setResourceTimingBufferSize(unsigned long maxSize);
- attribute EventHandler onresourcetimingbufferfull;
+ void clearResourceTimings();
+ void setResourceTimingBufferSize(unsigned long maxSize);
+ attribute EventHandler onresourcetimingbufferfull;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/selection-api.idl b/tests/wpt/web-platform-tests/interfaces/selection-api.idl
index b2d2f86885a..6e814ea149e 100644
--- a/tests/wpt/web-platform-tests/interfaces/selection-api.idl
+++ b/tests/wpt/web-platform-tests/interfaces/selection-api.idl
@@ -4,42 +4,40 @@
// See: https://w3c.github.io/selection-api/
interface Selection {
- readonly attribute Node? anchorNode;
- readonly attribute unsigned long anchorOffset;
- readonly attribute Node? focusNode;
- readonly attribute unsigned long focusOffset;
- readonly attribute boolean isCollapsed;
- readonly attribute unsigned long rangeCount;
- readonly attribute DOMString type;
- Range getRangeAt(unsigned long index);
- void addRange(Range range);
- void removeRange(Range range);
- void removeAllRanges();
- void empty();
- void collapse(Node? node,
- optional unsigned long offset = 0);
- void setPosition(Node? node,
- optional unsigned long offset = 0);
- void collapseToStart();
- void collapseToEnd();
- void extend(Node node, optional unsigned long offset = 0);
- void setBaseAndExtent(Node anchorNode,
- unsigned long anchorOffset,
- Node focusNode,
- unsigned long focusOffset);
- void selectAllChildren(Node node);
- [CEReactions] void deleteFromDocument();
- boolean containsNode(Node node,
- optional boolean allowPartialContainment = false);
- stringifier DOMString ();
+ readonly attribute Node? anchorNode;
+ readonly attribute unsigned long anchorOffset;
+ readonly attribute Node? focusNode;
+ readonly attribute unsigned long focusOffset;
+ readonly attribute boolean isCollapsed;
+ readonly attribute unsigned long rangeCount;
+ readonly attribute DOMString type;
+ Range getRangeAt(unsigned long index);
+ void addRange(Range range);
+ void removeRange(Range range);
+ void removeAllRanges();
+ void empty();
+ void collapse(Node? node, optional unsigned long offset = 0);
+ void setPosition(Node? node, optional unsigned long offset = 0);
+ void collapseToStart();
+ void collapseToEnd();
+ void extend(Node node, optional unsigned long offset = 0);
+ void setBaseAndExtent(Node anchorNode, unsigned long anchorOffset, Node focusNode, unsigned long focusOffset);
+ void selectAllChildren(Node node);
+ [CEReactions]
+ void deleteFromDocument();
+ boolean containsNode(Node node, optional boolean allowPartialContainment = false);
+ stringifier DOMString ();
};
+
partial interface Document {
- Selection? getSelection();
+ Selection? getSelection();
};
+
partial interface Window {
- Selection? getSelection();
+ Selection? getSelection();
};
+
partial interface GlobalEventHandlers {
- attribute EventHandler onselectstart;
- attribute EventHandler onselectionchange;
+ attribute EventHandler onselectstart;
+ attribute EventHandler onselectionchange;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/touch-events.idl b/tests/wpt/web-platform-tests/interfaces/touch-events.idl
index 5c5a3ef82e8..097b0e9ac9e 100644
--- a/tests/wpt/web-platform-tests/interfaces/touch-events.idl
+++ b/tests/wpt/web-platform-tests/interfaces/touch-events.idl
@@ -9,78 +9,74 @@ enum TouchType {
};
dictionary TouchInit {
- required long identifier;
+ required long identifier;
required EventTarget target;
- double clientX = 0;
- double clientY = 0;
- double screenX = 0;
- double screenY = 0;
- double pageX = 0;
- double pageY = 0;
- float radiusX = 0;
- float radiusY = 0;
- float rotationAngle = 0;
- float force = 0;
- double altitudeAngle = 0;
- double azimuthAngle = 0;
- TouchType touchType = "direct";
+ double clientX = 0;
+ double clientY = 0;
+ double screenX = 0;
+ double screenY = 0;
+ double pageX = 0;
+ double pageY = 0;
+ float radiusX = 0;
+ float radiusY = 0;
+ float rotationAngle = 0;
+ float force = 0;
+ double altitudeAngle = 0;
+ double azimuthAngle = 0;
+ TouchType touchType = "direct";
};
-[Constructor(TouchInit touchInitDict),
- Exposed=Window]
+[Constructor(TouchInit touchInitDict), Exposed=Window]
interface Touch {
- readonly attribute long identifier;
- readonly attribute EventTarget target;
- readonly attribute double screenX;
- readonly attribute double screenY;
- readonly attribute double clientX;
- readonly attribute double clientY;
- readonly attribute double pageX;
- readonly attribute double pageY;
- readonly attribute float radiusX;
- readonly attribute float radiusY;
- readonly attribute float rotationAngle;
- readonly attribute float force;
- readonly attribute float altitudeAngle;
- readonly attribute float azimuthAngle;
- readonly attribute TouchType touchType;
+ readonly attribute long identifier;
+ readonly attribute EventTarget target;
+ readonly attribute double screenX;
+ readonly attribute double screenY;
+ readonly attribute double clientX;
+ readonly attribute double clientY;
+ readonly attribute double pageX;
+ readonly attribute double pageY;
+ readonly attribute float radiusX;
+ readonly attribute float radiusY;
+ readonly attribute float rotationAngle;
+ readonly attribute float force;
+ readonly attribute float altitudeAngle;
+ readonly attribute float azimuthAngle;
+ readonly attribute TouchType touchType;
};
+
interface TouchList {
- readonly attribute unsigned long length;
+ readonly attribute unsigned long length;
getter Touch? item(unsigned long index);
};
+
dictionary TouchEventInit : EventModifierInit {
- sequence<Touch> touches = [];
- sequence<Touch> targetTouches = [];
- sequence<Touch> changedTouches = [];
+ sequence<Touch> touches = [];
+ sequence<Touch> targetTouches = [];
+ sequence<Touch> changedTouches = [];
};
-[Constructor(DOMString type, optional TouchEventInit eventInitDict),
- Exposed=Window]
+[Constructor(DOMString type, optional TouchEventInit eventInitDict), Exposed=Window]
interface TouchEvent : UIEvent {
- readonly attribute TouchList touches;
- readonly attribute TouchList targetTouches;
- readonly attribute TouchList changedTouches;
- readonly attribute boolean altKey;
- readonly attribute boolean metaKey;
- readonly attribute boolean ctrlKey;
- readonly attribute boolean shiftKey;
+ readonly attribute TouchList touches;
+ readonly attribute TouchList targetTouches;
+ readonly attribute TouchList changedTouches;
+ readonly attribute boolean altKey;
+ readonly attribute boolean metaKey;
+ readonly attribute boolean ctrlKey;
+ readonly attribute boolean shiftKey;
};
+
partial interface GlobalEventHandlers {
- attribute EventHandler ontouchstart;
- attribute EventHandler ontouchend;
- attribute EventHandler ontouchmove;
- attribute EventHandler ontouchcancel;
+ attribute EventHandler ontouchstart;
+ attribute EventHandler ontouchend;
+ attribute EventHandler ontouchmove;
+ attribute EventHandler ontouchcancel;
};
+
partial interface Document {
- // Deprecated in this specification
- Touch createTouch(WindowProxy view,
- EventTarget target,
- long identifier,
- double pageX,
- double pageY,
- double screenX,
- double screenY);
- // Deprecated in this specification
- TouchList createTouchList(Touch... touches);
+ // Deprecated in this specification
+ Touch createTouch(WindowProxy view, EventTarget target, long identifier, double pageX, double pageY, double screenX, double screenY);
+ // Deprecated in this specification
+ TouchList createTouchList(Touch... touches);
};
diff --git a/tests/wpt/web-platform-tests/interfaces/user-timing.idl b/tests/wpt/web-platform-tests/interfaces/user-timing.idl
index 576ee5357a9..74139c6c7af 100644
--- a/tests/wpt/web-platform-tests/interfaces/user-timing.idl
+++ b/tests/wpt/web-platform-tests/interfaces/user-timing.idl
@@ -6,14 +6,14 @@
partial interface Performance {
void mark(DOMString markName);
void clearMarks(optional DOMString markName);
- void measure(DOMString measureName,
- optional DOMString startMark,
- optional DOMString endMark);
+ void measure(DOMString measureName, optional DOMString startMark, optional DOMString endMark);
void clearMeasures(optional DOMString measureName);
};
+
[Exposed=(Window,Worker)]
interface PerformanceMark : PerformanceEntry {
};
+
[Exposed=(Window,Worker)]
interface PerformanceMeasure : PerformanceEntry {
};
diff --git a/tests/wpt/web-platform-tests/interfaces/webaudio.idl b/tests/wpt/web-platform-tests/interfaces/webaudio.idl
index 5f3085df81e..0ea32e506eb 100644
--- a/tests/wpt/web-platform-tests/interfaces/webaudio.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webaudio.idl
@@ -46,8 +46,8 @@ interface BaseAudioContext : EventTarget {
WaveShaperNode createWaveShaper ();
Promise<AudioBuffer> decodeAudioData (ArrayBuffer audioData,
- optional DecodeSuccessCallback successCallback,
- optional DecodeErrorCallback errorCallback);
+ optional DecodeSuccessCallback? successCallback,
+ optional DecodeErrorCallback? errorCallback);
Promise<void> resume ();
};
diff --git a/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.html b/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.html
deleted file mode 100644
index a63e387b18b..00000000000
--- a/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>Keyboard Lock IDL tests</title>
-<link rel="help" href="https://w3c.github.io/keyboard-lock/"/>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-'use strict';
-
-function doTest(idls) {
- var idl_array = new IdlArray();
- idl_array.add_untested_idls('interface Navigator {};');
- for (let idl of idls) {
- idl_array.add_idls(idl);
- }
- idl_array.add_objects({
- Navigator: ['navigator'],
- Keyboard: ['navigator.keyboard'],
- });
- idl_array.test();
-};
-
-function fetchText(url) {
- return fetch(url).then((response) => response.text());
-}
-
-promise_test(() => {
- return Promise.all(["/interfaces/keyboard-lock.idl"].map(fetchText))
- .then(doTest);
-}, "Test driver");
-</script>
diff --git a/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.window.js b/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.window.js
new file mode 100644
index 00000000000..27573bd8773
--- /dev/null
+++ b/tests/wpt/web-platform-tests/keyboard-lock/idlharness.https.window.js
@@ -0,0 +1,18 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/keyboard-lock/
+
+'use strict';
+
+idl_test(
+ ['keyboard-lock'],
+ ['html'],
+ idl_array => {
+ idl_array.add_objects({
+ Navigator: ['navigator'],
+ Keyboard: ['navigator.keyboard'],
+ });
+ },
+ 'keyboard-lock interfaces'
+);
diff --git a/tests/wpt/web-platform-tests/keyboard-map/idlharness.https.html b/tests/wpt/web-platform-tests/keyboard-map/idlharness.https.html
deleted file mode 100644
index 05d687d7fb1..00000000000
--- a/tests/wpt/web-platform-tests/keyboard-map/idlharness.https.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>Keyboard Map IDL tests</title>
-<link rel="help" href="https://wicg.github.io/keyboard-map/"/>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-'use strict';
-
-promise_test(async () => {
- var idl_array = new IdlArray();
- const keyboard_map_idl = await fetch("/interfaces/keyboard-map.idl")
- .then(r => r.text());
- const layout_map = await navigator.keyboard.getLayoutMap();
-
- idl_array.add_untested_idls('interface Navigator {};');
- idl_array.add_idls(keyboard_map_idl);
-
- window.layout_map = layout_map;
-
- idl_array.add_objects({
- Navigator: ['navigator'],
- Keyboard: ['navigator.keyboard'],
- KeyboardLayoutMap: ['layout_map'],
- });
- idl_array.test();
-}, "Test IDL implementation of Keyboard Map API");
-</script>
diff --git a/tests/wpt/web-platform-tests/keyboard-map/idlharness.https.window.js b/tests/wpt/web-platform-tests/keyboard-map/idlharness.https.window.js
new file mode 100644
index 00000000000..d80016677bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/keyboard-map/idlharness.https.window.js
@@ -0,0 +1,21 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://wicg.github.io/keyboard-map/
+
+'use strict';
+
+idl_test(
+ ['keyboard-map'],
+ ['html'],
+ async idl_array => {
+ idl_array.add_objects({
+ Navigator: ['navigator'],
+ Keyboard: ['navigator.keyboard'],
+ KeyboardLayoutMap: ['layout_map'],
+ });
+
+ self.layout_map = await navigator.keyboard.getLayoutMap();
+ },
+ 'Test IDL implementation of Keyboard Map API'
+);
diff --git a/tests/wpt/web-platform-tests/magnetometer/idlharness.https.html b/tests/wpt/web-platform-tests/magnetometer/idlharness.https.html
deleted file mode 100644
index 904869ebd6d..00000000000
--- a/tests/wpt/web-platform-tests/magnetometer/idlharness.https.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Magnetometer Sensor IDL tests</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://w3c.github.io/magnetometer/">
-<link rel="help" href="https://w3c.github.io/sensors/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-"use strict";
-
-function doTest([dom, generic_sensor, magnetometer]) {
- const idl_array = new IdlArray();
- idl_array.add_untested_idls(dom);
- idl_array.add_untested_idls('interface EventHandler {};');
- idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
- idl_array.add_idls(magnetometer);
- idl_array.add_objects({
- Magnetometer: ['new Magnetometer();'],
- UncalibratedMagnetometer: ['new UncalibratedMagnetometer();']
- });
- idl_array.test();
-}
-
-function fetchText(url) {
- return fetch(url).then((response) => response.text());
-}
-
-promise_test(() => {
- return Promise.all([
- "/interfaces/dom.idl",
- "/interfaces/sensors.idl",
- "/interfaces/magnetometer.idl",
- ].map(fetchText)).then(doTest);
-}, "Test IDL implementation of Magnetometer Sensor");
-</script>
diff --git a/tests/wpt/web-platform-tests/magnetometer/idlharness.https.window.js b/tests/wpt/web-platform-tests/magnetometer/idlharness.https.window.js
new file mode 100644
index 00000000000..97a3c85e39f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/magnetometer/idlharness.https.window.js
@@ -0,0 +1,18 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/magnetometer/
+
+'use strict';
+
+idl_test(
+ ['magnetometer'],
+ ['generic-sensor', 'dom'],
+ idl_array => {
+ idl_array.add_objects({
+ Magnetometer: ['new Magnetometer();'],
+ UncalibratedMagnetometer: ['new UncalibratedMagnetometer();']
+ });
+ },
+ 'Test IDL implementation of Magnetometer Sensor'
+);
diff --git a/tests/wpt/web-platform-tests/media-source/idlharness.any.js b/tests/wpt/web-platform-tests/media-source/idlharness.any.js
new file mode 100644
index 00000000000..7992b117131
--- /dev/null
+++ b/tests/wpt/web-platform-tests/media-source/idlharness.any.js
@@ -0,0 +1,59 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/media-source/
+
+'use strict';
+
+var mediaSource;
+var sourceBuffer;
+var video = document.createElement("video");
+
+promise_test(async t => {
+ const srcs = ['media-source', 'dom', 'html', 'url'];
+ const [idl, dom, html, url] = await Promise.all(
+ srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
+
+ var idlArray = new IdlArray();
+ idlArray.add_idls(idl);
+ idlArray.add_dependency_idls(dom);
+ idlArray.add_dependency_idls(html);
+ idlArray.add_dependency_idls(url);
+
+ const testIdls = new Promise(resolve => {
+ try {
+ mediaSource = new MediaSource();
+ video.src = URL.createObjectURL(mediaSource);
+ mediaSource.addEventListener("sourceopen", function () {
+ var defaultType ='video/webm;codecs="vp8,vorbis"';
+ if (MediaSource.isTypeSupported(defaultType)) {
+ sourceBuffer = mediaSource.addSourceBuffer(defaultType);
+ } else {
+ sourceBuffer = mediaSource.addSourceBuffer('video/mp4');
+ }
+ sourceBuffer.addEventListener("updateend", function (e) {
+ mediaSource.endOfStream();
+ resolve();
+ });
+ sourceBuffer.appendBuffer(new ArrayBuffer());
+ });
+ } catch (e) {
+ // Will be surfaced in idlharness.js's test_object below.
+ }
+ })
+
+ idlArray.add_objects({
+ MediaSource: ['mediaSource'],
+ SourceBuffer: ['sourceBuffer'],
+ SourceBufferList: ['mediaSource.sourceBuffers']
+ });
+
+ const timeout = new Promise((_, reject) => t.step_timeout(reject, 3000));
+ return Promise
+ .race([testIdls, timeout])
+ .then(() => { idlArray.test(); })
+ .catch(() => {
+ idlArray.test();
+ return Promise.reject('Failed to create media-source objects')
+ });
+}, 'media-source interfaces');
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html
deleted file mode 100644
index 40888f0b59e..00000000000
--- a/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset=utf-8>
- <title>Image Capture IDL test</title>
- <link rel="help" href="https://w3c.github.io/mediacapture-image">
- <link rel="idl" href="https://w3c.github.io/mediacapture-image/#idl-index">
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="/resources/WebIDLParser.js"></script>
- <script src="/resources/idlharness.js"></script>
-</head>
-<body>
- <canvas id='canvas' width=10 height=10/>
-
-<script>
- 'use strict';
-
- promise_test(async () => {
- const srcs = ['image-capture', 'mediacapture-streams', 'html', 'dom'];
- const [idl, main, html, dom] = await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- let capture;
- try {
- var canvas = document.getElementById('canvas');
- var context = canvas.getContext("2d");
- context.fillStyle = "red";
- context.fillRect(0, 0, 10, 10);
- var track = canvas.captureStream().getVideoTracks()[0];
- capture = new ImageCapture(track);
- } catch (e) {
- // Will be surfaced in idlharness.js's test_object below.
- }
-
- var idl_array = new IdlArray();
- idl_array.add_idls(idl);
- idl_array.add_dependency_idls(main);
- idl_array.add_dependency_idls(html);
- idl_array.add_dependency_idls(dom);
- idl_array.add_objects({
- ImageCapture : [capture]
- });
- idl_array.test();
- }, 'Test mediacapture-image IDL interfaces');
- </script>
- <div id="log"></div>
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/idlharness.window.js b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.window.js
new file mode 100644
index 00000000000..0c06405aba8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.window.js
@@ -0,0 +1,27 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/mediacapture-image/
+
+'use strict';
+
+idl_test(
+ ['image-capture'],
+ ['mediacapture-streams', 'html', 'dom'],
+ async idl_array => {
+ idl_array.add_objects({
+ ImageCapture : ['capture'],
+ PhotoCapabilities: ['capabilities'],
+ });
+
+ const canvas = document.createElement('canvas');
+ document.body.appendChild(canvas);
+ const context = canvas.getContext("2d");
+ context.fillStyle = "red";
+ context.fillRect(0, 0, 10, 10);
+ const track = canvas.captureStream().getVideoTracks()[0];
+ self.capture = new ImageCapture(track);
+ self.capabilities = await capture.getPhotoCapabilities();
+ },
+ 'Test mediacapture-image IDL interfaces'
+);
diff --git a/tests/wpt/web-platform-tests/mediasession/idlharness.html b/tests/wpt/web-platform-tests/mediasession/idlharness.html
deleted file mode 100644
index d732c0333b7..00000000000
--- a/tests/wpt/web-platform-tests/mediasession/idlharness.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-<title>Media Session IDL tests</title>
-<link rel="help" href="https://wicg.github.io/mediasession/"/>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-</head>
-<body>
-<h1>Media Session IDL tests</h1>
-<script>
-'use strict';
-
-promise_test(async () => {
- var idl_array = new IdlArray();
- const idl = await fetch('/interfaces/mediasession.idl').then(r => r.text());
- const html = await fetch('/interfaces/html.idl').then(r => r.text());
- idl_array.add_idls(idl);
- idl_array.add_dependency_idls(html);
- idl_array.add_objects({
- MediaMetadata: ['new MediaMetadata()'],
- Navigator: ['navigator']
- });
- idl_array.test();
-}, 'Test IDL implementation of Media Session');
-</script>
-<div id="log"></div>
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/mediasession/idlharness.window.js b/tests/wpt/web-platform-tests/mediasession/idlharness.window.js
new file mode 100644
index 00000000000..f9ac62d1e99
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediasession/idlharness.window.js
@@ -0,0 +1,19 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://wicg.github.io/mediasession/
+
+'use strict';
+
+idl_test(
+ ['mediasession'],
+ ['html'],
+ idl_array => {
+ idl_array.add_objects({
+ MediaMetadata: ['new MediaMetadata()'],
+ MediaSession: ['navigator.mediaSession'],
+ Navigator: ['navigator']
+ });
+ },
+ 'Test IDL implementation of Media Session'
+);
diff --git a/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.html b/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.html
deleted file mode 100644
index c87d99f8085..00000000000
--- a/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Orientation Sensor IDL tests</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://w3c.github.io/orientation-sensor/">
-<link rel="help" href="https://w3c.github.io/sensors/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-"use strict";
-
-function doTest([dom, generic_sensor, orientation_sensor]) {
- const idl_array = new IdlArray();
- idl_array.add_untested_idls(dom);
- idl_array.add_untested_idls('interface EventHandler {};');
- idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
- idl_array.add_idls(orientation_sensor);
- idl_array.add_objects({
- AbsoluteOrientationSensor: ['new AbsoluteOrientationSensor();'],
- RelativeOrientationSensor: ['new RelativeOrientationSensor();']
- });
- idl_array.test();
-}
-
-function fetchText(url) {
- return fetch(url).then((response) => response.text());
-}
-
-promise_test(() => {
- return Promise.all([
- "/interfaces/dom.idl",
- "/interfaces/sensors.idl",
- "/interfaces/orientation-sensor.idl",
- ].map(fetchText)).then(doTest);
-}, "Test IDL implementation of Orientation Sensor");
-</script>
diff --git a/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.window.js b/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.window.js
new file mode 100644
index 00000000000..39217fcc627
--- /dev/null
+++ b/tests/wpt/web-platform-tests/orientation-sensor/idlharness.https.window.js
@@ -0,0 +1,19 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/orientation-sensor/">
+
+'use strict';
+
+idl_test(
+ ['orientation-sensor'],
+ ['generic-sensor', 'dom'],
+ idl_array => {
+ idl_array.add_objects({
+ AbsoluteOrientationSensor: ['new AbsoluteOrientationSensor();'],
+ RelativeOrientationSensor: ['new RelativeOrientationSensor();']
+ });
+ idl_array.prevent_multiple_testing('OrientationSensor');
+ },
+ 'Test IDL implementation of Orientation Sensor'
+);
diff --git a/tests/wpt/web-platform-tests/picture-in-picture/disable-picture-in-picture.html b/tests/wpt/web-platform-tests/picture-in-picture/disable-picture-in-picture.html
index 1a59b7a3b32..fdd8e9798e0 100644
--- a/tests/wpt/web-platform-tests/picture-in-picture/disable-picture-in-picture.html
+++ b/tests/wpt/web-platform-tests/picture-in-picture/disable-picture-in-picture.html
@@ -33,7 +33,7 @@ promise_test(async t => {
promise_test(async t => {
const video = await loadVideo();
- return callWithTrustedClick(async () => {
+ return test_driver.bless('request picture in picture', async () => {
const promise = video.requestPictureInPicture();
video.disablePictureInPicture = true;
await promise_rejects(t, 'InvalidStateError', promise);
diff --git a/tests/wpt/web-platform-tests/picture-in-picture/idlharness.window.js b/tests/wpt/web-platform-tests/picture-in-picture/idlharness.window.js
index 6ada0fe7bfd..ac4c0bfe01f 100644
--- a/tests/wpt/web-platform-tests/picture-in-picture/idlharness.window.js
+++ b/tests/wpt/web-platform-tests/picture-in-picture/idlharness.window.js
@@ -8,24 +8,19 @@
// https://wicg.github.io/picture-in-picture/
-promise_test(async () => {
- try {
+idl_test(
+ ['picture-in-picture'],
+ ['html', 'dom'],
+ async idl_array => {
+ idl_array.add_objects({
+ Document: ['document'],
+ DocumentOrShadowRoot: ['document'],
+ HTMLVideoElement: ['video'],
+ PictureInPictureWindow: ['pipw'],
+ });
+
self.video = await loadVideo();
self.pipw = await requestPictureInPictureWithTrustedClick(video);
- } catch (e) {
- // Will be surfaced when video/pipw are undefined below.
- }
-
- idl_test(
- ['picture-in-picture'],
- ['html', 'dom'],
- idl_array => {
- idl_array.add_objects({
- Document: ['document'],
- DocumentOrShadowRoot: ['document'],
- HTMLVideoElement: ['video'],
- PictureInPictureWindow: ['pipw'],
- });
- },
- 'picture-in-picture interfaces.');
-})
+ },
+ 'picture-in-picture interfaces.'
+);
diff --git a/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture-twice.html b/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture-twice.html
new file mode 100644
index 00000000000..556cf83b83e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture-twice.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>Test request Picture-in-Picture on two videos</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/picture-in-picture-helpers.js"></script>
+<body></body>
+<script>
+promise_test(async t => {
+ const video1 = await loadVideo();
+ const video2 = await loadVideo();
+ return test_driver.bless(
+ 'request picture in picture',
+ async () => {
+ await video1.requestPictureInPicture();
+ promise_rejects(t, 'NotAllowedError', video2.requestPictureInPicture());
+ }
+ );
+}, 'request Picture-in-Picture consumes user gesture');
+</script>
diff --git a/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html b/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html
index d2a59413471..a0c3217603b 100644
--- a/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html
+++ b/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html
@@ -33,17 +33,4 @@ promise_test(async t => {
const video = await loadVideo();
return promise_rejects(t, 'NotAllowedError', video.requestPictureInPicture());
}, 'request Picture-in-Picture requires a user gesture');
-
-promise_test(async t => {
- const video1 = await loadVideo();
- const video2 = await loadVideo();
- return callWithTrustedClick(() => {
- const first = video1.requestPictureInPicture();
- const second = video2.requestPictureInPicture();
- return Promise.all([
- first,
- promise_rejects(t, 'NotAllowedError', second)
- ]);
- });
-}, 'request Picture-in-Picture consumes user gesture');
</script>
diff --git a/tests/wpt/web-platform-tests/picture-in-picture/resources/picture-in-picture-helpers.js b/tests/wpt/web-platform-tests/picture-in-picture/resources/picture-in-picture-helpers.js
index ee8e1c23fc8..86b9f29ebd7 100644
--- a/tests/wpt/web-platform-tests/picture-in-picture/resources/picture-in-picture-helpers.js
+++ b/tests/wpt/web-platform-tests/picture-in-picture/resources/picture-in-picture-helpers.js
@@ -1,17 +1,7 @@
-function callWithTrustedClick(callback) {
- return new Promise(resolve => {
- let button = document.createElement('button');
- button.textContent = 'click to continue test';
- button.style.display = 'block';
- button.style.fontSize = '20px';
- button.style.padding = '10px';
- button.onclick = () => {
- document.body.removeChild(button);
- resolve(callback());
- };
- document.body.appendChild(button);
- test_driver.click(button);
- });
+if (!('pictureInPictureEnabled' in document)) {
+ HTMLVideoElement.prototype.requestPictureInPicture = function() {
+ return Promise.reject('Picture-in-Picture API is not available');
+ }
}
function loadVideo(activeDocument, sourceUrl) {
@@ -19,17 +9,14 @@ function loadVideo(activeDocument, sourceUrl) {
const document = activeDocument || window.document;
const video = document.createElement('video');
video.src = sourceUrl || '/media/movie_5.ogv';
- video.onloadedmetadata = () => {
- resolve(video);
- };
- video.onerror = error => {
- reject(error);
- };
+ video.onloadedmetadata = () => { resolve(video); };
+ video.onerror = error => { reject(error); };
});
}
// Calls requestPictureInPicture() in a context that's 'allowed to request PiP'.
function requestPictureInPictureWithTrustedClick(videoElement) {
- return callWithTrustedClick(
- () => videoElement.requestPictureInPicture());
+ return test_driver.bless(
+ 'request picture in picture',
+ () => videoElement.requestPictureInPicture());
}
diff --git a/tests/wpt/web-platform-tests/pointerevents/extension/idlharness.html b/tests/wpt/web-platform-tests/pointerevents/extension/idlharness.html
deleted file mode 100644
index 40a441cf6c7..00000000000
--- a/tests/wpt/web-platform-tests/pointerevents/extension/idlharness.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>idlharness test</title>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-
-<pre id='untested_idl' style='display:none'>
-[Global=Window, Exposed=Window]
-interface Window {
-};
-
-[TreatNonObjectAsNull]
-callback EventHandlerNonNull = any (Event event);
-typedef EventHandlerNonNull? EventHandler;
-
-[NoInterfaceObject]
-interface GlobalEventHandlers {
-};
-Window implements GlobalEventHandlers;
-
-interface Element {
-};
-
-interface HTMLElement : Element {
-};
-HTMLElement implements GlobalEventHandlers;
-
-interface Document {
-};
-Document implements GlobalEventHandlers;
-
-interface MouseEvent {
-};
-
-</pre>
-<script>
-promise_test(async function () {
- const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
- const uievents = await fetch('/interfaces/uievents.idl').then(r => r.text());
- const idl = await fetch('/interfaces/pointerevents-extension.idl').then(r => r.text());
-
- const idl_array = new IdlArray();
- idl_array.add_untested_idls(dom, { only: ['EventInit'] });
- idl_array.add_untested_idls(uievents, { only: [
- 'UIEventInit',
- 'MouseEventInit',
- 'EventModifierInit']
- });
- idl_array.add_untested_idls(
- document.getElementById("untested_idl").textContent);
- idl_array.add_idls(idl);
- idl_array.test();
-}, 'pointerevents extension interfaces');
-</script>
diff --git a/tests/wpt/web-platform-tests/pointerevents/extension/idlharness.window.js b/tests/wpt/web-platform-tests/pointerevents/extension/idlharness.window.js
new file mode 100644
index 00000000000..703e1c455ab
--- /dev/null
+++ b/tests/wpt/web-platform-tests/pointerevents/extension/idlharness.window.js
@@ -0,0 +1,15 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/pointerevents/extension.html
+
+idl_test(
+ ['pointerevents-extension'],
+ ['pointerevents', 'uievents', 'dom'],
+ idl_array => {
+ idl_array.add_objects({
+ PointerEvent: ['new PointerEvent("pointer")'],
+ })
+ },
+ 'pointerevents extension interfaces'
+);
diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/idlharness.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/idlharness.https.html
index 04d1741da0a..52aa8c55328 100644
--- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/idlharness.https.html
+++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/idlharness.https.html
@@ -26,16 +26,24 @@
idl_array.add_dependency_idls(dom);
idl_array.add_dependency_idls(html);
- window.presentation_request = new PresentationRequest("/presentation-api/receiving-ua/idlharness.html");
- window.presentation_request_urls = new PresentationRequest([
- "/presentation-api/receiving-ua/idlharness.html",
- "https://www.example.com/presentation.html"
- ]);
- navigator.presentation.defaultRequest = presentation_request;
+ try {
+ window.presentation_request = new PresentationRequest("/presentation-api/receiving-ua/idlharness.html");
+ window.presentation_request_urls = new PresentationRequest([
+ "/presentation-api/receiving-ua/idlharness.html",
+ "https://www.example.com/presentation.html"
+ ]);
+ navigator.presentation.defaultRequest = window.presentation_request;
+ } catch (e) {
+ // Will be surfaced in idlharness.js's test_object below.
+ }
idl_array.add_objects({
- Presentation: ['navigator.presentation'],
- PresentationRequest: ['navigator.presentation.defaultRequest', 'presentation_request', 'presentation_request_urls']
+ Presentation: ['navigator.presentation'],
+ PresentationRequest: [
+ 'navigator.presentation.defaultRequest',
+ 'presentation_request',
+ 'presentation_request_urls'
+ ],
});
idl_array.test();
}, "Test IDL implementation of Presentation API");
diff --git a/tests/wpt/web-platform-tests/proximity/idlharness.https.html b/tests/wpt/web-platform-tests/proximity/idlharness.https.html
deleted file mode 100644
index ee0dbcd9c24..00000000000
--- a/tests/wpt/web-platform-tests/proximity/idlharness.https.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Proximity Sensor IDL tests</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://w3c.github.io/proximity/">
-<link rel="help" href="https://w3c.github.io/sensors/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-"use strict";
-
-function doTest([dom, generic_sensor, proximity]) {
- const idl_array = new IdlArray();
- idl_array.add_untested_idls(dom);
- idl_array.add_untested_idls('interface EventHandler {};');
- idl_array.add_idls(generic_sensor, { only: ['Sensor'] });
- idl_array.add_idls(proximity);
- idl_array.add_objects({
- ProximitySensor: ['new ProximitySensor();']
- });
- idl_array.test();
-}
-
-function fetchText(url) {
- return fetch(url).then((response) => response.text());
-}
-
-promise_test(() => {
- return Promise.all([
- "/interfaces/dom.idl",
- "/interfaces/sensors.idl",
- "/interfaces/proximity.idl",
- ].map(fetchText)).then(doTest);
-}, "Test IDL implementation of Proximity Sensor");
-</script>
diff --git a/tests/wpt/web-platform-tests/proximity/idlharness.https.window.js b/tests/wpt/web-platform-tests/proximity/idlharness.https.window.js
new file mode 100644
index 00000000000..08270650c54
--- /dev/null
+++ b/tests/wpt/web-platform-tests/proximity/idlharness.https.window.js
@@ -0,0 +1,17 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/proximity/
+
+'use strict';
+
+idl_test(
+ ['proximity'],
+ ['generic-sensor','dom'],
+ idl_array => {
+ idl_array.add_objects({
+ ProximitySensor: ['new ProximitySensor();']
+ });
+ },
+ 'Test IDL implementation of Proximity Sensor'
+);
diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html
new file mode 100644
index 00000000000..a1de182770a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html
@@ -0,0 +1,60 @@
+<html>
+<head>
+<meta charset="utf-8">
+<title>Many properties do not support quirky-length</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://quirks.spec.whatwg.org/#the-unitless-length-quirk">
+<meta name="assert" content="quirky-length is not supported by properties not listed.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+'use strict';
+
+var properties = [
+ 'block-size',
+ 'inline-size',
+ 'margin-block-end',
+ 'margin-block-start',
+ 'margin-inline-end',
+ 'margin-inline-start',
+ 'min-block-size',
+ 'min-inline-size',
+ 'offset-distance',
+ 'padding-block-end',
+ 'padding-block-start',
+ 'padding-inline-end',
+ 'padding-inline-start',
+ 'scroll-margin-block-end',
+ 'scroll-margin-block-start',
+ 'scroll-margin-bottom',
+ 'scroll-margin-inline-end',
+ 'scroll-margin-inline-start',
+ 'scroll-margin-left',
+ 'scroll-margin-right',
+ 'scroll-margin-top',
+ 'scroll-padding-block-end',
+ 'scroll-padding-block-start',
+ 'scroll-padding-bottom',
+ 'scroll-padding-inline-end',
+ 'scroll-padding-inline-start',
+ 'scroll-padding-left',
+ 'scroll-padding-right',
+ 'scroll-padding-top',
+ 'shape-margin'
+];
+
+for (let property of properties) {
+ test(() => {
+ if (!getComputedStyle(target)[property])
+ return;
+ target.style[property] = '567px';
+ target.style[property] = '1234';
+ assert_equals(target.style[property], '567px');
+ }, 'Property ' + property + ' does not support quirky length');
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/resource-timing/idlharness.any.js b/tests/wpt/web-platform-tests/resource-timing/idlharness.any.js
index d522aae0d5d..6dff5e85e05 100644
--- a/tests/wpt/web-platform-tests/resource-timing/idlharness.any.js
+++ b/tests/wpt/web-platform-tests/resource-timing/idlharness.any.js
@@ -5,24 +5,20 @@
// https://w3c.github.io/resource-timing/
-promise_test(async () => {
- const [idl, perf, hrtime, dom, html] = await Promise.all([
- '/interfaces/resource-timing.idl',
- '/interfaces/performance-timeline.idl',
- '/interfaces/hr-time.idl',
- '/interfaces/dom.idl',
- '/interfaces/html.idl',
- ].map(url => fetch(url).then(r => r.text())));
+idl_test(
+ ['resource-timing'],
+ ['performance-timeline', 'hr-time', 'dom', 'html'],
+ idl_array => {
+ try {
+ self.resource = performance.getEntriesByType('resource')[0];
+ } catch (e) {
+ // Will be surfaced when resource is undefined below.
+ }
- const idl_array = new IdlArray();
- idl_array.add_idls(idl);
- idl_array.add_dependency_idls(perf);
- idl_array.add_dependency_idls(hrtime);
- idl_array.add_dependency_idls(dom);
- idl_array.add_dependency_idls(html);
- idl_array.add_objects({
- Performance: ['performance'],
- PerformanceResourceTiming: ["performance.getEntriesByType('resource')[0]"]
- });
- idl_array.test();
-}, 'Test server-timing IDL implementation');
+ idl_array.add_objects({
+ Performance: ['performance'],
+ PerformanceResourceTiming: ['resource']
+ });
+ },
+ 'Test server-timing IDL implementation'
+);
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
new file mode 100644
index 00000000000..74be1f07896
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
@@ -0,0 +1,383 @@
+'use strict';
+
+// This polyfill library implements the WebXR Test API as specified here:
+// https://github.com/immersive-web/webxr-test-api
+
+class ChromeXRTest {
+ constructor() {
+ this.mockVRService_ = new MockVRService(mojo.frameInterfaces);
+ }
+
+ simulateDeviceConnection(init_params) {
+ return Promise.resolve(this.mockVRService_.addDevice(init_params));
+ }
+
+ simulateUserActivation(callback) {
+ return new Promise(resolve => {
+ let button = document.createElement('button');
+ button.textContent = 'click to continue test';
+ button.style.display = 'block';
+ button.style.fontSize = '20px';
+ button.style.padding = '10px';
+ button.onclick = () => {
+ resolve(callback());
+ document.body.removeChild(button);
+ };
+ document.body.appendChild(button);
+ test_driver.click(button);
+ });
+ }
+}
+
+// Mocking class definitions
+class MockVRService {
+ constructor() {
+ this.bindingSet_ = new mojo.BindingSet(device.mojom.VRService);
+ this.devices_ = [];
+
+ this.interceptor_ =
+ new MojoInterfaceInterceptor(device.mojom.VRService.name);
+ this.interceptor_.oninterfacerequest = e =>
+ this.bindingSet_.addBinding(this, e.handle);
+ this.interceptor_.start();
+ }
+
+ // Test methods
+ addDevice(fakeDeviceInit) {
+ let device = new MockDevice(fakeDeviceInit, this);
+ this.devices_.push(device);
+
+ return device;
+ }
+
+ // VRService implementation.
+ setClient(client) {
+ this.client_ = client;
+ for (let i = 0; i < this.devices_.length; i++) {
+ this.devices_[i].notifyClientOfDisplay();
+ }
+
+ return Promise.resolve();
+ }
+}
+
+// Implements both VRDisplayHost and VRMagicWindowProvider. Maintains a mock for
+// VRPresentationProvider.
+class MockDevice {
+ constructor(fakeDeviceInit, service) {
+ this.displayClient_ = new device.mojom.VRDisplayClientPtr();
+ this.presentation_provider_ = new MockVRPresentationProvider();
+
+ this.service_ = service;
+
+ this.framesOfReference = {};
+
+ if (fakeDeviceInit.supportsImmersive) {
+ this.displayInfo_ = this.getImmersiveDisplayInfo();
+ } else {
+ this.displayInfo_ = this.getNonImmersiveDisplayInfo();
+ }
+
+ if (service.client_) {
+ this.notifyClientOfDisplay();
+ }
+ }
+
+ // Functions for setup.
+ // This function calls to the backend to add this device to the list.
+ notifyClientOfDisplay() {
+ let displayPtr = new device.mojom.VRDisplayHostPtr();
+ let displayRequest = mojo.makeRequest(displayPtr);
+ let displayBinding =
+ new mojo.Binding(device.mojom.VRDisplayHost, this, displayRequest);
+
+ let clientRequest = mojo.makeRequest(this.displayClient_);
+ this.service_.client_.onDisplayConnected(
+ displayPtr, clientRequest, this.displayInfo_);
+ }
+
+ // Test methods.
+ setXRPresentationFrameData(poseMatrix, views) {
+ if (poseMatrix == null) {
+ this.presentation_provider_.pose_ = null;
+ } else {
+ this.presentation_provider_.setPoseFromMatrix(poseMatrix);
+ }
+
+ if (views) {
+ let changed = false;
+ for (let i = 0; i < views.length; i++) {
+ if (views[i].eye == 'left') {
+ this.displayInfo_.leftEye = this.getEye(views[i]);
+ changed = true;
+ } else if (views[i].eye == 'right') {
+ this.displayInfo_.rightEye = this.getEye(views[i]);
+ changed = true;
+ }
+ }
+
+ if (changed) {
+ this.displayClient_.onChanged(this.displayInfo_);
+ }
+ }
+ }
+
+ getNonImmersiveDisplayInfo() {
+ let displayInfo = this.getImmersiveDisplayInfo();
+
+ displayInfo.capabilities.canPresent = false;
+ displayInfo.leftEye = null;
+ displayInfo.rightEye = null;
+
+ return displayInfo;
+ }
+
+ // Function to generate some valid display information for the device.
+ getImmersiveDisplayInfo() {
+ return {
+ displayName: 'FakeDevice',
+ capabilities: {
+ hasPosition: false,
+ hasExternalDisplay: false,
+ canPresent: true,
+ maxLayers: 1
+ },
+ stageParameters: null,
+ leftEye: {
+ fieldOfView: {
+ upDegrees: 48.316,
+ downDegrees: 50.099,
+ leftDegrees: 50.899,
+ rightDegrees: 35.197
+ },
+ offset: [-0.032, 0, 0],
+ renderWidth: 20,
+ renderHeight: 20
+ },
+ rightEye: {
+ fieldOfView: {
+ upDegrees: 48.316,
+ downDegrees: 50.099,
+ leftDegrees: 50.899,
+ rightDegrees: 35.197
+ },
+ offset: [0.032, 0, 0],
+ renderWidth: 20,
+ renderHeight: 20
+ },
+ webxrDefaultFramebufferScale: 0.7,
+ };
+ }
+
+ // This function converts between the matrix provided by the WebXR test API
+ // and the internal data representation.
+ getEye(fakeXRViewInit) {
+ let m = fakeXRViewInit.projectionMatrix;
+
+ function toDegrees(tan) {
+ return Math.atan(tan) * 180 / Math.PI;
+ }
+
+ let xScale = m[0];
+ let yScale = m[5];
+ let near = m[14] / (m[10] - 1);
+ let far = m[14] / (m[10] - 1);
+ let leftTan = (1 - m[8]) / m[0];
+ let rightTan = (1 + m[8]) / m[0];
+ let upTan = (1 + m[9]) / m[5];
+ let downTan = (1 - m[9]) / m[5];
+
+ return {
+ fieldOfView: {
+ upDegrees: toDegrees(upTan),
+ downDegrees: toDegrees(downTan),
+ leftDegrees: toDegrees(leftTan),
+ rightDegrees: toDegrees(rightTan)
+ },
+ offset: [0, 0, 0],
+ renderWidth: 20,
+ renderHeight: 20
+ };
+ }
+
+ // Mojo function implementations.
+
+ // VRMagicWindowProvider implementation.
+
+ getFrameData() {
+ // Convert current document time to monotonic time.
+ let now = window.performance.now() / 1000.0;
+ let diff = now - internals.monotonicTimeToZeroBasedDocumentTime(now);
+ now += diff;
+ now *= 1000000;
+
+ return Promise.resolve({
+ frameData: {
+ pose: this.presentation_provider_.pose_,
+ bufferHolder: null,
+ bufferSize: {},
+ timeDelta: [],
+ projectionMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
+ }
+ });
+ }
+
+ updateSessionGeometry(frame_size, display_rotation) {
+ // This function must exist to ensure that calls to it do not crash, but we
+ // do not have any use for this data at present.
+ }
+
+ // VRDisplayHost implementation.
+
+ requestSession(sessionOptions, was_activation) {
+ return this.supportsSession(sessionOptions).then((result) => {
+ // The JavaScript bindings convert c_style_names to camelCase names.
+ let options = new device.mojom.VRDisplayFrameTransportOptions();
+ options.transportMethod =
+ device.mojom.VRDisplayFrameTransportMethod.SUBMIT_AS_MAILBOX_HOLDER;
+ options.waitForTransferNotification = true;
+ options.waitForRenderNotification = true;
+
+ let connection;
+ if (result.supportsSession) {
+ connection = {
+ clientRequest: this.presentation_provider_.getClientRequest(),
+ provider: this.presentation_provider_.bindProvider(sessionOptions),
+ transportOptions: options
+ };
+
+ let magicWindowPtr = new device.mojom.VRMagicWindowProviderPtr();
+ let magicWindowRequest = mojo.makeRequest(magicWindowPtr);
+ let magicWindowBinding = new mojo.Binding(
+ device.mojom.VRMagicWindowProvider, this, magicWindowRequest);
+
+ return Promise.resolve({
+ session:
+ {connection: connection, magicWindowProvider: magicWindowPtr}
+ });
+ } else {
+ return Promise.resolve({session: null});
+ }
+ });
+ }
+
+ supportsSession(options) {
+ return Promise.resolve({
+ supportsSession:
+ !options.exclusive || this.displayInfo_.capabilities.canPresent
+ });
+ };
+}
+
+class MockVRPresentationProvider {
+ constructor() {
+ this.binding_ = new mojo.Binding(device.mojom.VRPresentationProvider, this);
+ this.pose_ = null;
+ this.next_frame_id_ = 0;
+ this.submit_frame_count_ = 0;
+ this.missing_frame_count_ = 0;
+ }
+
+ bindProvider(request) {
+ let providerPtr = new device.mojom.VRPresentationProviderPtr();
+ let providerRequest = mojo.makeRequest(providerPtr);
+
+ this.binding_.close();
+
+ this.binding_ = new mojo.Binding(
+ device.mojom.VRPresentationProvider, this, providerRequest);
+
+ return providerPtr;
+ }
+
+ getClientRequest() {
+ this.submitFrameClient_ = new device.mojom.VRSubmitFrameClientPtr();
+ return mojo.makeRequest(this.submitFrameClient_);
+ }
+
+ setPoseFromMatrix(poseMatrix) {
+ this.pose_ = {
+ orientation: null,
+ position: null,
+ angularVelocity: null,
+ linearVelocity: null,
+ angularAcceleration: null,
+ linearAcceleration: null,
+ inputState: null,
+ poseIndex: 0
+ };
+
+ let pose = this.poseFromMatrix(poseMatrix);
+ for (let field in pose) {
+ if (this.pose_.hasOwnProperty(field)) {
+ this.pose_[field] = pose[field];
+ }
+ }
+ }
+
+ poseFromMatrix(m) {
+ let orientation = [];
+
+ let m00 = m[0];
+ let m11 = m[5];
+ let m22 = m[10];
+ // The max( 0, ... ) is just a safeguard against rounding error.
+ orientation[3] = Math.sqrt(Math.max(0, 1 + m00 + m11 + m22)) / 2;
+ orientation[0] = Math.sqrt(Math.max(0, 1 + m00 - m11 - m22)) / 2;
+ orientation[1] = Math.sqrt(Math.max(0, 1 - m00 + m11 - m22)) / 2;
+ orientation[2] = Math.sqrt(Math.max(0, 1 - m00 - m11 + m22)) / 2;
+
+ let position = [];
+ position[0] = m[12];
+ position[1] = m[13];
+ position[2] = m[14];
+
+ return {
+ orientation, position
+ }
+ }
+
+ // VRPresentationProvider mojo implementation
+ submitFrameMissing(frameId, mailboxHolder, timeWaited) {
+ this.missing_frame_count_++;
+ }
+
+ submitFrame(frameId, mailboxHolder, timeWaited) {
+ this.submit_frame_count_++;
+
+ // Trigger the submit completion callbacks here. WARNING: The
+ // Javascript-based mojo mocks are *not* re-entrant. It's OK to
+ // wait for these notifications on the next frame, but waiting
+ // within the current frame would never finish since the incoming
+ // calls would be queued until the current execution context finishes.
+ this.submitFrameClient_.onSubmitFrameTransferred(true);
+ this.submitFrameClient_.onSubmitFrameRendered();
+ }
+
+ getFrameData() {
+ if (this.pose_) {
+ this.pose_.poseIndex++;
+ }
+
+ // Convert current document time to monotonic time.
+ let now = window.performance.now() / 1000.0;
+ let diff = now - internals.monotonicTimeToZeroBasedDocumentTime(now);
+ now += diff;
+ now *= 1000000;
+
+ return Promise.resolve({
+ frameData: {
+ pose: this.pose_,
+ timeDelta: {
+ microseconds: now,
+ },
+ frameId: this.next_frame_id_++,
+ projectionMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
+ bufferHolder: null,
+ bufferSize: {}
+ }
+ });
+ }
+}
+
+let XRTest = new ChromeXRTest(); \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js.headers b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js.headers
new file mode 100644
index 00000000000..6805c323df5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js.headers
@@ -0,0 +1 @@
+Content-Type: text/javascript; charset=utf-8
diff --git a/tests/wpt/web-platform-tests/selection/idlharness.window.js b/tests/wpt/web-platform-tests/selection/idlharness.window.js
new file mode 100644
index 00000000000..d7b851d4752
--- /dev/null
+++ b/tests/wpt/web-platform-tests/selection/idlharness.window.js
@@ -0,0 +1,20 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+'use strict';
+
+// https://w3c.github.io/selection-api/
+
+idl_test(
+ ['selection-api'],
+ ['dom', 'html'],
+ idlArray => {
+ idlArray.add_objects({
+ Window: ['window'],
+ Document: ['document'],
+ Selection: ['getSelection()'],
+ GlobalEventHandlers: ['self'],
+ });
+ },
+ 'selection-api interfaces'
+);
diff --git a/tests/wpt/web-platform-tests/selection/interfaces.html b/tests/wpt/web-platform-tests/selection/interfaces.html
deleted file mode 100644
index 6b72f286caf..00000000000
--- a/tests/wpt/web-platform-tests/selection/interfaces.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!doctype html>
-<title>Selection interface tests</title>
-<div id=log></div>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/resources/WebIDLParser.js></script>
-<script src=/resources/idlharness.js></script>
-<script>
-"use strict";
-
-function doTest([selection, dom, cssom, touchevents, uievents, html]) {
- var idlArray = new IdlArray();
- idlArray.add_untested_idls('interface SVGElement {};');
- idlArray.add_untested_idls(dom + cssom + touchevents + uievents + html);
- idlArray.add_idls(selection);
- idlArray.add_objects({Selection: ['getSelection()']});
- idlArray.test();
-}
-
-function fetchData(url) {
- return fetch(url).then((response) => response.text());
-}
-
-promise_test(function() {
- return Promise.all([fetchData("/interfaces/selection-api.idl"),
- fetchData("/interfaces/dom.idl"),
- fetchData("/interfaces/cssom.idl"),
- fetchData("/interfaces/touchevents.idl"),
- fetchData("/interfaces/uievents.idl"),
- fetchData("/interfaces/html.idl")])
- .then(doTest);
-}, "Test driver");
-</script>
diff --git a/tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.html b/tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.html
index 50396ed642f..f74ffeba0f8 100644
--- a/tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.html
+++ b/tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.html
@@ -28,12 +28,17 @@ tests generated by:
const dur = expectedResult.dur || 0
const desc = expectedResult.desc || ''
const index = expectedResults.length === 1 ? '' : `[${i}].`
- test_equals(expectedResult.name, serverTiming[i].name,
- `${fileName} - ${index}name (${expectedResult.name} ?== ${serverTiming[i].name})`)
- test_equals(dur, serverTiming[i].duration,
- `${fileName} - ${index}duration (${dur} ?== ${serverTiming[i].duration})`)
- test_equals(desc, serverTiming[i].description,
- `${fileName} - ${index}description (${desc} ?== ${serverTiming[i].description})`)
+ const actual = serverTiming[i]
+ if (actual === undefined) {
+ // Protect against more expected results than actual results.
+ return
+ }
+ test_equals(expectedResult.name, actual.name,
+ `${fileName} - ${index}name (${expectedResult.name} ?== ${actual.name})`)
+ test_equals(dur, actual.duration,
+ `${fileName} - ${index}duration (${dur} ?== ${actual.duration})`)
+ test_equals(desc, actual.description,
+ `${fileName} - ${index}description (${desc} ?== ${actual.description})`)
})
})
done()
diff --git a/tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.https.html b/tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.https.html
index 50396ed642f..f74ffeba0f8 100644
--- a/tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.https.html
+++ b/tests/wpt/web-platform-tests/server-timing/server_timing_header-parsing.https.html
@@ -28,12 +28,17 @@ tests generated by:
const dur = expectedResult.dur || 0
const desc = expectedResult.desc || ''
const index = expectedResults.length === 1 ? '' : `[${i}].`
- test_equals(expectedResult.name, serverTiming[i].name,
- `${fileName} - ${index}name (${expectedResult.name} ?== ${serverTiming[i].name})`)
- test_equals(dur, serverTiming[i].duration,
- `${fileName} - ${index}duration (${dur} ?== ${serverTiming[i].duration})`)
- test_equals(desc, serverTiming[i].description,
- `${fileName} - ${index}description (${desc} ?== ${serverTiming[i].description})`)
+ const actual = serverTiming[i]
+ if (actual === undefined) {
+ // Protect against more expected results than actual results.
+ return
+ }
+ test_equals(expectedResult.name, actual.name,
+ `${fileName} - ${index}name (${expectedResult.name} ?== ${actual.name})`)
+ test_equals(dur, actual.duration,
+ `${fileName} - ${index}duration (${dur} ?== ${actual.duration})`)
+ test_equals(desc, actual.description,
+ `${fileName} - ${index}description (${desc} ?== ${actual.description})`)
})
})
done()
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/malformed-http-response.asis b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/malformed-http-response.asis
new file mode 100644
index 00000000000..bc3c68d46d5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/malformed-http-response.asis
@@ -0,0 +1 @@
+HAHAHA THIS IS NOT HTTP AND THE BROWSER SHOULD CONSIDER IT A NETWORK ERROR
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update_shell.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update_shell.py
new file mode 100644
index 00000000000..642e5194140
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update_shell.py
@@ -0,0 +1,31 @@
+# This serves a different response to each request, to test service worker
+# updates. If |filename| is provided, it writes that file into the body.
+#
+# Usage:
+# navigator.serviceWorker.register('update_shell.py?filename=worker.js')
+#
+# This registers worker.js as a service worker, and every update check
+# will return a new response.
+import os
+import sys
+import time
+
+def main(request, response):
+ # Set no-cache to ensure the user agent finds a new version for each update.
+ headers = [('Cache-Control', 'no-cache, must-revalidate'),
+ ('Pragma', 'no-cache'),
+ ('Content-Type', 'application/javascript')]
+
+ # Return a different script for each access. Use .time() and .clock() for
+ # best time resolution across different platforms.
+ timestamp = '// %s %s' % (time.time(), time.clock())
+ body = timestamp + '\n'
+
+ # Inject the file into the response.
+ if 'filename' in request.GET:
+ path = os.path.join(os.path.dirname(__file__),
+ request.GET['filename'])
+ with open(path, 'rb') as f:
+ body += f.read()
+
+ return headers, body
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-fetch-event.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-fetch-event.https.html
index 04cd9960fc6..ff51f7f902c 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-fetch-event.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-fetch-event.https.html
@@ -1,34 +1,91 @@
<!DOCTYPE html>
-<title>Service Worker: Update should be triggered after a navigation fetch event.</title>
+<meta name=timeout content=long>
+<title>Service Worker: Update should be triggered after a navigation</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
-promise_test(function(t) {
- var script = 'resources/update-nocookie-worker.py';
- var scope = 'resources/scope/update';
- var parsed_url = normalizeURL(script);
- var registration;
- var frame;
-
- return service_worker_unregister_and_register(t, parsed_url, scope)
- .then(function(r) {
- registration = r;
- return wait_for_state(t, registration.installing, 'activated');
- })
- .then(function() {
- // Navigation to the iframe.
- return with_iframe(scope);
- })
- .then(function(f) {
- frame = f;
- // Navigation fetch event should trigger update.
- return wait_for_update(t, registration);
- })
- .then(function() {
- frame.remove();
- return service_worker_unregister_and_done(t, scope);
- })
- }, 'Update should be triggered after a navigation fetch event.');
+async function cleanup(frame, registration) {
+ if (frame)
+ frame.remove();
+ if (registration)
+ await registration.unregister();
+}
+
+promise_test(async t => {
+ const script = 'resources/update_shell.py?filename=empty.js';
+ const scope = 'resources/scope/update';
+ let registration;
+ let frame;
+
+ async function run() {
+ registration = await service_worker_unregister_and_register(
+ t, script, scope);
+ await wait_for_state(t, registration.installing, 'activated');
+
+ // Navigation should trigger update.
+ frame = await with_iframe(scope);
+ await wait_for_update(t, registration);
+ }
+
+ try {
+ await run();
+ } finally {
+ await cleanup(frame, registration);
+ }
+}, 'Update should be triggered after a navigation (no fetch event worker).');
+
+promise_test(async t => {
+ const script = 'resources/update_shell.py?filename=simple-intercept-worker.js';
+ const scope = 'resources/scope/update';
+ let registration;
+ let frame;
+
+ async function run() {
+ registration = await service_worker_unregister_and_register(
+ t, script, scope);
+ await wait_for_state(t, registration.installing, 'activated');
+
+ // Navigation should trigger update (network fallback).
+ frame = await with_iframe(scope + '?ignore');
+ await wait_for_update(t, registration);
+
+ // Navigation should trigger update (respondWith called).
+ frame.src = scope + '?string';
+ await wait_for_update(t, registration);
+ }
+
+ try {
+ await run();
+ } finally {
+ await cleanup(frame, registration);
+ }
+}, 'Update should be triggered after a navigation (fetch event worker).');
+
+promise_test(async t => {
+ const script = 'resources/update_shell.py?filename=empty.js';
+ const scope = 'resources/';
+ let registration;
+ let frame;
+
+ async function run() {
+ registration = await service_worker_unregister_and_register(
+ t, script, scope);
+ await wait_for_state(t, registration.installing, 'activated');
+
+ // Navigation should trigger update. Don't use with_iframe as it waits for
+ // the onload event.
+ frame = document.createElement('iframe');
+ frame.src = 'resources/malformed-http-response.asis';
+ document.body.appendChild(frame);
+ await wait_for_update(t, registration);
+ }
+
+ try {
+ await run();
+ } finally {
+ await cleanup(frame, registration);
+ }
+}, 'Update should be triggered after a navigation (network error).');
</script>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-redirect.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-redirect.https.html
new file mode 100644
index 00000000000..321e40ca945
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/update-after-navigation-redirect.https.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Service Worker: Update should be triggered after redirects during navigation</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js"></script>
+<script>
+
+promise_test(async t => {
+ // This test does a navigation that goes through a redirect chain. Each
+ // request in the chain has a service worker. Each service worker has no
+ // fetch event handler. The redirects are performed by redirect.py.
+ const script = 'resources/update-nocookie-worker.py';
+ const scope1 = 'resources/redirect.py?scope1';
+ const scope2 = 'resources/redirect.py?scope2';
+ const scope3 = 'resources/empty.html';
+ let registration1;
+ let registration2;
+ let registration3;
+ let frame;
+
+ async function cleanup() {
+ if (frame)
+ frame.remove();
+ if (registration1)
+ return registration1.unregister();
+ if (registration2)
+ return registration2.unregister();
+ if (registration3)
+ return registration3.unregister();
+ }
+
+ async function make_active_registration(scope) {
+ const registration =
+ await service_worker_unregister_and_register(t, script, scope);
+ await wait_for_state(t, registration.installing, 'activated');
+ return registration;
+ }
+
+ async function run() {
+ // Make the registrations.
+ registration1 = await make_active_registration(scope1);
+ registration2 = await make_active_registration(scope2);
+ registration3 = await make_active_registration(scope3);
+
+ // Make the promises that resolve on update.
+ const saw_update1 = wait_for_update(t, registration1);
+ const saw_update2 = wait_for_update(t, registration2);
+ const saw_update3 = wait_for_update(t, registration3);
+
+ // Create a URL for the redirect chain: scope1 -> scope2 -> scope3.
+ // Build the URL in reverse order.
+ let url = `${base_path()}${scope3}`;
+ url = `${base_path()}${scope2}&Redirect=${encodeURIComponent(url)}`
+ url = `${base_path()}${scope1}&Redirect=${encodeURIComponent(url)}`
+
+ // Navigate to the URL.
+ frame = await with_iframe(url);
+
+ // Each registration should update.
+ await saw_update1;
+ await saw_update2;
+ await saw_update3;
+ }
+
+ try {
+ await run();
+ } finally {
+ await cleanup();
+ }
+}, 'service workers are updated on redirects during navigation');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-003.html b/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-003.html
new file mode 100644
index 00000000000..14bf5bd122f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-003.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS Test: use element doesn't cross shadow tree boundaries in selector-matching, and is invalidated properly</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="help" href="https://svgwg.org/svg2-draft/struct.html#UseElement">
+<link rel="match" href="/svg/linking/reftests/use-descendant-combinator-ref.html">
+<style>
+#test rect {
+ stroke: red;
+ stroke-width: 10px;
+}
+.inside-use rect {
+ fill: red;
+}
+defs .inside-use rect {
+ fill: red;
+}
+</style>
+<p>
+ You should see a green square, and no red.
+</p>
+<svg>
+ <defs>
+ <g id="square">
+ <g class="inside-use">
+ <rect width="100" height="100"/>
+ </g>
+ </g>
+ </defs>
+ <g id="test">
+ <use href="#square" />
+ </g>
+</svg>
+<script>
+ document.body.offsetTop;
+ document.styleSheets[0].cssRules[1].style.fill = 'green';
+</script>
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
index 6da3a334d37..fcb5922d10d 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
@@ -1,5 +1,5 @@
html5lib == 1.0.1
mozinfo == 0.10
-mozlog == 3.7
+mozlog==3.8
mozdebug == 0.1
urllib3[secure] == 1.22
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py
index de681af11fb..c0b5d0b132d 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py
@@ -411,7 +411,7 @@ class WdspecTest(Test):
test_type = "wdspec"
default_timeout = 25
- long_timeout = 120
+ long_timeout = 180 # 3 minutes
manifest_test_cls = {"reftest": ReftestTest,
diff --git a/tests/wpt/web-platform-tests/touch-events/idlharness.window.js b/tests/wpt/web-platform-tests/touch-events/idlharness.window.js
index 6a95892794d..dbea07ac77c 100644
--- a/tests/wpt/web-platform-tests/touch-events/idlharness.window.js
+++ b/tests/wpt/web-platform-tests/touch-events/idlharness.window.js
@@ -5,21 +5,16 @@
'use strict';
-promise_test(async () => {
- const srcs = ['touch-events', 'uievents', 'dom', 'html'];
- const [idl, uievents, dom, html] = await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- const idl_array = new IdlArray();
- idl_array.add_idls(idl);
- idl_array.add_dependency_idls(uievents);
- idl_array.add_dependency_idls(dom);
- idl_array.add_dependency_idls(html);
- idl_array.add_objects({
- Document: ['document'],
- GlobalEventHandlers: ['window', 'document', 'document.body'],
- Touch: ['new Touch({identifier: 1, target: document})'],
- TouchEvent: ['new TouchEvent("name")'],
- });
- idl_array.test();
-}, 'Test IDL implementation of touch-events API');
+idl_test(
+ ['touch-events'],
+ ['uievents', 'dom', 'html'],
+ idl_array => {
+ idl_array.add_objects({
+ Document: ['document'],
+ GlobalEventHandlers: ['window', 'document', 'document.body'],
+ Touch: ['new Touch({identifier: 1, target: document})'],
+ TouchEvent: ['new TouchEvent("name")'],
+ });
+ },
+ 'Test IDL implementation of touch-events API'
+);
diff --git a/tests/wpt/web-platform-tests/user-timing/idlharness.any.js b/tests/wpt/web-platform-tests/user-timing/idlharness.any.js
index 47300bddb77..6c60cb555bd 100644
--- a/tests/wpt/web-platform-tests/user-timing/idlharness.any.js
+++ b/tests/wpt/web-platform-tests/user-timing/idlharness.any.js
@@ -6,19 +6,27 @@
'use strict';
-promise_test(async () => {
- const idl_array = new IdlArray();
- const idl = await fetch("/interfaces/user-timing.idl").then(r => r.text());
- const hrtime = await fetch("/interfaces/hr-time.idl").then(r => r.text());
- const perf = await fetch("/interfaces/performance-timeline.idl").then(r => r.text());
- const dom = await fetch("/interfaces/dom.idl").then(r => r.text());
+idl_test(
+ ['user-timing'],
+ ['hr-time', 'performance-timeline', 'dom'],
+ idl_array => {
+ try {
+ performance.mark('test');
+ performance.measure('test');
+ for (const m of performance.getEntriesByType('mark')) {
+ self.mark = m;
+ }
+ for (const m of performance.getEntriesByType('measure')) {
+ self.measure = m;
+ }
+ } catch (e) {
+ // Will be surfaced when mark is undefined below.
+ }
- idl_array.add_idls(idl);
- idl_array.add_dependency_idls(hrtime);
- idl_array.add_dependency_idls(perf);
- idl_array.add_dependency_idls(dom);
- idl_array.add_objects({
- Performance: ["performance"]
- });
- idl_array.test();
-}, "Test IDL implementation of user-timing API");
+ idl_array.add_objects({
+ Performance: ['performance'],
+ PerformanceMark: ['mark'],
+ PerformanceMeasure: ['measure'],
+ });
+ },
+ 'Test IDL implementation of user-timing API');
diff --git a/tests/wpt/web-platform-tests/web-share/idlharness.https.html b/tests/wpt/web-platform-tests/web-share/idlharness.https.html
deleted file mode 100644
index f68e51e5ed1..00000000000
--- a/tests/wpt/web-platform-tests/web-share/idlharness.https.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>WebShare IDL test</title>
- <link rel="help" href="https://wicg.github.io/web-share/">
- <script src=/resources/testharness.js></script>
- <script src=/resources/testharnessreport.js></script>
- <script src=/resources/WebIDLParser.js></script>
- <script src=/resources/idlharness.js></script>
- </head>
- <body>
- <script>
- "use strict";
- var idl_array = new IdlArray();
-
- function doTest(idl) {
- idl_array.add_untested_idls('interface Navigator {};');
- idl_array.add_idls(idl);
- idl_array.add_objects({
- Navigator: ['navigator']
- });
- idl_array.test();
- }
-
- promise_test(async () => {
- const response = await fetch('../interfaces/web-share.idl');
- doTest(await response.text());
- }, 'Test driver');
- </script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/web-share/idlharness.https.window.js b/tests/wpt/web-platform-tests/web-share/idlharness.https.window.js
new file mode 100644
index 00000000000..6a69c8d1bfa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/web-share/idlharness.https.window.js
@@ -0,0 +1,17 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://wicg.github.io/web-share/
+
+'use strict';
+
+idl_test(
+ ['web-share'],
+ ['html'],
+ idl_array => {
+ idl_array.add_objects({
+ Navigator: ['navigator']
+ });
+ },
+ 'Test driver'
+);
diff --git a/tests/wpt/web-platform-tests/webaudio/historical.html b/tests/wpt/web-platform-tests/webaudio/historical.html
index 2407a873c3d..1f3146c39d5 100644
--- a/tests/wpt/web-platform-tests/webaudio/historical.html
+++ b/tests/wpt/web-platform-tests/webaudio/historical.html
@@ -12,4 +12,18 @@
assert_false(name in window);
}, name + " interface should not exist");
});
+
+[
+ "dopplerFactor",
+ "speedOfSound",
+ "setVelocity"
+].forEach(name => {
+ test(function() {
+ assert_false(name in AudioListener.prototype);
+ }, name + " member should not exist on the AudioListener.");
+});
+
+test(function() {
+ assert_false("setVelocity" in PannerNode.prototype);
+}, "setVelocity should not exist on PannerNodes.");
</script>
diff --git a/tests/wpt/web-platform-tests/webaudio/idlharness.https.html b/tests/wpt/web-platform-tests/webaudio/idlharness.https.html
deleted file mode 100644
index bd1df62942c..00000000000
--- a/tests/wpt/web-platform-tests/webaudio/idlharness.https.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>WebAudio IDL tests</title>
-<link rel="help" href="https://webaudio.github.io/web-audio-api/"/>
-<meta name="timeout" content="long"><!-- Heavy computation of the idl_objects -->
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
-'use strict';
-
-let sample_rate, context, buffer, worklet_node;
-
-promise_test(async t => {
- const srcs = ['cssom', 'dom', 'html', 'uievents', 'mediacapture-streams', 'webaudio'];
- const [cssom, dom, html, uievents, mediacapture, webaudio] =
- await Promise.all(
- srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
-
- const idl_array = new IdlArray();
- idl_array.add_idls(webaudio);
-
- // Dependencies of HTML
- idl_array.add_dependency_idls(html);
- idl_array.add_dependency_idls(uievents);
- idl_array.add_dependency_idls(dom);
- idl_array.add_dependency_idls(mediacapture);
- idl_array.add_dependency_idls(cssom);
-
- idl_array.add_untested_idls('interface SVGElement {};');
- idl_array.add_untested_idls('interface WorkletGlobalScope {};');
- idl_array.add_untested_idls('interface Worklet {};');
-
- try {
- sample_rate = 44100;
- context = new AudioContext;
- buffer = new AudioBuffer({length: 1, sampleRate: sample_rate});
- await context.audioWorklet.addModule(
- 'the-audio-api/the-audioworklet-interface/processors/dummy-processor.js');
- worklet_node = new AudioWorkletNode(context, 'dummy');
- } catch (e) {
- // Ignore - errors will surface in each test_object below.
- }
-
- idl_array.add_objects({
- BaseAudioContext: [],
- AudioContext: ['context'],
- OfflineAudioContext: ['new OfflineAudioContext(1, 1, sample_rate)'],
- OfflineAudioCompletionEvent: [
- 'new OfflineAudioCompletionEvent("", {renderedBuffer: buffer})'],
- AudioBuffer: ['buffer'],
- AudioNode: [],
- AudioParam: ['new AudioBufferSourceNode(context).playbackRate'],
- AudioScheduledSourceNode: [],
- AnalyserNode: ['new AnalyserNode(context)'],
- AudioBufferSourceNode: ['new AudioBufferSourceNode(context)'],
- AudioDestinationNode: ['context.destination'],
- AudioListener: ['context.listener'],
- AudioProcessingEvent: [`new AudioProcessingEvent('', {
- playbackTime: 0, inputBuffer: buffer, outputBuffer: buffer
- })`],
- BiquadFilterNode: ['new BiquadFilterNode(context)'],
- ChannelMergerNode: ['new ChannelMergerNode(context)'],
- ChannelSplitterNode: ['new ChannelSplitterNode(context)'],
- ConstantSourceNode: ['new ConstantSourceNode(context)'],
- ConvolverNode: ['new ConvolverNode(context)'],
- DelayNode: ['new DelayNode(context)'],
- DynamicsCompressorNode: ['new DynamicsCompressorNode(context)'],
- GainNode: ['new GainNode(context)'],
- IIRFilterNode: [
- 'new IIRFilterNode(context, {feedforward: [1], feedback: [1]})'
- ],
- MediaElementAudioSourceNode: [
- 'new MediaElementAudioSourceNode(context, {mediaElement: new Audio})'
- ],
- MediaStreamAudioDestinationNode: [
- 'new MediaStreamAudioDestinationNode(context)'
- ],
- MediaStreamAudioSourceNode: [],
- MediaStreamTrackAudioSourceNode: [],
- OscillatorNode: ['new OscillatorNode(context)'],
- PannerNode: ['new PannerNode(context)'],
- PeriodicWave: ['new PeriodicWave(context)'],
- ScriptProcessorNode: ['context.createScriptProcessor()'],
- StereoPannerNode: ['new StereoPannerNode(context)'],
- WaveShaperNode: ['new WaveShaperNode(context)'],
- AudioWorklet: ['context.audioWorklet'],
- AudioWorkletGlobalScope: [],
- AudioParamMap: ['worklet_node.parameters'],
- AudioWorkletNode: ['worklet_node'],
- AudioWorkletProcessor: [],
- });
- idl_array.test();
-
-}, 'Test driver');
-</script>
diff --git a/tests/wpt/web-platform-tests/webaudio/idlharness.https.window.js b/tests/wpt/web-platform-tests/webaudio/idlharness.https.window.js
new file mode 100644
index 00000000000..eb4734b0d6d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/idlharness.https.window.js
@@ -0,0 +1,75 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+// META: timeout=long
+
+// https://webaudio.github.io/web-audio-api/
+
+'use strict';
+
+idl_test(
+ ['webaudio'],
+ ['cssom', 'uievents', 'mediacapture-streams', 'html', 'dom'],
+ async idl_array => {
+ idl_array.add_untested_idls('interface SVGElement {};');
+ idl_array.add_untested_idls('interface WorkletGlobalScope {};');
+ idl_array.add_untested_idls('interface Worklet {};');
+
+ idl_array.add_objects({
+ BaseAudioContext: [],
+ AudioContext: ['context'],
+ OfflineAudioContext: ['new OfflineAudioContext(1, 1, sample_rate)'],
+ OfflineAudioCompletionEvent: [
+ 'new OfflineAudioCompletionEvent("", {renderedBuffer: buffer})'
+ ],
+ AudioBuffer: ['buffer'],
+ AudioNode: [],
+ AudioParam: ['new AudioBufferSourceNode(context).playbackRate'],
+ AudioScheduledSourceNode: [],
+ AnalyserNode: ['new AnalyserNode(context)'],
+ AudioBufferSourceNode: ['new AudioBufferSourceNode(context)'],
+ AudioDestinationNode: ['context.destination'],
+ AudioListener: ['context.listener'],
+ AudioProcessingEvent: [`new AudioProcessingEvent('', {
+ playbackTime: 0, inputBuffer: buffer, outputBuffer: buffer
+ })`],
+ BiquadFilterNode: ['new BiquadFilterNode(context)'],
+ ChannelMergerNode: ['new ChannelMergerNode(context)'],
+ ChannelSplitterNode: ['new ChannelSplitterNode(context)'],
+ ConstantSourceNode: ['new ConstantSourceNode(context)'],
+ ConvolverNode: ['new ConvolverNode(context)'],
+ DelayNode: ['new DelayNode(context)'],
+ DynamicsCompressorNode: ['new DynamicsCompressorNode(context)'],
+ GainNode: ['new GainNode(context)'],
+ IIRFilterNode: [
+ 'new IIRFilterNode(context, {feedforward: [1], feedback: [1]})'
+ ],
+ MediaElementAudioSourceNode: [
+ 'new MediaElementAudioSourceNode(context, {mediaElement: new Audio})'
+ ],
+ MediaStreamAudioDestinationNode: [
+ 'new MediaStreamAudioDestinationNode(context)'
+ ],
+ MediaStreamAudioSourceNode: [],
+ MediaStreamTrackAudioSourceNode: [],
+ OscillatorNode: ['new OscillatorNode(context)'],
+ PannerNode: ['new PannerNode(context)'],
+ PeriodicWave: ['new PeriodicWave(context)'],
+ ScriptProcessorNode: ['context.createScriptProcessor()'],
+ StereoPannerNode: ['new StereoPannerNode(context)'],
+ WaveShaperNode: ['new WaveShaperNode(context)'],
+ AudioWorklet: ['context.audioWorklet'],
+ AudioWorkletGlobalScope: [],
+ AudioParamMap: ['worklet_node.parameters'],
+ AudioWorkletNode: ['worklet_node'],
+ AudioWorkletProcessor: [],
+ });
+
+ self.sample_rate = 44100;
+ self.context = new AudioContext;
+ self.buffer = new AudioBuffer({length: 1, sampleRate: sample_rate});
+ await context.audioWorklet.addModule(
+ 'the-audio-api/the-audioworklet-interface/processors/dummy-processor.js');
+ self.worklet_node = new AudioWorkletNode(context, 'dummy');
+ },
+ 'Test driver'
+);
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html
index dae58c97fe7..96b99a2373b 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html
@@ -38,7 +38,7 @@
let nodeOptions = {};
nodeOptions[attrName] = -1;
new PannerNode(context, nodeOptions);
- }, prefix + '-1})').throw('RangeError');
+ }, prefix + '-1})').throw(RangeError);
if (options.isZeroAllowed) {
should(function() {
@@ -51,7 +51,7 @@
let nodeOptions = {};
nodeOptions[attrName] = 0;
new PannerNode(context, nodeOptions);
- }, prefix + '0})').throw('RangeError');
+ }, prefix + '0})').throw(RangeError);
}
// The smallest representable positive single float.
@@ -67,7 +67,7 @@
panner = new PannerNode(context);
should(function() {
panner[attrName] = -1;
- }, prefix + '-1').throw('RangeError');
+ }, prefix + '-1').throw(RangeError);
if (options.isZeroAllowed) {
should(function() {
@@ -76,7 +76,7 @@
} else {
should(function() {
panner[attrName] = 0;
- }, prefix + '0').throw('RangeError');
+ }, prefix + '0').throw(RangeError);
}
should(function() {
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/control_click.py b/tests/wpt/web-platform-tests/webdriver/tests/actions/control_click.py
index f9d4448dfad..2ec819b772f 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/control_click.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/actions/control_click.py
@@ -18,7 +18,7 @@ def test_control_click(session, test_actions_page, key_chain, mouse_chain, modif
outer = session.find.css("#outer", all=False)
mouse_chain.click(element=outer)
session.actions.perform([key_chain.dict, mouse_chain.dict])
- if os == "windows_nt":
+ if os == "windows":
expected = [
{"type": "mousemove"},
{"type": "mousedown"},
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/keys.py b/tests/wpt/web-platform-tests/webdriver/tests/actions/support/keys.py
index 7c71a87bc69..51313242590 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/keys.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/actions/support/keys.py
@@ -15,9 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-"""
-The Keys implementation.
-"""
+"""The Keys implementation."""
from inspect import getmembers
import sys
@@ -27,7 +25,7 @@ class Keys(object):
"""
Set of special keys codes.
- See also https://w3c.github.io/webdriver/webdriver-spec.html#h-keyboard-actions
+ See also https://w3c.github.io/webdriver/#h-keyboard-actions
"""
NULL = u"\ue000"
@@ -742,7 +740,7 @@ ALL_EVENTS = {
}
}
-if sys.platform == 'darwin':
+if sys.platform == "mac":
MODIFIER_KEY = Keys.META
else:
MODIFIER_KEY = Keys.CONTROL
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py
index ca5056f6d1a..0785b24eb61 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py
@@ -334,7 +334,7 @@ def test_negative_x_y(session):
# On macOS, windows can only be moved off the screen on the
# horizontal axis. The system menu bar also blocks windows from
# being moved to (0,0).
- elif os == "darwin":
+ elif os == "mac":
assert_success(response, {"x": -8,
"y": 23,
"width": original["width"],
@@ -342,7 +342,7 @@ def test_negative_x_y(session):
# It turns out that Windows is the only platform on which the
# window can be reliably positioned off-screen.
- elif os == "windows_nt":
+ elif os == "windows":
assert_success(response, {"x": -8,
"y": -8,
"width": original["width"],
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.html
index 97205714f07..347603cef6e 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.html
@@ -162,7 +162,6 @@
'Expect receiver.track to be instance of MediaStreamTrack');
assert_equals(track.kind, 'audio');
- assert_equals(track.label, 'remote audio');
assert_equals(track.readyState, 'live');
assert_equals(track.muted, true);
@@ -207,7 +206,6 @@
'Expect receiver.track to be instance of MediaStreamTrack');
assert_equals(track.kind, 'video');
- assert_equals(track.label, 'remote video');
assert_equals(track.readyState, 'live');
assert_equals(track.muted, true);
@@ -270,7 +268,6 @@
assert_equals(receiverTrack.kind, 'audio',
`receiver.track should have the same kind as added track's kind`);
- assert_equals(receiverTrack.label, 'remote audio');
assert_equals(receiverTrack.readyState, 'live');
assert_equals(receiverTrack.muted, true);
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-transceivers.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-transceivers.https.html
new file mode 100644
index 00000000000..3f4e5080059
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-transceivers.https.html
@@ -0,0 +1,496 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerConnection-transceivers.https.html</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="RTCPeerConnection-helper.js"></script>
+<script>
+'use strict';
+
+// The following helper functions are called from RTCPeerConnection-helper.js:
+// addEventListenerPromise
+
+function createPeerConnectionWithCleanup(t) {
+ const pc = new RTCPeerConnection();
+ t.add_cleanup(() => pc.close());
+ return pc;
+}
+
+async function createTrackWithCleanup(t, kind = 'audio') {
+ let constraints = {};
+ constraints[kind] = true;
+ const stream = await navigator.mediaDevices.getUserMedia(constraints);
+ const [track] = stream.getTracks();
+ t.add_cleanup(() => track.stop());
+ return track;
+}
+
+function findTransceiverForSender(pc, sender) {
+ const transceivers = pc.getTransceivers();
+ for (let i = 0; i < transceivers.length; ++i) {
+ if (transceivers[i].sender == sender)
+ return transceivers[i];
+ }
+ return null;
+}
+
+// Performs an offer exchange pc1 -> pc2.
+async function exchangeOffer(pc1, pc2) {
+ const offer = await pc1.createOffer();
+ await pc1.setLocalDescription(offer);
+ await pc2.setRemoteDescription(offer);
+}
+
+// The returned promise is resolved with pc2's ontrack event.
+async function exchangeOfferAndListenToOntrack(t, pc1, pc2) {
+ const ontrackPromise = addEventListenerPromise(t, pc2, 'track');
+ await exchangeOffer(pc1, pc2);
+ return ontrackPromise;
+}
+
+// Performs an answer exchange pc2 -> pc1.
+async function exchangeAnswer(pc1, pc2) {
+ const answer = await pc2.createAnswer();
+ await pc2.setLocalDescription(answer);
+ await pc1.setRemoteDescription(answer);
+}
+
+// The returned promise is resolved with pc1's ontrack event.
+async function exchangeAnswerAndListenToOntrack(t, pc1, pc2) {
+ const ontrackPromise = addEventListenerPromise(t, pc1, 'track');
+ await exchangeAnswer(pc1, pc2);
+ return ontrackPromise;
+}
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const sender = pc.addTrack(track);
+ const transceiver = findTransceiverForSender(pc, sender);
+ assert_true(transceiver instanceof RTCRtpTransceiver);
+ assert_true(transceiver.sender instanceof RTCRtpSender);
+ assert_equals(transceiver.sender, sender);
+}, 'addTrack: creates a transceiver for the sender');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ assert_array_equals(pc.getTransceivers(), [transceiver],
+ 'pc.getTransceivers() equals [transceiver]');
+ assert_array_equals(pc.getSenders(), [transceiver.sender],
+ 'pc.getSenders() equals [transceiver.sender]');
+ assert_array_equals(pc.getReceivers(), [transceiver.receiver],
+ 'pc.getReceivers() equals [transceiver.receiver]');
+}, 'addTrack: "transceiver == {sender,receiver}"');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ assert_true(transceiver.sender.track instanceof MediaStreamTrack,
+ 'transceiver.sender.track instanceof MediaStreamTrack');
+ assert_equals(transceiver.sender.track, track,
+ 'transceiver.sender.track == track');
+}, 'addTrack: transceiver.sender is associated with the track');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ assert_true(transceiver.receiver instanceof RTCRtpReceiver,
+ 'transceiver.receiver instanceof RTCRtpReceiver');
+ assert_true(transceiver.receiver.track instanceof MediaStreamTrack,
+ 'transceiver.receiver.track instanceof MediaStreamTrack');
+ assert_not_equals(transceiver.receiver.track, track,
+ 'transceiver.receiver.track != track');
+}, 'addTrack: transceiver.receiver has its own track');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ assert_true(transceiver.receiver.track.muted);
+}, 'addTrack: transceiver.receiver\'s track is muted');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ assert_equals(transceiver.mid, null);
+}, 'addTrack: transceiver is not associated with an m-section');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ assert_false(transceiver.stopped);
+}, 'addTrack: transceiver is not stopped');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ assert_equals(transceiver.direction, 'sendrecv');
+}, 'addTrack: transceiver\'s direction is sendrecv');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ assert_equals(transceiver.currentDirection, null);
+}, 'addTrack: transceiver\'s currentDirection is null');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ await pc.setLocalDescription(await pc.createOffer());
+ assert_not_equals(transceiver.mid, null, 'transceiver.mid != null');
+}, 'setLocalDescription(offer): transceiver gets associated with an m-section');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc, pc.addTrack(track));
+ const offer = await pc.createOffer();
+ await pc.setLocalDescription(offer);
+ let sdp = offer.sdp;
+ let sdpMidLineStart = sdp.indexOf('a=mid:');
+ let sdpMidLineEnd = sdp.indexOf('\r\n', sdpMidLineStart);
+ assert_true(sdpMidLineStart != -1 && sdpMidLineEnd != -1,
+ 'Failed to parse offer SDP for a=mid');
+ let parsedMid = sdp.substring(sdpMidLineStart + 6, sdpMidLineEnd);
+ assert_equals(transceiver.mid, parsedMid, 'transceiver.mid == parsedMid');
+}, 'setLocalDescription(offer): transceiver.mid matches the offer SDP');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ pc1.addTrack(await createTrackWithCleanup(t));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_true(trackEvent instanceof RTCTrackEvent,
+ 'trackEvent instanceof RTCTrackEvent');
+ assert_true(trackEvent.track instanceof MediaStreamTrack,
+ 'trackEvent.track instanceof MediaStreamTrack');
+}, 'setRemoteDescription(offer): ontrack fires with a track');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ pc1.addTrack(track);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_true(trackEvent.track instanceof MediaStreamTrack,
+ 'trackEvent.track instanceof MediaStreamTrack');
+ assert_equals(trackEvent.track.id, track.id,
+ 'trackEvent.track.id == track.id');
+}, 'setRemoteDescription(offer): ontrack\'s track.id is the same as track.id');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ pc1.addTrack(await createTrackWithCleanup(t));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_true(trackEvent.transceiver instanceof RTCRtpTransceiver,
+ 'trackEvent.transceiver instanceof RTCRtpTransceiver');
+}, 'setRemoteDescription(offer): ontrack fires with a transceiver.');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc1, pc1.addTrack(track));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(transceiver.mid, trackEvent.transceiver.mid);
+}, 'setRemoteDescription(offer): transceiver.mid is the same on both ends');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ pc1.addTrack(await createTrackWithCleanup(t));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ const transceiver = trackEvent.transceiver;
+ assert_array_equals(pc2.getTransceivers(), [transceiver],
+ 'pc2.getTransceivers() equals [transceiver]');
+ assert_array_equals(pc2.getSenders(), [transceiver.sender],
+ 'pc2.getSenders() equals [transceiver.sender]');
+ assert_array_equals(pc2.getReceivers(), [transceiver.receiver],
+ 'pc2.getReceivers() equals [transceiver.receiver]');
+}, 'setRemoteDescription(offer): "transceiver == {sender,receiver}"');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ pc1.addTrack(await createTrackWithCleanup(t));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(trackEvent.transceiver.direction, 'recvonly');
+}, 'setRemoteDescription(offer): transceiver.direction is recvonly');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ pc1.addTrack(await createTrackWithCleanup(t));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(trackEvent.transceiver.currentDirection, null);
+}, 'setRemoteDescription(offer): transceiver.currentDirection is null');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ pc1.addTrack(await createTrackWithCleanup(t));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_false(trackEvent.transceiver.stopped);
+}, 'setRemoteDescription(offer): transceiver.stopped is false');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ pc1.addTrack(await createTrackWithCleanup(t));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ const transceiver = trackEvent.transceiver;
+ assert_equals(transceiver.currentDirection, null,
+ 'SRD(offer): transciever.currentDirection is null');
+ await pc2.setLocalDescription(await pc2.createAnswer());
+ assert_equals(transceiver.currentDirection, 'recvonly',
+ 'SLD(answer): transciever.currentDirection is recvonly');
+}, 'setLocalDescription(answer): transceiver.currentDirection is recvonly');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = findTransceiverForSender(pc1, pc1.addTrack(track));
+ const pc2 = createPeerConnectionWithCleanup(t);
+ await exchangeOffer(pc1, pc2);
+ assert_equals(transceiver.currentDirection, null,
+ 'SLD(offer): transciever.currentDirection is null');
+ await exchangeAnswer(pc1, pc2);
+ assert_equals(transceiver.currentDirection, 'sendonly',
+ 'SRD(answer): transciever.currentDirection is sendonly');
+}, 'setLocalDescription(answer): transceiver.currentDirection is sendonly');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver(track);
+ assert_true(transceiver instanceof RTCRtpTransceiver);
+ assert_true(transceiver.sender instanceof RTCRtpSender);
+ assert_true(transceiver.receiver instanceof RTCRtpReceiver);
+ assert_equals(transceiver.sender.track, track);
+}, 'addTransceiver(track): creates a transceiver for the track');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver(track);
+ assert_array_equals(pc.getTransceivers(), [transceiver],
+ 'pc.getTransceivers() equals [transceiver]');
+ assert_array_equals(pc.getSenders(), [transceiver.sender],
+ 'pc.getSenders() equals [transceiver.sender]');
+ assert_array_equals(pc.getReceivers(), [transceiver.receiver],
+ 'pc.getReceivers() equals [transceiver.receiver]');
+}, 'addTransceiver(track): "transceiver == {sender,receiver}"');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver(track, {direction:'inactive'});
+ assert_equals(transceiver.direction, 'inactive');
+}, 'addTransceiver(track, init): initialize direction to inactive');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const otherPc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver(track, {
+ sendEncodings: [{active:false}]
+ });
+
+ // Negotiate parameters.
+ const offer = await pc.createOffer();
+ await pc.setLocalDescription(offer);
+ await otherPc.setRemoteDescription(offer);
+ const answer = await otherPc.createAnswer();
+ await otherPc.setLocalDescription(answer);
+ await pc.setRemoteDescription(answer);
+
+ const params = transceiver.sender.getParameters();
+ assert_false(params.encodings[0].active);
+}, 'addTransceiver(track, init): initialize sendEncodings[0].active to false');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ pc1.addTransceiver(track, {streams:[]});
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(trackEvent.streams.length, 0, 'trackEvent.streams.length == 0');
+}, 'addTransceiver(0 streams): ontrack fires with no stream');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const stream = new MediaStream();
+ pc1.addTransceiver(track, {streams:[stream]});
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(trackEvent.streams.length, 1, 'trackEvent.streams.length == 1');
+ assert_equals(trackEvent.streams[0].id, stream.id,
+ 'trackEvent.streams[0].id == stream.id');
+}, 'addTransceiver(1 stream): ontrack fires with corresponding stream');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const stream0 = new MediaStream();
+ const stream1 = new MediaStream();
+ pc1.addTransceiver(track, {streams:[stream0, stream1]});
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(trackEvent.streams.length, 2, 'trackEvent.streams.length == 2');
+ assert_equals(trackEvent.streams[0].id, stream0.id,
+ 'trackEvent.streams[0].id == stream0.id');
+ assert_equals(trackEvent.streams[1].id, stream1.id,
+ 'trackEvent.streams[1].id == stream1.id');
+}, 'addTransceiver(2 streams): ontrack fires with corresponding two streams');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ pc1.addTrack(track);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(trackEvent.streams.length, 0, 'trackEvent.streams.length == 0');
+}, 'addTrack(0 streams): ontrack fires with no stream');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const stream = new MediaStream();
+ pc1.addTrack(track, stream);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(trackEvent.streams.length, 1, 'trackEvent.streams.length == 1');
+ assert_equals(trackEvent.streams[0].id, stream.id,
+ 'trackEvent.streams[0].id == stream.id');
+}, 'addTrack(1 stream): ontrack fires with corresponding stream');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const stream0 = new MediaStream();
+ const stream1 = new MediaStream();
+ pc1.addTrack(track, stream0, stream1);
+ const trackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ assert_equals(trackEvent.streams.length, 2, 'trackEvent.streams.length == 2');
+ assert_equals(trackEvent.streams[0].id, stream0.id,
+ 'trackEvent.streams[0].id == stream0.id');
+ assert_equals(trackEvent.streams[1].id, stream1.id,
+ 'trackEvent.streams[1].id == stream1.id');
+}, 'addTrack(2 streams): ontrack fires with corresponding two streams');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver('audio');
+ assert_equals(transceiver.direction, 'sendrecv');
+}, 'addTransceiver(\'audio\'): creates a transceiver with direction sendrecv');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver('audio');
+ assert_equals(transceiver.receiver.track.kind, 'audio');
+}, 'addTransceiver(\'audio\'): transceiver.receiver.track.kind == \'audio\'');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver('video');
+ assert_equals(transceiver.receiver.track.kind, 'video');
+}, 'addTransceiver(\'video\'): transceiver.receiver.track.kind == \'video\'');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver('audio');
+ assert_equals(transceiver.sender.track, null);
+}, 'addTransceiver(\'audio\'): transceiver.sender.track == null');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver('audio');
+ assert_equals(transceiver.currentDirection, null);
+}, 'addTransceiver(\'audio\'): transceiver.currentDirection is null');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const transceiver = pc.addTransceiver('audio');
+ assert_false(transceiver.stopped);
+}, 'addTransceiver(\'audio\'): transceiver.stopped is false');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t, 'audio');
+ const transceiver = pc.addTransceiver('audio');
+ const sender = pc.addTrack(track);
+ assert_equals(sender, transceiver.sender, 'sender == transceiver.sender');
+ assert_equals(sender.track, track, 'sender.track == track');
+}, 'addTrack reuses reusable transceivers');
+
+promise_test(async t => {
+ const pc = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t, 'audio');
+ const t1 = pc.addTransceiver('audio');
+ const t2 = pc.addTransceiver(track);
+ assert_not_equals(t2, t1, 't2 != t1');
+ assert_equals(t2.sender.track, track, 't2.sender.track == track');
+}, 'addTransceiver does not reuse reusable transceivers');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t);
+ const pc1Transceiver = findTransceiverForSender(pc1, pc1.addTrack(track));
+ const pc2TrackEvent = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
+ const pc2Transceiver = pc2TrackEvent.transceiver;
+ assert_equals(pc2Transceiver.direction, 'recvonly',
+ 'pc2Transceiver.direction is recvonly after SRD(offer)');
+ const pc2Sender = pc2.addTrack(track);
+ assert_equals(pc2Transceiver.sender, pc2Sender,
+ 'pc2Transceiver.sender == sender');
+ assert_equals(pc2Transceiver.direction, 'sendrecv',
+ 'pc2Transceiver.direction is sendrecv after addTrack()');
+ assert_equals(pc2Transceiver.currentDirection, null,
+ 'pc2Transceiver.currentDirection is null before answer');
+ const pc1TrackEvent = await exchangeAnswerAndListenToOntrack(t, pc1, pc2);
+ assert_equals(pc2Transceiver.currentDirection, 'sendrecv',
+ 'pc2Transceiver.currentDirection is sendrecv after SLD(answer)');
+ assert_equals(pc1TrackEvent.transceiver, pc1Transceiver,
+ 'Answer: pc1.ontrack fires with the existing transceiver.');
+ assert_equals(pc1Transceiver.currentDirection, 'sendrecv',
+ 'pc1Transceiver.currentDirection is sendrecv');
+ assert_equals(pc2.getTransceivers().length, 1,
+ 'pc2.getTransceivers().length == 1');
+ assert_equals(pc1.getTransceivers().length, 1,
+ 'pc1.getTransceivers().length == 1');
+}, 'Can setup two-way call using a single transceiver');
+
+promise_test(async t => {
+ const pc1 = createPeerConnectionWithCleanup(t);
+ const pc2 = createPeerConnectionWithCleanup(t);
+ const track = await createTrackWithCleanup(t, 'audio');
+ const transceiver = pc1.addTransceiver(track);
+ await exchangeOffer(pc1, pc2);
+ await exchangeAnswer(pc1, pc2);
+ assert_equals(transceiver.currentDirection, 'sendonly');
+ assert_false(transceiver.stopped);
+ pc1.close();
+ assert_equals(transceiver.currentDirection, null);
+ assert_true(transceiver.stopped);
+}, 'Closing the PC stops the transceivers');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/webstorage/idlharness.html b/tests/wpt/web-platform-tests/webstorage/idlharness.html
deleted file mode 100644
index efff83029b3..00000000000
--- a/tests/wpt/web-platform-tests/webstorage/idlharness.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-<title>Web Storage IDL tests</title>
-<link rel="author" title="W3C" href="http://www.w3.org/" />
-<link rel="help" href="http://www.w3.org/TR/webstorage/#storage"/>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-</head>
-<body>
-<h1>Web Storage IDL tests</h1>
-<div id="log"></div>
-
-<pre id='untested_idl' style='display:none'>
-[Global=Window, Exposed=Window]
-interface Window {
-};
-</pre>
-
-<pre id='idl'>
-interface Storage {
- readonly attribute unsigned long length;
- DOMString? key(unsigned long index);
- getter DOMString? getItem(DOMString key);
- setter void setItem(DOMString key, DOMString value);
- deleter void removeItem(DOMString key);
- void clear();
-};
-[NoInterfaceObject]
-interface WindowSessionStorage {
- readonly attribute Storage sessionStorage;
-};
-Window implements WindowSessionStorage;
-[NoInterfaceObject]
-interface WindowLocalStorage {
- readonly attribute Storage localStorage;
-};
-Window implements WindowLocalStorage;
-[Constructor(DOMString type, optional StorageEventInit eventInitDict)]
-interface StorageEvent : Event {
- readonly attribute DOMString? key;
- readonly attribute DOMString? oldValue;
- readonly attribute DOMString? newValue;
- readonly attribute DOMString url;
- readonly attribute Storage? storageArea;
-};
-
-dictionary StorageEventInit : EventInit {
- DOMString? key;
- DOMString? oldValue;
- DOMString? newValue;
- DOMString url;
- Storage? storageArea;
-};
-</pre>
-
-<script>
-function do_test([html, dom]) {
- var idl_array = new IdlArray();
-
- idl_array.add_untested_idls(dom, { only: ['Event', 'EventInit'] });
- idl_array.add_untested_idls(html, { only: ['EventStorageInit'] });
- idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
- idl_array.add_idls(document.getElementById("idl").textContent);
-
- idl_array.add_objects({Storage: ["window.localStorage"]});
-
- idl_array.test();
-}
-
-function fetch_text(url) {
- return fetch(url).then(response => response.text());
-}
-
-promise_test(function () {
- return Promise.all(['/interfaces/html.idl', '/interfaces/dom.idl'].map(fetch_text)).then(do_test);
-}, 'webstorage interfaces');
-</script>
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/webstorage/idlharness.window.js b/tests/wpt/web-platform-tests/webstorage/idlharness.window.js
new file mode 100644
index 00000000000..7a6f16a094e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webstorage/idlharness.window.js
@@ -0,0 +1,30 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// http://www.w3.org/TR/webstorage/#storage
+
+idl_test(
+ [], [], // Srcs + deps manually handled below.
+ async idl_array => {
+ const [html, dom] = await Promise.all(['html', 'dom']
+ .map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
+ idl_array.add_idls(html, {
+ only: [
+ 'Storage',
+ 'WindowSessionStorage',
+ 'WindowLocalStorage',
+ 'StorageEvent',
+ 'StorageEventInit',
+ ]});
+ idl_array.add_dependency_idls(dom);
+
+ idl_array.add_objects({
+ Storage: [
+ 'localStorage',
+ 'sessionStorage',
+ ],
+ StorageEvent: ['new StorageEvent("storage")']
+ });
+ },
+ 'webstorage interfaces'
+);
diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js
index 5adf0a2ba85..eaa788798be 100644
--- a/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js
+++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js
@@ -1,3 +1,25 @@
+// These tests rely on the User Agent providing an implementation of the
+// WebXR Testing API (https://github.com/immersive-web/webxr-test-api).
+//
+// In Chromium-based browsers, this implementation is provided by a JavaScript
+// shim in order to reduce the amount of test-only code shipped to users. To
+// enable these tests the browser must be run with these options:
+//
+// --enable-blink-features=MojoJS,MojoJSTest
+
+function xr_promise_test(func, name, properties) {
+ promise_test(async (t) => {
+ // Perform any required test setup:
+
+ if (window.XRTest === undefined) {
+ // Chrome setup
+ await loadChromiumResources;
+ }
+
+ return func(t);
+ }, name, properties);
+}
+
// This functions calls a callback with each API object as specified
// by https://immersive-web.github.io/webxr/spec/latest/, allowing
// checks to be made on all ojects.
@@ -25,4 +47,32 @@ function forEachWebxrObject(callback) {
callback(window.XRStageBoundsPoint, 'XRStageBoundsPoint');
callback(window.XRSessionEvent, 'XRSessionEvent');
callback(window.XRCoordinateSystemEvent, 'XRCoordinateSystemEvent');
-} \ No newline at end of file
+}
+
+// Code for loading test api in chromium.
+let loadChromiumResources = Promise.resolve().then(() => {
+ if (!MojoInterfaceInterceptor) {
+ // Do nothing on non-Chromium-based browsers or when the Mojo bindings are
+ // not present in the global namespace.
+ return;
+ }
+
+ let chain = Promise.resolve();
+ ['/gen/layout_test_data/mojo/public/js/mojo_bindings.js',
+ '/gen/ui/gfx/geometry/mojo/geometry.mojom.js',
+ '/gen/mojo/public/mojom/base/time.mojom.js',
+ '/gen/device/vr/public/mojom/vr_service.mojom.js',
+ '/resources/chromium/webxr-test.js', '/resources/testdriver.js',
+ '/resources/testdriver-vendor.js',
+ ].forEach(path => {
+ let script = document.createElement('script');
+ script.src = path;
+ script.async = false;
+ chain = chain.then(() => new Promise(resolve => {
+ script.onload = () => resolve();
+ }));
+ document.head.appendChild(script);
+ });
+
+ return chain;
+}); \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/webxr/xrSession_exclusive_requestAnimationFrame.https.html b/tests/wpt/web-platform-tests/webxr/xrSession_exclusive_requestAnimationFrame.https.html
new file mode 100644
index 00000000000..010ab0b127e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webxr/xrSession_exclusive_requestAnimationFrame.https.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<body>
+ <script src=/resources/testharness.js></script>
+ <script src=/resources/testharnessreport.js></script>
+ <script src="resources/webxr_util.js"></script>
+ <canvas id="webgl-canvas"></canvas>
+
+ <script>
+
+ const identityMatrix = new Float32Array([
+ 1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1
+ ]);
+
+ const rightFakeXRViewInit =
+ {eye:"right", projectionMatrix: identityMatrix, viewMatrix: identityMatrix};
+
+ const leftFakeXRViewInit =
+ {eye:"left", projectionMatrix: identityMatrix, viewMatrix: identityMatrix};
+
+ const immersiveFakeXRDeviceInit = { supportsImmersive:true };
+
+ const webglCanvas = document.getElementById('webgl-canvas');
+ let gl = webglCanvas.getContext('webgl', { alpha: false, antialias: false });
+
+ let testDevice;
+ let testDeviceController;
+ let testSession;
+
+ xr_promise_test(
+ (t) => XRTest.simulateDeviceConnection(immersiveFakeXRDeviceInit)
+ .then((controller) => {
+ testDeviceController = controller;
+ return navigator.xr.requestDevice();
+ })
+ .then((device) => {
+ testDevice = device;
+ return gl.setCompatibleXRDevice(device);
+ })
+ .then(() => new Promise((resolve, reject) => {
+ // Perform the session request in a user gesture.
+ XRTest.simulateUserActivation(() => {
+ testDevice.requestSession({ immersive: true })
+ .then((session) => {
+ testSession = session;
+ return session.requestFrameOfReference('eye-level');
+ })
+ .then((frameOfRef) => {
+ // Session must have a baseLayer or frame requests will be ignored.
+ testSession.baseLayer = new XRWebGLLayer(testSession, gl);
+
+ function onFrame(time, xrFrame) {
+ assert_true(xrFrame instanceof XRFrame);
+
+ assert_not_equals(xrFrame.views, null);
+ assert_equals(xrFrame.views.length, 2);
+
+ let devicePose = xrFrame.getDevicePose(frameOfRef);
+
+ assert_not_equals(devicePose, null);
+ for(let i = 0; i < identityMatrix.length; i++) {
+ assert_equals(devicePose.poseModelMatrix[i], identityMatrix[i]);
+ }
+
+ assert_not_equals(devicePose.getViewMatrix(xrFrame.views[0]), null);
+ assert_equals(devicePose.getViewMatrix(xrFrame.views[0]).length, 16);
+ assert_not_equals(devicePose.getViewMatrix(xrFrame.views[1]), null);
+ assert_equals(devicePose.getViewMatrix(xrFrame.views[1]).length, 16);
+
+ // Test does not complete until the returned promise resolves.
+ resolve();
+ }
+
+ testDeviceController.setXRPresentationFrameData(
+ identityMatrix,
+ [rightFakeXRViewInit, leftFakeXRViewInit]
+ );
+
+ testSession.requestAnimationFrame(onFrame);
+ }).catch((err) => {
+ reject("Session was rejected with error: "+err);
+ });
+ });
+ })
+ ),
+ "RequestAnimationFrame resolves with good data"
+ );
+ </script>
+</body>