diff options
author | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2018-07-22 21:05:03 -0400 |
---|---|---|
committer | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2018-07-22 22:39:46 -0400 |
commit | a5af9a106a1a3937dbbcafb2d18c783e5311749c (patch) | |
tree | 09b46fdc3b1c25decafe9bbea5641afcfc636fc5 | |
parent | 4997ec26c27b470bbcaaf0088d32472c3eed800d (diff) | |
download | servo-a5af9a106a1a3937dbbcafb2d18c783e5311749c.tar.gz servo-a5af9a106a1a3937dbbcafb2d18c783e5311749c.zip |
Update web-platform-tests to revision 3f9178031eec5374c9a7d5709a7e11ba4a1955ed
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: <textarea> 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> |