diff options
Diffstat (limited to 'tests')
61 files changed, 1114 insertions, 284 deletions
diff --git a/tests/wpt/metadata/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm.ini b/tests/wpt/metadata/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm.ini deleted file mode 100644 index 6dc919e21b1..00000000000 --- a/tests/wpt/metadata/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[canvas_complexshapes_arcto_001.htm] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm.ini b/tests/wpt/metadata/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm.ini deleted file mode 100644 index dc36d46fa9c..00000000000 --- a/tests/wpt/metadata/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[canvas_complexshapes_beziercurveto_001.htm] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini index 3b874fc1748..6a3af4e2ece 100644 --- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini @@ -14,6 +14,9 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL + [Revoke blob URL after calling fetch, fetch should succeed] + expected: FAIL + [url-with-fetch.any.html] [Untitled] @@ -34,6 +37,3 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL - [Revoke blob URL after calling fetch, fetch should succeed] - expected: FAIL - diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 3d023211792..0c87f8f92fc 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -133963,6 +133963,18 @@ {} ] ], + "css/css-multicol/with-custom-layout-on-same-element.https.html": [ + [ + "css/css-multicol/with-custom-layout-on-same-element.https.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-multicol/zero-column-width-layout.html": [ [ "css/css-multicol/zero-column-width-layout.html", @@ -139799,6 +139811,18 @@ {} ] ], + "css/css-ruby/ruby-base-different-size.html": [ + [ + "css/css-ruby/ruby-base-different-size.html", + [ + [ + "/css/css-ruby/ruby-base-different-size-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-ruby/ruby-layout-internal-boxes.html": [ [ "css/css-ruby/ruby-layout-internal-boxes.html", @@ -254586,6 +254610,9 @@ "css/css-ruby/root-ruby-ref.xhtml": [ [] ], + "css/css-ruby/ruby-base-different-size-ref.html": [ + [] + ], "css/css-ruby/ruby-layout-internal-boxes-ref.html": [ [] ], @@ -273375,6 +273402,9 @@ "html/semantics/forms/autofocus/resources/child-autofocus.html": [ [] ], + "html/semantics/forms/autofocus/resources/utils.js": [ + [] + ], "html/semantics/forms/constraints/support/validator.js": [ [] ], @@ -274701,9 +274731,6 @@ "images/broken.png": [ [] ], - "images/canvas-line.png": [ - [] - ], "images/clear-100x50.png": [ [] ], @@ -274950,6 +274977,9 @@ "infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini": [ [] ], + "infrastructure/metadata/infrastructure/assumptions/document-fonts-ready.html.ini": [ + [] + ], "infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini": [ [] ], @@ -274965,6 +274995,9 @@ "infrastructure/metadata/infrastructure/expected-fail/timeout.html.ini": [ [] ], + "infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini": [ + [] + ], "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [ [] ], @@ -275013,6 +275046,12 @@ "infrastructure/metadata/infrastructure/server/title.any.js.ini": [ [] ], + "infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini": [ + [] + ], + "infrastructure/metadata/infrastructure/server/wpt-server-websocket.sub.html.ini": [ + [] + ], "infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini": [ [] ], @@ -279888,6 +279927,9 @@ "resources/test/tests/unit/IdlDictionary/test_partial_dictionary.html": [ [] ], + "resources/test/tests/unit/IdlInterface/constructors.html": [ + [] + ], "resources/test/tests/unit/IdlInterface/default_to_json_operation.html": [ [] ], @@ -282564,6 +282606,9 @@ "svg/struct/reftests/reference/green-100x100.svg": [ [] ], + "svg/struct/scripted/blank.svg": [ + [] + ], "svg/styling/render/transform-box-ref.svg": [ [] ], @@ -314043,6 +314088,12 @@ {} ] ], + "css/CSS2/linebox/video-needs-layout-crash.html": [ + [ + "css/CSS2/linebox/video-needs-layout-crash.html", + {} + ] + ], "css/CSS2/normal-flow/auto-margins-root-element.html": [ [ "css/CSS2/normal-flow/auto-margins-root-element.html", @@ -315015,6 +315066,12 @@ {} ] ], + "css/css-animations/keyframes-remove-documentElement-crash.html": [ + [ + "css/css-animations/keyframes-remove-documentElement-crash.html", + {} + ] + ], "css/css-animations/parsing/animation-delay-computed.html": [ [ "css/css-animations/parsing/animation-delay-computed.html", @@ -321009,6 +321066,12 @@ {} ] ], + "css/css-multicol/with-custom-layout-on-same-element-crash.https.html": [ + [ + "css/css-multicol/with-custom-layout-on-same-element-crash.https.html", + {} + ] + ], "css/css-multicol/zero-column-width-computed-style.html": [ [ "css/css-multicol/zero-column-width-computed-style.html", @@ -358415,6 +358478,12 @@ {} ] ], + "html/semantics/forms/autofocus/supported-elements.html": [ + [ + "html/semantics/forms/autofocus/supported-elements.html", + {} + ] + ], "html/semantics/forms/constraints/form-validation-checkValidity.html": [ [ "html/semantics/forms/constraints/form-validation-checkValidity.html", @@ -365401,7 +365470,9 @@ "import-maps/bare.sub.tentative.html": [ [ "import-maps/bare.sub.tentative.html", - {} + { + "timeout": "long" + } ] ], "import-maps/builtin-empty.tentative.html": [ @@ -365662,6 +365733,12 @@ {} ] ], + "infrastructure/expected-fail/uncaught-exception.html": [ + [ + "infrastructure/expected-fail/uncaught-exception.html", + {} + ] + ], "infrastructure/server/context.any.js": [ [ "infrastructure/server/context.any.html", @@ -405557,6 +405634,12 @@ {} ] ], + "svg/struct/scripted/autofocus-attribute.svg": [ + [ + "svg/struct/scripted/autofocus-attribute.svg", + {} + ] + ], "svg/styling/required-properties.svg": [ [ "svg/styling/required-properties.svg", @@ -445267,7 +445350,7 @@ "support" ], "2dcontext/building-paths/canvas_complexshapes_arcto_001-ref.htm": [ - "6fc212ea482063bfeb88cff14d9829fdd2684669", + "31ddfcafd9d1e4ba0c29b4297d7f2050f5cc8435", "support" ], "2dcontext/building-paths/canvas_complexshapes_arcto_001.htm": [ @@ -445275,7 +445358,7 @@ "reftest" ], "2dcontext/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm": [ - "935e84c5c85229fe95582575124feb8b87a20664", + "6be08c0b3c8378cf73e2d115f44b5a46529ddb27", "support" ], "2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm": [ @@ -477023,7 +477106,7 @@ "testharness" ], "content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html": [ - "7c95f47aff880d5818331b5020dacf39a5fc6839", + "d222743049e3777cbece37b6bbc3b717b6eca262", "testharness" ], "content-security-policy/style-src/inline-style-allowed.sub.html": [ @@ -505474,6 +505557,10 @@ "21451a04fa5e9618276e0e518e82bbb7bb64b21d", "reftest" ], + "css/CSS2/linebox/video-needs-layout-crash.html": [ + "b8c52edf8272abc6f7c30372b1d37e9545d08c74", + "testharness" + ], "css/CSS2/lists/counter-increment-003.xht": [ "ec01daee98f0871caca224a76ff27905b2a25853", "visual" @@ -541078,6 +541165,10 @@ "6e7697b9d81db6888077318389e1d70964241b3c", "testharness" ], + "css/css-animations/keyframes-remove-documentElement-crash.html": [ + "aba7f9c6edd71d4a2b9446fb6de890866c41da64", + "testharness" + ], "css/css-animations/parsing/animation-delay-computed.html": [ "832466ac0642616c28bdb4aebad8833e6a4c92d0", "testharness" @@ -568842,6 +568933,14 @@ "59843ae54b64f6ce4f7e616d4be491c911ea84cf", "support" ], + "css/css-multicol/with-custom-layout-on-same-element-crash.https.html": [ + "7e1c804258ab54290047a4b712f0bff613acd168", + "testharness" + ], + "css/css-multicol/with-custom-layout-on-same-element.https.html": [ + "5388b08cde3936088978f09ccb0fd438347421e1", + "reftest" + ], "css/css-multicol/zero-column-width-computed-style.html": [ "46d876f1a150c257be9c37d25a4a4c34d2f1d73d", "testharness" @@ -573642,6 +573741,14 @@ "80f49f0dbcf3e3a76ba6f740243e19a5f627bfd2", "visual" ], + "css/css-ruby/ruby-base-different-size-ref.html": [ + "695ab1cdb7125ae75532a58027a361bd882348c4", + "support" + ], + "css/css-ruby/ruby-base-different-size.html": [ + "dcfde6c16eab415d24c5c1f0404c982dc21a98d6", + "reftest" + ], "css/css-ruby/ruby-layout-internal-boxes-ref.html": [ "7c89ee60e980076df9d49ad676cf34b496333831", "support" @@ -584519,7 +584626,7 @@ "reftest" ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html": [ - "becd4638eb068b26c00851390e393026796d7675", + "aa048b512e940511030631f2c379aaa995e6b868", "reftest" ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html": [ @@ -625431,7 +625538,7 @@ "support" ], "fetch/api/resources/preflight.py": [ - "1843c74c88e200986af1ac0ecf5921456020ffe0", + "d2249606db624892dab96fc9484a9e274947b859", "support" ], "fetch/api/resources/redirect-empty-location.py": [ @@ -630567,7 +630674,7 @@ "support" ], "html/cross-origin-opener-policy/coop-navigated-popup.https.html": [ - "0b51512c221d9035bac5a99b83b661af2fc65d5a", + "9a92dd9bde885e9e3ee19c6e4ef93a0e7b82e418", "testharness" ], "html/cross-origin-opener-policy/coop-navigated-popup.https.html.headers": [ @@ -641234,6 +641341,14 @@ "afd5601a523ff0a1d60d37b171b2098a38600ace", "support" ], + "html/semantics/forms/autofocus/resources/utils.js": [ + "f3690a633ffb20a09430cf126eab9871fcf03c38", + "support" + ], + "html/semantics/forms/autofocus/supported-elements.html": [ + "cbd21010ffe41eb06d4c95c87ed6c4b87a2e7ab5", + "testharness" + ], "html/semantics/forms/constraints/form-validation-checkValidity.html": [ "2e790c75d82dec2f60f64199ea4e1cba1164bc63", "testharness" @@ -647494,10 +647609,6 @@ "f2581017b43d44664e7137a78c0803554b50f3b1", "support" ], - "images/canvas-line.png": [ - "30f8f4540560939e1295cccb0c665b9ced908ad4", - "support" - ], "images/clear-100x50.png": [ "eeedd0ff05889ffd4468bf19a2e8e9e0a094201c", "support" @@ -647695,7 +647806,7 @@ "testharness" ], "import-maps/bare.sub.tentative.html": [ - "5bfb6b52072338568397a8dfac3a98a90c70b34b", + "cf99589f9bd56730423880d6fd4f93df293e6ddf", "testharness" ], "import-maps/bare/__dir__.headers": [ @@ -648026,12 +648137,20 @@ "29ff348a9af645ff59d860e91af9534e64a606c5", "testharness" ], + "infrastructure/expected-fail/uncaught-exception.html": [ + "4442d513753112fac2e35855268d0b246f01fa09", + "testharness" + ], "infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini": [ "f9be6a64bdfd7ca033fda2a9cd1bdb105836df20", "support" ], + "infrastructure/metadata/infrastructure/assumptions/document-fonts-ready.html.ini": [ + "d074292053b6d580efda36155c1d82af699494bc", + "support" + ], "infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini": [ - "5bb1bf554ccbc73a605f4364c59b91aa59a7ee87", + "4be883a5cf7ab6869e2e9235acca37549a9045b8", "support" ], "infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini": [ @@ -648050,6 +648169,10 @@ "53b281f8358c4f90aab96c731076439ccb5567b4", "support" ], + "infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini": [ + "0bcdd374f2521b6534208ab750a1c0d36e7dd7ca", + "support" + ], "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [ "81aef049cd122f7332c66f5a087947e512a59d0e", "support" @@ -648095,11 +648218,11 @@ "support" ], "infrastructure/metadata/infrastructure/server/context.any.js.ini": [ - "ff57a138029ca49e7e63d9dd27e25288709c61f3", + "9667d4d251e8b1915ae2c979766343babd3a0235", "support" ], "infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini": [ - "e4a96de0e8f60fbbd48676deb59bd8ba85f99133", + "a62ae82b9bec778832cea5e3a95ea069b11b49fc", "support" ], "infrastructure/metadata/infrastructure/server/order-of-metas.window.js.ini": [ @@ -648107,15 +648230,23 @@ "support" ], "infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini": [ - "f483bca13f6b372774e1494c75455cd075ba0313", + "0a602b9ae264d92c75a06e79085c20faf4a65e5d", "support" ], "infrastructure/metadata/infrastructure/server/title.any.js.ini": [ - "cbae6b15410e13433c4a9fadd8c2a8cc5fbc4fdc", + "6f7fed9dc062dbde3d73ea233f18f0f56d8e056c", + "support" + ], + "infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini": [ + "e2f26c7e4b697c77c5ee195cad763279bd1ecde0", + "support" + ], + "infrastructure/metadata/infrastructure/server/wpt-server-websocket.sub.html.ini": [ + "2cc364b610987ad5938c822287eb76079c2af2a3", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini": [ - "ee1217860b88bab3aa41966f4034c99c124cdb46", + "c34584ceec64be446532118dd12853106880c76f", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [ @@ -648123,23 +648254,23 @@ "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini": [ - "bcd78da24446a9802755a13525be90e3fa0f43fc", + "894f4a11df81be8e164898ab2091e1cc64175290", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [ - "04b97a7198c75ba941d315716483aad216e1a283", + "baf2116bad6b5cd258e07d29e2115c6aab11e099", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini": [ - "da47a2a0b6f7b7b019c3ae20e349f37c00b8e0bc", + "657d2a2492605557dcc62f02dca36364cf3007fd", "support" ], "infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini": [ - "42c98117c58bbe7b9201d1883e0c1649898b5570", + "a39640b714b838a391f227ac58278ba991fbce66", "support" ], "infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini": [ - "0b01c8369a56495d0dbf07540efb9d7a8d979790", + "3e43b63af9545f2828efd2f7ce510bbc9a87bbfc", "support" ], "infrastructure/reftest-wait-ref.html": [ @@ -648943,7 +649074,7 @@ "support" ], "interfaces/web-nfc.idl": [ - "76ed6f0d959e1bfcc31325ce8aff657b06fa9de7", + "5107cf3b577ba2677226fd215e38cf40cc81d88a", "support" ], "interfaces/web-share.idl": [ @@ -651871,7 +652002,7 @@ "testharness" ], "mediacapture-streams/MediaStream-removetrack.https.html": [ - "b934397914f39cee6bb9a52915959233c0ca84ca", + "1e9ebbcefa800d3a2662ea90f2f040a7d0554285", "testharness" ], "mediacapture-streams/MediaStream-supported-by-feature-policy.html": [ @@ -673643,7 +673774,7 @@ "support" ], "resources/idlharness.js": [ - "e7a3abbec44778f8882a763374f25ced0d6cedf0", + "f68ad1dd7d81e54bea5f9004284eff49a713a32e", "support" ], "resources/idlharness.js.headers": [ @@ -673890,6 +674021,10 @@ "d6137f6895f0a88f4652afdb80de2f0965a5d345", "support" ], + "resources/test/tests/unit/IdlInterface/constructors.html": [ + "93cc7f42cc5588f7f8f0cb4cfcdb45731ddcf8a9", + "support" + ], "resources/test/tests/unit/IdlInterface/default_to_json_operation.html": [ "e03ea8b03874ce7acffdc78463ab7cf33ad226d0", "support" @@ -674023,7 +674158,7 @@ "support" ], "resources/webidl2/lib/webidl2.js": [ - "900694b095df7f6a4b791ea41e096744d06a6089", + "c60a456c3241655d05a7e40f82b19d8735d017d4", "support" ], "resources/webidl2/lib/webidl2.js.headers": [ @@ -683646,6 +683781,14 @@ "9c1fd49083ae55b5a6743c9da4b4ecab46683b2c", "reftest" ], + "svg/struct/scripted/autofocus-attribute.svg": [ + "6c095a4bef5045d7aa19e8197ad3950448b166bc", + "testharness" + ], + "svg/struct/scripted/blank.svg": [ + "9e560bdc5feddc1ae76e3950e89efc1c31dc9269", + "support" + ], "svg/styling/render/transform-box-ref.svg": [ "b41f8bb2a7baac19d907c378a0e269b9a8e914fb", "support" @@ -694099,7 +694242,7 @@ "testharness" ], "webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html": [ - "935ceeb715edd2ffdeb7979d6824736fa82b6d2f", + "97684b2131277f61095c414230f76f06db85d06e", "testharness" ], "webaudio/the-audio-api/the-convolvernode-interface/realtime-conv.html": [ diff --git a/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini new file mode 100644 index 00000000000..5496474410b --- /dev/null +++ b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini @@ -0,0 +1,2 @@ +[mix-blend-mode-animation.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini new file mode 100644 index 00000000000..e6e1f29e274 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini @@ -0,0 +1,2 @@ +[matchMedia-display-none-iframe.html] + expected: ERROR diff --git a/tests/wpt/metadata/fetch/api/cors/cors-origin.any.js.ini b/tests/wpt/metadata/fetch/api/cors/cors-origin.any.js.ini index 7246b3e076c..d2e2a353f33 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-origin.any.js.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-origin.any.js.ini @@ -2,5 +2,11 @@ [cors-origin] expected: FAIL + [CORS preflight [PUT\] [origin OK\]] + expected: FAIL + [cors-origin.any.html] + [CORS preflight [PUT\] [origin OK\]] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight-not-cors-safelisted.any.js.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight-not-cors-safelisted.any.js.ini index 5e7e455146f..ed09138dde1 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-preflight-not-cors-safelisted.any.js.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight-not-cors-safelisted.any.js.ini @@ -20,6 +20,12 @@ [Need CORS-preflight for accept/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 header] expected: FAIL + [Need CORS-preflight for content-type/text/html header] + expected: FAIL + + [Need CORS-preflight for test/hi header] + expected: FAIL + [cors-preflight-not-cors-safelisted.any.worker.html] [Need CORS-preflight for content-language/@ header] @@ -46,3 +52,9 @@ [cors-preflight-not-cors-safelisted] expected: FAIL + [Need CORS-preflight for content-type/text/html header] + expected: FAIL + + [Need CORS-preflight for test/hi header] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight-star.any.js.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight-star.any.js.ini index 894e0037e36..4be83946479 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-preflight-star.any.js.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight-star.any.js.ini @@ -9,6 +9,12 @@ [CORS that succeeds with credentials: true; method: * (allowed: *); header: *,1 (allowed: *)] expected: FAIL + [CORS that succeeds with credentials: false; method: GET (allowed: get); header: X-Test,1 (allowed: x-test)] + expected: FAIL + + [CORS that succeeds with credentials: false; method: SUPER (allowed: *); header: X-Test,1 (allowed: x-test)] + expected: FAIL + [cors-preflight-star.any.worker.html] type: testharness @@ -24,3 +30,9 @@ [cors-preflight-star] expected: FAIL + [CORS that succeeds with credentials: false; method: GET (allowed: get); header: X-Test,1 (allowed: x-test)] + expected: FAIL + + [CORS that succeeds with credentials: false; method: SUPER (allowed: *); header: X-Test,1 (allowed: x-test)] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight.any.js.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight.any.js.ini index 29972520799..d2e60ed7b85 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-preflight.any.js.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight.any.js.ini @@ -6,6 +6,27 @@ [CORS [PUT\] [several headers\], server allows] expected: FAIL + [CORS [PUT\], server allows] + expected: FAIL + + [CORS [GET\] [x-test-header: allowed\], server allows] + expected: FAIL + + [CORS [PUT\], server allows, check preflight has user agent] + expected: FAIL + + [CORS [DELETE\], server allows] + expected: FAIL + + [CORS [PUT\] [only safe headers\], server allows] + expected: FAIL + + [CORS [NEW\], server allows] + expected: FAIL + + [CORS [PATCH\], server allows] + expected: FAIL + [cors-preflight.any.worker.html] type: testharness @@ -18,3 +39,24 @@ [cors-preflight] expected: FAIL + [CORS [PUT\], server allows] + expected: FAIL + + [CORS [GET\] [x-test-header: allowed\], server allows] + expected: FAIL + + [CORS [PUT\], server allows, check preflight has user agent] + expected: FAIL + + [CORS [DELETE\], server allows] + expected: FAIL + + [CORS [PUT\] [only safe headers\], server allows] + expected: FAIL + + [CORS [NEW\], server allows] + expected: FAIL + + [CORS [PATCH\], server allows] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-redirect-preflight.any.js.ini b/tests/wpt/metadata/fetch/api/cors/cors-redirect-preflight.any.js.ini index 6fdb1b03681..9183717d227 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-redirect-preflight.any.js.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-redirect-preflight.any.js.ini @@ -2,5 +2,95 @@ [cors-redirect-preflight] expected: FAIL + [Redirect 302: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 303: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 302: cors to another cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 308: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 302: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 301: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 307: cors to another cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 301: cors to another cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 307: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 308: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 303: cors to another cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 307: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 301: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 303: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 308: cors to another cors (preflight after redirection success case)] + expected: FAIL + [cors-redirect-preflight.any.html] + [Redirect 302: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 303: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 302: cors to another cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 308: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 302: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 301: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 307: cors to another cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 301: cors to another cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 307: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 308: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 303: cors to another cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 307: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 301: cors to same origin (preflight after redirection success case)] + expected: FAIL + + [Redirect 303: same origin to cors (preflight after redirection success case)] + expected: FAIL + + [Redirect 308: cors to another cors (preflight after redirection success case)] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index 59fb2735072..8773af99c82 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -312,30 +312,15 @@ [<iframe>: separate response Content-Type: */* text/html] expected: FAIL - [<iframe>: combined response Content-Type: text/html */*] - expected: FAIL - - [<iframe>: combined response Content-Type: text/html;" text/plain] - expected: FAIL - [<iframe>: combined response Content-Type: text/html */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" \\" text/plain] - expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL - [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html;" text/plain] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html */*;charset=gbk] + [<iframe>: combined response Content-Type: */* text/html] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*] + [<iframe>: separate response Content-Type: text/html;x=" text/plain] expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini index e67f0406fc3..279734168dc 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -53,3 +53,9 @@ [combined text/javascript ] expected: FAIL + [separate text/javascript x/x] + expected: FAIL + + [separate text/javascript;charset=windows-1252 text/javascript] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index b7052af5b5c..87c807a49ff 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,3 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini deleted file mode 100644 index 51f8272a6de..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[traverse_the_history_3.html] - [Multiple history traversals, last would be aborted] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini deleted file mode 100644 index dc2e45516de..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[traverse_the_history_5.html] - [Multiple history traversals, last would be aborted] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/forms/autofocus/supported-elements.html.ini b/tests/wpt/metadata/html/semantics/forms/autofocus/supported-elements.html.ini new file mode 100644 index 00000000000..5f82bb787e5 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/forms/autofocus/supported-elements.html.ini @@ -0,0 +1,7 @@ +[supported-elements.html] + [Contenteditable element should support autofocus] + expected: FAIL + + [Element with tabindex should support autofocus] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini index 127392316de..702af61a3c4 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini @@ -1,7 +1,11 @@ [form-submission-algorithm.html] + expected: TIMEOUT [If form's firing submission events is true, then return; 'submit' event] expected: FAIL [If form's firing submission events is true, then return; 'invalid' event] expected: FAIL + [Cannot navigate (after constructing the entry list)] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini index 494f0d4a752..aa36a14c6a6 100644 --- a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini +++ b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini @@ -20,3 +20,6 @@ [domainLookupStart should be 0 in cross-origin request.] expected: FAIL + [responseEnd should be greater than 0 in cross-origin request.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini index 66bd350083b..a56bad443a2 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini @@ -1,4 +1,5 @@ [realtimeanalyser-fft-scaling.html] + expected: TIMEOUT [X 2048-point FFT peak position is not equal to 64. Got 0.] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini index e04c9e468b2..dbd302fbd75 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini @@ -44,3 +44,9 @@ [X SNR (19.516378895113107 dB) is not greater than or equal to 65.737. Got 19.516378895113107.] expected: FAIL + [X SNR (-397.2220607922679 dB) is not greater than or equal to 65.737. Got -397.2220607922679.] + expected: FAIL + + [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t1.9724091887474060e-1\t9.5236867666244507e-1\t7.5512775778770447e-1\t7.9289436569253091e-1\t3.8985999999999999e-3\n\t[60\]\t-2.2450675070285797e-1\t-5.8084785938262939e-1\t3.5634110867977142e-1\t6.1348441407448528e-1\t3.8985999999999999e-3\n\t[90\]\t-3.7808802723884583e-1\t-5.9811043739318848e-1\t2.2002241015434265e-1\t3.6786251568070089e-1\t3.8985999999999999e-3\n\t[120\]\t7.6881676912307739e-1\t9.4563448429107666e-1\t1.7681771516799927e-1\t1.8698315057805445e-1\t3.8985999999999999e-3\n\t[151\]\t5.4644601186737418e-4\t-4.1306272149085999e-2\t4.1852718160953373e-2\t1.0132291292202573e+0\t3.8985999999999999e-3\n\t...and 1419 more errors.\n\tMax AbsError of 1.0373208575716874e+22 at index of 39268.\n\t[39268\]\t-1.0373208575716874e+22\t-9.6925276517868042e-1\t1.0373208575716874e+22\t1.0702273904583173e+22\t3.8985999999999999e-3\n\tMax RelError of 1.0702273904583173e+22 at index of 39268.\n\t[39268\]\t-1.0373208575716874e+22\t-9.6925276517868042e-1\t1.0373208575716874e+22\t1.0702273904583173e+22\t3.8985999999999999e-3\n] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_arcto_001-ref.htm b/tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_arcto_001-ref.htm index 6fc212ea482..31ddfcafd9d 100644 --- a/tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_arcto_001-ref.htm +++ b/tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_arcto_001-ref.htm @@ -3,9 +3,20 @@ <head> <title>HTML5 Canvas Test: arcTo() adds to subpath if same point</title> <link rel="author" title="Microsoft" href="http://www.microsoft.com" /> + <script type="text/javascript"> + function runTest() + { + var canvas = document.getElementById("canvas1"); + var ctx = canvas.getContext("2d"); + ctx.moveTo(0, 50); + + ctx.lineTo(100, 50); + ctx.stroke(); + } + </script> </head> - <body> + <body onload="runTest()"> <p>Description: If x1,y1 and x2,y2 are the same point, then arcTo must add x1,y1 to the subpath, and connect that point to x0,y0 with a straight line.</p> - <div><img src="/images/canvas-line.png" alt="line" /></div> + <canvas id="canvas1" width="300" height="150">Browser does not support HTML5 Canvas (test ref).</canvas> </body> </html> diff --git a/tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm b/tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm index 935e84c5c85..6be08c0b3c8 100644 --- a/tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm +++ b/tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm @@ -3,9 +3,30 @@ <head> <title>HTML5 Canvas Test: bezierCurveTo() must ensure subpaths</title> <link rel="author" title="Microsoft" href="http://www.microsoft.com" /> + <script type="text/javascript"> + function runTest() + { + var canvas = document.getElementById("canvas1"); + var ctx = canvas.getContext("2d"); + + ctx.moveTo(65,25) + ctx.bezierCurveTo(65, 25, 65, 25, 65, 65); + ctx.stroke(); + ctx.beginPath(); + + ctx.moveTo(35,25) + ctx.bezierCurveTo(35, 25, 35, 25, 35, 65); + ctx.stroke(); + ctx.beginPath(); + + ctx.moveTo(0,75) + ctx.bezierCurveTo(0, 75, 50, 150, 100, 75); + ctx.stroke(); + } + </script> </head> - <body> + <body onload="runTest()"> <p>Description: bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) must ensure there is a subpath for the point (cp1x,cp1y) if the context has no subpaths, then it must connect the last point in the subpath to the point (x,y).</p> - <div><img src='/images/smiley.png' alt='smiley' /></div> + <canvas id="canvas1" width="300" height="150">Browser does not support HTML5 Canvas (ref test).</canvas> </body> </html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html b/tests/wpt/web-platform-tests/content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html index 7c95f47aff8..d222743049e 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html @@ -111,6 +111,14 @@ test(function() { assert_equals(ops.id, clonedOps.id) }); + test(function() { + let el = document.getElementById("svg"); + assert_equals(el.getAttribute("style"), ""); + el.style.background = violetOps.style.background; + assert_not_equals(el.style.background, ""); + let clone = el.cloneNode(true); + assert_equals(el.style.background, clone.style.background) + }, "non-HTML namespace"); } </script> @@ -131,6 +139,7 @@ <div id="violetOps"> Yet another div. </div> + <svg id="svg" style="background: rgb(238, 130, 238)"></svg> <div id="log"></div> </body> diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/video-needs-layout-crash.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/video-needs-layout-crash.html new file mode 100644 index 00000000000..b8c52edf827 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/video-needs-layout-crash.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<link rel="help" href="https://crbug.com/981602"> +<link rel="author" href="mailto:kojii@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<b>abc<video style="contain:size"></video></b><div contenteditable></div> +<script>test(() => {});</script> diff --git a/tests/wpt/web-platform-tests/css/css-animations/keyframes-remove-documentElement-crash.html b/tests/wpt/web-platform-tests/css/css-animations/keyframes-remove-documentElement-crash.html new file mode 100644 index 00000000000..aba7f9c6edd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-animations/keyframes-remove-documentElement-crash.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>CSS Animations Test: Chrome crash when removing documentElement and @keyframes stylesheet</title> +<link rel="help" href="https://crbug.com/999522"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + @keyframes anim { + from { color: pink } + to { color: purple } + } + div { + animation: notfound 1s; + } +</style> +<div></div> +<script> + test(() => { + document.body.offsetTop; + document.querySelector("style").remove(); + document.documentElement.remove(); + }, "Removing documentElement and @keyframes sheet should not crash."); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-multicol/with-custom-layout-on-same-element-crash.https.html b/tests/wpt/web-platform-tests/css/css-multicol/with-custom-layout-on-same-element-crash.https.html new file mode 100644 index 00000000000..7e1c804258a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/with-custom-layout-on-same-element-crash.https.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=997403"> +<div id="elm" style="display:layout(parent); columns:2; width:10em; height:60px; column-fill:auto; line-height:20px;"> + x + <span> + <div style="display:inline-block;"></div> + </span> + <div style="height:1px;"></div> + <br> +</div> +<script> +</script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + document.body.offsetTop; + elm.style.display = "none"; + document.body.offsetTop; + test(()=> {}, "No crash"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-multicol/with-custom-layout-on-same-element.https.html b/tests/wpt/web-platform-tests/css/css-multicol/with-custom-layout-on-same-element.https.html new file mode 100644 index 00000000000..5388b08cde3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/with-custom-layout-on-same-element.https.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=997403"> +<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#cc"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<meta name="assert" content="column-count and column-width should only apply to block containers, and not tables, flexboxes, grid, custom layout containers, etc."> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display:layout(parent); column-count:2; width:100px; height:100px; background:red;"> + <div style="height:100px; background:green;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-ruby/ruby-base-different-size-ref.html b/tests/wpt/web-platform-tests/css/css-ruby/ruby-base-different-size-ref.html new file mode 100644 index 00000000000..695ab1cdb71 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ruby/ruby-base-different-size-ref.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ja"> +<meta charset="UTF-8"> +<title>CSS Ruby Reference</title> +<link rel="author" title="Xidorn Quan" href="https://www.upsuper.org"> +<link rel="stylesheet" href="/fonts/ahem.css"> +<style> +body { + font: 16px/1 Ahem; + padding: 32px 0; +} +p { + margin: 0; + border: 5px solid blue; +} +ruby { + ruby-align: center; + font-size: 32px; +} +rt { + font-size: 8px; +} +.b { + font-size: 16px; +} +</style> +<p><ruby><rb>X<rb class="b">X<rt>x<rt>x</ruby></p> diff --git a/tests/wpt/web-platform-tests/css/css-ruby/ruby-base-different-size.html b/tests/wpt/web-platform-tests/css/css-ruby/ruby-base-different-size.html new file mode 100644 index 00000000000..dcfde6c16ea --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ruby/ruby-base-different-size.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html lang="ja"> +<meta charset="UTF-8"> +<title>CSS Ruby Test: sizing and positioning of ruby containers when size of ruby bases and the base container differ</title> +<link rel="author" title="Xidorn Quan" href="https://www.upsuper.org"> +<link rel="help" href="https://drafts.csswg.org/css-ruby-1/#ruby-layout"> +<link rel="match" href="ruby-base-different-size-ref.html"> +<link rel="stylesheet" href="/fonts/ahem.css"> +<style> +body { + font: 16px/1 Ahem; + padding: 32px 0; +} +p { + margin: 0; + border: 5px solid blue; +} +ruby { + ruby-align: center; +} +.a { + font-size: 32px; +} +</style> +<p><ruby><rb class="a">X<rb>X<rt>x<rt>x</ruby></p> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html index becd4638eb0..aa048b512e9 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html @@ -1,10 +1,11 @@ <!doctype html> <meta charset=utf-8> <title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> -<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> <meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style> div { font: 25px/1 Ahem; diff --git a/tests/wpt/web-platform-tests/fetch/api/resources/preflight.py b/tests/wpt/web-platform-tests/fetch/api/resources/preflight.py index 1843c74c88e..d2249606db6 100644 --- a/tests/wpt/web-platform-tests/fetch/api/resources/preflight.py +++ b/tests/wpt/web-platform-tests/fetch/api/resources/preflight.py @@ -26,6 +26,11 @@ def main(request, response): response.set_error(400, "No Access-Control-Request-Method header") return "ERROR: No access-control-request-method in preflight!" + # https://github.com/whatwg/fetch/issues/922 + if request.headers.get("Accept", "") != "*/*": + response.set_error(400, "Request does not have 'Accept: */*' header") + return "ERROR: Invalid access in preflight!" + if "control_request_headers" in request.GET: stashed_data['control_request_headers'] = request.headers.get("Access-Control-Request-Headers", None) diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-popup.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-popup.https.html index 0b51512c221..9a92dd9bde8 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-popup.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-popup.https.html @@ -19,7 +19,9 @@ async_test(t => { const channel = new BroadcastChannel(token()); channel.onmessage = t.step_func_done(event => { const payload = event.data; - assert_equals(payload.name, ""); + // The name should be empty, but we're checking the length rather than a + // string comparison to "" to keep the random token out of error messages. + assert_equals(payload.name.length, 0); assert_false(payload.opener); }); const coop = `resources/coop-coep.py?coop=same-origin&coep=&channel=${channel.name}`; diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/utils.js b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/utils.js new file mode 100644 index 00000000000..f3690a633ff --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/utils.js @@ -0,0 +1,27 @@ +'use strict'; + +function waitForEvent(target, type, options) { + return new Promise((resolve, reject) => { + target.addEventListener(type, resolve, options); + }); +} + +function waitForLoad(target) { + return waitForEvent(target, 'load'); +} + +function timeOut(test, ms) { + return new Promise((resolve, reject) => { + test.step_timeout(resolve, ms); + }); +} + +// If an element with autofocus is connected to a document and this function +// is called, the autofocus result is deterministic after returning from the +// function. +// Exception: If the document has script-blocking style sheets, this function +// doesn't work well. +async function waitUntilStableAutofocusState(test) { + // TODO: Update this for https://github.com/web-platform-tests/wpt/pull/17929 + await timeOut(test, 100); +} diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/supported-elements.html b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/supported-elements.html new file mode 100644 index 00000000000..cbd21010ffe --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/supported-elements.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/utils.js"></script> +<script> +"use strict"; + +promise_test(async t => { + let w = window.open('/common/blank.html'); + await waitForLoad(w); + t.add_cleanup(() => { w.close(); }); + w.document.body.innerHTML = '<div contenteditable=true autofocus></div>'; + await waitUntilStableAutofocusState(t); + assert_equals(w.document.activeElement.tagName, 'DIV'); +}, 'Contenteditable element should support autofocus'); + +promise_test(async t => { + let w = window.open('/common/blank.html'); + await waitForLoad(w); + t.add_cleanup(() => { w.close(); }); + w.document.body.innerHTML = '<span tabindex=0></span>'; + await waitUntilStableAutofocusState(t); + assert_equals(w.document.activeElement.tagName, 'SPAN'); +}, 'Element with tabindex should support autofocus'); + +promise_test(async t => { + let w = window.open('/common/blank.html'); + await waitForLoad(w); + t.add_cleanup(() => { w.close(); }); + let element = w.document.createElementNS('uri1', 'prefix:local'); + element.setAttribute('autofocus', ''); + w.document.body.appendChild(element); + await waitUntilStableAutofocusState(t); + assert_equals(w.document.activeElement.tagName, 'BODY'); +}, 'Non-HTMLElement should not support autofocus'); +</script> diff --git a/tests/wpt/web-platform-tests/images/canvas-line.png b/tests/wpt/web-platform-tests/images/canvas-line.png Binary files differdeleted file mode 100644 index 30f8f454056..00000000000 --- a/tests/wpt/web-platform-tests/images/canvas-line.png +++ /dev/null diff --git a/tests/wpt/web-platform-tests/import-maps/bare.sub.tentative.html b/tests/wpt/web-platform-tests/import-maps/bare.sub.tentative.html index 5bfb6b52072..cf99589f9bd 100644 --- a/tests/wpt/web-platform-tests/import-maps/bare.sub.tentative.html +++ b/tests/wpt/web-platform-tests/import-maps/bare.sub.tentative.html @@ -1,4 +1,5 @@ <!DOCTYPE html> +<meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/test-helper.js"></script> diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/uncaught-exception.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/uncaught-exception.html new file mode 100644 index 00000000000..4442d513753 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/uncaught-exception.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Uncaught exception</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +throw new Error("error outside any setup or test"); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/document-fonts-ready.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/document-fonts-ready.html.ini new file mode 100644 index 00000000000..d074292053b --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/document-fonts-ready.html.ini @@ -0,0 +1,4 @@ +[document-fonts-ready.html] + [document.fonts.ready resolves after layout depending on loaded fonts] + expected: + if product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=174030 diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini index 5bb1bf554cc..4be883a5cf7 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini @@ -6,9 +6,9 @@ [Compare CSS span definitions (only valid if pre-reqs pass)] expected: - if product == "safari": FAIL # https://webkit.org/show_bug.cgi?id=187052 + if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=187052 [Compare CSS div definitions (only valid if pre-reqs pass)] expected: - if product == "safari": FAIL # https://webkit.org/show_bug.cgi?id=187052 + if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=187052 diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini new file mode 100644 index 00000000000..0bcdd374f25 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini @@ -0,0 +1,4 @@ +[uncaught-exception.html] + [Uncaught exception] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini index ff57a138029..9667d4d251e 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini @@ -2,4 +2,9 @@ [context] expected: if product == "edge_webdriver": FAIL - if product == "safari": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + +[context.any.serviceworker.html] + [context] + expected: + if product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=200815 diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini index e4a96de0e8f..a62ae82b9be 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini @@ -18,7 +18,7 @@ [foo] expected: if product == "edge_webdriver": FAIL - if product == "safari": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 [order-of-metas.window.html] diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini index f483bca13f6..0a602b9ae26 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini @@ -2,4 +2,9 @@ [secure-context] expected: if product == "edge_webdriver": FAIL - if product == "safari": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + +[secure-context.https.any.serviceworker.html] + [secure-context] + expected: + if product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=200815 diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini index cbae6b15410..6f7fed9dc06 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini @@ -12,7 +12,7 @@ [foobar] expected: - if product == "safari": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 [title.any.worker.html] diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini new file mode 100644 index 00000000000..e2f26c7e4b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini @@ -0,0 +1,20 @@ +[wpt-server-http.sub.html] + [HTTPS protocol, punycode subdomain #1] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [HTTPS protocol, www subdomain #1] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [HTTPS protocol, www subdomain #2] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [HTTPS protocol, www subdomain #3] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [HTTPS protocol, punycode subdomain #2] + expected: + if product == "epiphany" or product == "webkit": FAIL diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/wpt-server-websocket.sub.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/wpt-server-websocket.sub.html.ini new file mode 100644 index 00000000000..2cc364b6109 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/wpt-server-websocket.sub.html.ini @@ -0,0 +1,41 @@ +[wpt-server-websocket.sub.html] + [WSS protocol, www subdomain #3] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, punycode subdomain #1] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, punycode subdomain #2] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, www subdomain #1] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, www subdomain #2] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, www subdomain #3] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, punycode subdomain #1] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, punycode subdomain #2] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, www subdomain #1] + expected: + if product == "epiphany" or product == "webkit": FAIL + + [WSS protocol, www subdomain #2] + expected: + if product == "epiphany" or product == "webkit": FAIL + diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini index ee1217860b8..c34584ceec6 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini @@ -1,6 +1,6 @@ [actionsWithKeyPressed.html] expected: - if product == "safari": ERROR + if product == "safari" or product == "epiphany" or product == "webkit": ERROR [TestDriver actions: actions with key pressed] expected: diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini index bcd78da2444..894f4a11df8 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini @@ -1,3 +1,3 @@ [eventOrder.html] expected: - if product == "safari": ERROR + if product == "safari" or product == "epiphany" or product == "webkit": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini index 04b97a7198c..baf2116bad6 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini @@ -1,3 +1,3 @@ [multiDevice.html] expected: - if product == "safari": ERROR + if product == "safari" or product == "epiphany" or product == "webkit": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini index da47a2a0b6f..657d2a24926 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini @@ -1,3 +1,3 @@ [pause.html] expected: - if product == "safari": ERROR + if product == "epiphany" or product == "webkit": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini index 42c98117c58..a39640b714b 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini @@ -1,3 +1,7 @@ [file_upload.sub.html] expected: if product == "edge_webdriver": ERROR + + [File upload using testdriver] + expected: + if product == "epiphany" or product == "webkit": FAIL diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini index 0b01c8369a5..3e43b63af95 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini @@ -1,4 +1,4 @@ [generate_test_report.html] expected: if product == "firefox": ERROR - if product == "safari": ERROR + if product == "safari" or product == "epiphany" or product == "webkit": ERROR diff --git a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl index 76ed6f0d959..5107cf3b577 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl @@ -70,18 +70,11 @@ dictionary NFCErrorEventInit : EventInit { required DOMException error; }; -enum NDEFCompatibility { - "nfc-forum", - "vendor", - "any" -}; - dictionary NFCPushOptions { NFCPushTarget target = "any"; unrestricted double timeout = Infinity; boolean ignoreRead = true; AbortSignal? signal; - NDEFCompatibility compatibility = "nfc-forum"; }; enum NFCPushTarget { @@ -91,9 +84,8 @@ enum NFCPushTarget { }; dictionary NFCScanOptions { - AbortSignal? signal; USVString url = ""; NDEFRecordType recordType; USVString mediaType = ""; - NDEFCompatibility compatibility = "nfc-forum"; + AbortSignal? signal; }; diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-removetrack.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-removetrack.https.html index b934397914f..1e9ebbcefa8 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-removetrack.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-removetrack.https.html @@ -56,10 +56,15 @@ const doEventsFire = (t, target1, target2, name, ms = 1) => Promise.all([ promise_test(async t => { const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true}); const tracks = stream.getTracks(); - t.add_cleanup(() => tracks.forEach(track => track.stop())); audio.srcObject = video.srcObject = stream; - t.add_cleanup(() => audio.srcObject = video.srcObject = null); + + t.add_cleanup(() => { + for (const track of tracks) { + track.stop(); + } + audio.srcObject = video.srcObject = null; + }); await Promise.all([ new Promise(r => audio.onloadedmetadata = r), @@ -90,10 +95,15 @@ promise_test(async t => { promise_test(async t => { const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true}); const tracks = stream.getTracks(); - t.add_cleanup(() => tracks.forEach(track => track.stop())); audio.srcObject = video.srcObject = stream; - t.add_cleanup(() => audio.srcObject = video.srcObject = null); + + t.add_cleanup(() => { + for (const track of tracks) { + track.stop(); + } + audio.srcObject = video.srcObject = null; + }); await Promise.all([ new Promise(r => audio.onloadedmetadata = r), diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js index e7a3abbec44..f68ad1dd7d8 100644 --- a/tests/wpt/web-platform-tests/resources/idlharness.js +++ b/tests/wpt/web-platform-tests/resources/idlharness.js @@ -1507,6 +1507,17 @@ IdlInterface.prototype.test = function() this.test_members(); }; +// This supports both Constructor extended attributes and constructor +// operations until all idl fragments have been updated. +IdlInterface.prototype.constructors = function() +{ + var extendedAttributes = this.extAttrs + .filter(function(attr) { return attr.name == "Constructor"; }); + var operations = this.members + .filter(function(m) { return m.type == "constructor"; }); + return extendedAttributes.concat(operations); +} + IdlInterface.prototype.test_self = function() { subsetTestByKey(this.name, test, function() @@ -1594,7 +1605,7 @@ IdlInterface.prototype.test_self = function() "prototype of self's property " + format_value(this.name) + " is not Function.prototype"); } - if (!this.has_extended_attribute("Constructor")) { + if (!this.constructors().length) { // "The internal [[Call]] method of the interface object behaves as // follows . . . // @@ -1629,8 +1640,7 @@ IdlInterface.prototype.test_self = function() assert_false(desc.enumerable, this.name + ".length should not be enumerable"); assert_true(desc.configurable, this.name + ".length should be configurable"); - var constructors = this.extAttrs - .filter(function(attr) { return attr.name == "Constructor"; }); + var constructors = this.constructors(); var expected_length = minOverloadLength(constructors); assert_equals(this.get_interface_object().length, expected_length, "wrong value for " + this.name + ".length"); }.bind(this), this.name + " interface object length"); diff --git a/tests/wpt/web-platform-tests/resources/test/tests/unit/IdlInterface/constructors.html b/tests/wpt/web-platform-tests/resources/test/tests/unit/IdlInterface/constructors.html new file mode 100644 index 00000000000..93cc7f42cc5 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/unit/IdlInterface/constructors.html @@ -0,0 +1,25 @@ +<!DOCTYPE HTML> +<title>IdlInterface.prototype.constructors()</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 src="../../../idl-helper.js"></script> +<script> +"use strict"; +test(function() { + var i = interfaceFrom('[Constructor] interface A { };'); + assert_equals(i.constructors().length, 1); +}, 'Interface with Constructor extended attribute.'); + +test(function() { + var i = interfaceFrom('interface A { constructor(); };'); + assert_equals(i.constructors().length, 1); +}, 'Interface with constructor method'); + +test(function() { + var i = interfaceFrom('[Constructor] interface A { constructor(); };'); + assert_equals(i.constructors().length, 2); +}, 'Interface with both'); +</script> diff --git a/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js b/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js index 900694b095d..c60a456c324 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js @@ -103,10 +103,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _lib_webidl2_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return _lib_webidl2_js__WEBPACK_IMPORTED_MODULE_0__["parse"]; }); -/* harmony import */ var _lib_writer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); +/* harmony import */ var _lib_writer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "write", function() { return _lib_writer_js__WEBPACK_IMPORTED_MODULE_1__["write"]; }); -/* harmony import */ var _lib_validator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(30); +/* harmony import */ var _lib_validator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(31); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "validate", function() { return _lib_validator_js__WEBPACK_IMPORTED_MODULE_2__["validate"]; }); @@ -122,16 +122,16 @@ __webpack_require__.r(__webpack_exports__); __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return parse; }); /* harmony import */ var _tokeniser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); -/* harmony import */ var _productions_enum_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); +/* harmony import */ var _productions_enum_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(15); /* harmony import */ var _productions_includes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16); -/* harmony import */ var _productions_extended_attributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11); +/* harmony import */ var _productions_extended_attributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10); /* harmony import */ var _productions_typedef_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17); /* harmony import */ var _productions_callback_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18); /* harmony import */ var _productions_interface_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(19); -/* harmony import */ var _productions_mixin_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(24); -/* harmony import */ var _productions_dictionary_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(25); -/* harmony import */ var _productions_namespace_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(27); -/* harmony import */ var _productions_callback_interface_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(28); +/* harmony import */ var _productions_mixin_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(25); +/* harmony import */ var _productions_dictionary_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(26); +/* harmony import */ var _productions_namespace_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28); +/* harmony import */ var _productions_callback_interface_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(29); @@ -243,6 +243,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "argumentNameKeywords", function() { return argumentNameKeywords; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Tokeniser", function() { return Tokeniser; }); /* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3); +/* harmony import */ var _productions_helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); + // These regular expressions use the sticky flag so they will only match at @@ -270,6 +272,7 @@ const argumentNameKeywords = [ "attribute", "callback", "const", + "constructor", "deleter", "dictionary", "enum", @@ -299,6 +302,7 @@ const nonRegexTerminals = [ "async", "boolean", "byte", + "constructor", "double", "false", "float", @@ -334,6 +338,13 @@ const punctuations = [ "}" ]; +const reserved = [ + // "constructor" is now a keyword + "_constructor", + "toString", + "_toString", +]; + /** * @param {string} str */ @@ -365,9 +376,15 @@ function tokenise(str) { } if (result === -1) { result = attemptTokenMatch("identifier"); - const token = tokens[tokens.length - 1]; - if (result !== -1 && nonRegexTerminals.includes(token.value)) { - token.type = token.value; + const lastIndex = tokens.length - 1; + const token = tokens[lastIndex]; + if (result !== -1) { + if (reserved.includes(token.value)) { + const message = `${Object(_productions_helpers_js__WEBPACK_IMPORTED_MODULE_1__["unescape"])(token.value)} is a reserved identifier and must not be used.`; + throw new WebIDLParseError(Object(_error_js__WEBPACK_IMPORTED_MODULE_0__["syntaxError"])(tokens, lastIndex, null, message)); + } else if (nonRegexTerminals.includes(token.value)) { + token.type = token.value; + } } } } else if (nextChar === '"') { @@ -501,12 +518,13 @@ function lastLine(text) { /** * @typedef {object} WebIDL2ErrorOptions * @property {"error" | "warning"} level + * @property {Function} autofix * * @param {string} message error message * @param {"Syntax" | "Validation"} kind error type * @param {WebIDL2ErrorOptions} [options] */ -function error(source, position, current, message, kind, { level = "error" } = {}) { +function error(source, position, current, message, kind, { level = "error", autofix } = {}) { /** * @param {number} count */ @@ -556,6 +574,7 @@ function error(source, position, current, message, kind, { level = "error" } = { line, sourceName: source.name, level, + autofix, input: subsequentText, tokens: subsequentTokens }; @@ -583,77 +602,6 @@ function validationError(source, token, current, message, options) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Enum", function() { return Enum; }); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); -/* harmony import */ var _token_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7); - - - - -class EnumValue extends _token_js__WEBPACK_IMPORTED_MODULE_1__["Token"] { - /** - * @param {import("../tokeniser").Tokeniser} tokeniser - */ - static parse(tokeniser) { - const value = tokeniser.consume("string"); - if (value) { - return new EnumValue({ source: tokeniser.source, tokens: { value } }); - } - } - - get type() { - return "enum-value"; - } - get value() { - return super.value.slice(1, -1); - } -} - -class Enum extends _base_js__WEBPACK_IMPORTED_MODULE_2__["Base"] { - /** - * @param {import("../tokeniser").Tokeniser} tokeniser - */ - static parse(tokeniser) { - const tokens = {}; - tokens.base = tokeniser.consume("enum"); - if (!tokens.base) { - return; - } - tokens.name = tokeniser.consume("identifier") || tokeniser.error("No name for enum"); - const ret = tokeniser.current = new Enum({ source: tokeniser.source, tokens }); - tokens.open = tokeniser.consume("{") || tokeniser.error("Bodyless enum"); - ret.values = Object(_helpers_js__WEBPACK_IMPORTED_MODULE_0__["list"])(tokeniser, { - parser: EnumValue.parse, - allowDangler: true, - listName: "enumeration" - }); - if (tokeniser.probe("string")) { - tokeniser.error("No comma between enum values"); - } - tokens.close = tokeniser.consume("}") || tokeniser.error("Unexpected value in enum"); - if (!ret.values.length) { - tokeniser.error("No value in enum"); - } - tokens.termination = tokeniser.consume(";") || tokeniser.error("No semicolon after enum"); - return ret; - } - - get type() { - return "enum"; - } - get name() { - return Object(_helpers_js__WEBPACK_IMPORTED_MODULE_0__["unescape"])(this.tokens.name.value); - } -} - - -/***/ }), -/* 5 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unescape", function() { return unescape; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "list", function() { return list; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "const_value", function() { return const_value; }); @@ -664,12 +612,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "type_with_extended_attributes", function() { return type_with_extended_attributes; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "return_type", function() { return return_type; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stringifier", function() { return stringifier; }); -/* harmony import */ var _type_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); -/* harmony import */ var _argument_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9); -/* harmony import */ var _token_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13); -/* harmony import */ var _extended_attributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11); -/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(14); -/* harmony import */ var _attribute_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(15); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autofixAddExposedWindow", function() { return autofixAddExposedWindow; }); +/* harmony import */ var _type_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); +/* harmony import */ var _argument_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8); +/* harmony import */ var _token_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12); +/* harmony import */ var _extended_attributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10); +/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(13); +/* harmony import */ var _attribute_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(14); +/* harmony import */ var _tokeniser_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2); + @@ -838,19 +789,42 @@ function stringifier(tokeniser) { return member; } +/** + * @param {object} def + * @param {import("./extended-attributes.js").ExtendedAttributes} def.extAttrs + */ +function autofixAddExposedWindow(def) { + return () => { + if (def.extAttrs.length){ + const tokeniser = new _tokeniser_js__WEBPACK_IMPORTED_MODULE_6__["Tokeniser"]("Exposed=Window,"); + const exposed = _extended_attributes_js__WEBPACK_IMPORTED_MODULE_3__["SimpleExtendedAttribute"].parse(tokeniser); + exposed.tokens.separator = tokeniser.consume(","); + const existing = def.extAttrs[0]; + if (!/^\s/.test(existing.tokens.name.trivia)) { + existing.tokens.name.trivia = ` ${existing.tokens.name.trivia}`; + } + def.extAttrs.unshift(exposed); + } else { + def.extAttrs = _extended_attributes_js__WEBPACK_IMPORTED_MODULE_3__["ExtendedAttributes"].parse(new _tokeniser_js__WEBPACK_IMPORTED_MODULE_6__["Tokeniser"]("[Exposed=Window]")); + def.extAttrs.tokens.open.trivia = def.tokens.base.trivia; + def.tokens.base.trivia = " "; + } + }; +} + /***/ }), -/* 6 */ +/* 5 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Type", function() { return Type; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); /* harmony import */ var _tokeniser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2); /* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3); -/* harmony import */ var _validators_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8); +/* harmony import */ var _validators_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7); @@ -1028,7 +1002,7 @@ class Type extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { /***/ }), -/* 7 */ +/* 6 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1060,30 +1034,20 @@ class Base { /***/ }), -/* 8 */ +/* 7 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dictionaryWithinUnion", function() { return dictionaryWithinUnion; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "idlTypeIncludesDictionary", function() { return idlTypeIncludesDictionary; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "referencesTypedef", function() { return referencesTypedef; }); -/** - * Yields direct references to dictionary within union. - */ -function* dictionaryWithinUnion(subtypes, defs) { - for (const subtype of subtypes) { - const def = defs.unique.get(subtype.idlType); - if (def && def.type === "dictionary") { - yield subtype; - } - } -} - /** + * @param {*} idlType + * @param {*[]} defs + * @param {object} [options] + * @param {boolean} [options.useNullableInner] use when the input idlType is nullable and you want to use its inner type * @return the type reference that ultimately includes dictionary. */ -function idlTypeIncludesDictionary(idlType, defs) { +function idlTypeIncludesDictionary(idlType, defs, { useNullableInner } = {}) { if (!idlType.union) { const def = defs.unique.get(idlType.idlType); if (!def) { @@ -1103,7 +1067,7 @@ function idlTypeIncludesDictionary(idlType, defs) { return idlType; } } - if (def.type === "dictionary") { + if (def.type === "dictionary" && (useNullableInner || !idlType.nullable)) { return idlType; } } @@ -1118,29 +1082,21 @@ function idlTypeIncludesDictionary(idlType, defs) { } } -/** - * @return true if the idlType directly references a typedef. - */ -function referencesTypedef(idlType, defs) { - const result = defs.unique.get(idlType.idlType); - return result && result.type === "typedef"; -} - /***/ }), -/* 9 */ +/* 8 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Argument", function() { return Argument; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _default_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10); -/* harmony import */ var _extended_attributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _default_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9); +/* harmony import */ var _extended_attributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4); /* harmony import */ var _tokeniser_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2); /* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3); -/* harmony import */ var _validators_helpers_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(8); +/* harmony import */ var _validators_helpers_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7); @@ -1189,29 +1145,39 @@ class Argument extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { *validate(defs) { yield* this.idlType.validate(defs); - if (Object(_validators_helpers_js__WEBPACK_IMPORTED_MODULE_6__["idlTypeIncludesDictionary"])(this.idlType, defs)) { - if (this.optional && !this.default) { - const message = `Optional dictionary arguments must have a default value of \`{}\`.`; - yield Object(_error_js__WEBPACK_IMPORTED_MODULE_5__["validationError"])(this.source, this.tokens.name, this, message); - } + if (Object(_validators_helpers_js__WEBPACK_IMPORTED_MODULE_6__["idlTypeIncludesDictionary"])(this.idlType, defs, { useNullableInner: true })) { if (this.idlType.nullable) { const message = `Dictionary arguments cannot be nullable.`; yield Object(_error_js__WEBPACK_IMPORTED_MODULE_5__["validationError"])(this.source, this.tokens.name, this, message); + } else if (this.optional && !this.default) { + const message = `Optional dictionary arguments must have a default value of \`{}\`.`; + yield Object(_error_js__WEBPACK_IMPORTED_MODULE_5__["validationError"])(this.source, this.tokens.name, this, message, { + autofix: autofixOptionalDictionaryDefaultValue(this) + }); } } } } +/** + * @param {Argument} arg + */ +function autofixOptionalDictionaryDefaultValue(arg) { + return () => { + arg.default = _default_js__WEBPACK_IMPORTED_MODULE_1__["Default"].parse(new _tokeniser_js__WEBPACK_IMPORTED_MODULE_4__["Tokeniser"](" = {}")); + }; +} + /***/ }), -/* 10 */ +/* 9 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Default", function() { return Default; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); @@ -1254,15 +1220,16 @@ class Default extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { /***/ }), -/* 11 */ +/* 10 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SimpleExtendedAttribute", function() { return SimpleExtendedAttribute; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExtendedAttributes", function() { return ExtendedAttributes; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _array_base_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _array_base_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); /* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3); @@ -1390,7 +1357,7 @@ class ExtendedAttributes extends _array_base_js__WEBPACK_IMPORTED_MODULE_1__["Ar /***/ }), -/* 12 */ +/* 11 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1408,13 +1375,13 @@ class ArrayBase extends Array { /***/ }), -/* 13 */ +/* 12 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Token", function() { return Token; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); class Token extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { @@ -1438,14 +1405,16 @@ class Token extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { /***/ }), -/* 14 */ +/* 13 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Operation", function() { return Operation; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); +/* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3); + @@ -1493,6 +1462,10 @@ class Operation extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { } *validate(defs) { + if (!this.name && ["", "static"].includes(this.special)) { + const message = `Regular or static operations must have both a return type and an identifier.`; + yield Object(_error_js__WEBPACK_IMPORTED_MODULE_2__["validationError"])(this.source, this.tokens.open, this, message); + } if (this.idlType) { yield* this.idlType.validate(defs); } @@ -1504,14 +1477,14 @@ class Operation extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { /***/ }), -/* 15 */ +/* 14 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Attribute", function() { return Attribute; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); @@ -1571,14 +1544,85 @@ class Attribute extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { /***/ }), +/* 15 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Enum", function() { return Enum; }); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _token_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6); + + + + +class EnumValue extends _token_js__WEBPACK_IMPORTED_MODULE_1__["Token"] { + /** + * @param {import("../tokeniser").Tokeniser} tokeniser + */ + static parse(tokeniser) { + const value = tokeniser.consume("string"); + if (value) { + return new EnumValue({ source: tokeniser.source, tokens: { value } }); + } + } + + get type() { + return "enum-value"; + } + get value() { + return super.value.slice(1, -1); + } +} + +class Enum extends _base_js__WEBPACK_IMPORTED_MODULE_2__["Base"] { + /** + * @param {import("../tokeniser").Tokeniser} tokeniser + */ + static parse(tokeniser) { + const tokens = {}; + tokens.base = tokeniser.consume("enum"); + if (!tokens.base) { + return; + } + tokens.name = tokeniser.consume("identifier") || tokeniser.error("No name for enum"); + const ret = tokeniser.current = new Enum({ source: tokeniser.source, tokens }); + tokens.open = tokeniser.consume("{") || tokeniser.error("Bodyless enum"); + ret.values = Object(_helpers_js__WEBPACK_IMPORTED_MODULE_0__["list"])(tokeniser, { + parser: EnumValue.parse, + allowDangler: true, + listName: "enumeration" + }); + if (tokeniser.probe("string")) { + tokeniser.error("No comma between enum values"); + } + tokens.close = tokeniser.consume("}") || tokeniser.error("Unexpected value in enum"); + if (!ret.values.length) { + tokeniser.error("No value in enum"); + } + tokens.termination = tokeniser.consume(";") || tokeniser.error("No semicolon after enum"); + return ret; + } + + get type() { + return "enum"; + } + get name() { + return Object(_helpers_js__WEBPACK_IMPORTED_MODULE_0__["unescape"])(this.tokens.name.value); + } +} + + +/***/ }), /* 16 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Includes", function() { return Includes; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); @@ -1621,8 +1665,8 @@ class Includes extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Typedef", function() { return Typedef; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); @@ -1664,8 +1708,8 @@ class Typedef extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CallbackFunction", function() { return CallbackFunction; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); @@ -1708,13 +1752,15 @@ class CallbackFunction extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Interface", function() { return Interface; }); /* harmony import */ var _container_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); -/* harmony import */ var _attribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(15); -/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14); +/* harmony import */ var _attribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14); +/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13); /* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21); /* harmony import */ var _iterable_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(22); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4); /* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3); /* harmony import */ var _validators_interface_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(23); +/* harmony import */ var _constructor_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(24); + @@ -1747,6 +1793,7 @@ class Interface extends _container_js__WEBPACK_IMPORTED_MODULE_0__["Container"] inheritable: !partial, allowedMembers: [ [_constant_js__WEBPACK_IMPORTED_MODULE_3__["Constant"].parse], + [_constructor_js__WEBPACK_IMPORTED_MODULE_8__["Constructor"].parse], [static_member], [_helpers_js__WEBPACK_IMPORTED_MODULE_5__["stringifier"]], [_iterable_js__WEBPACK_IMPORTED_MODULE_4__["IterableLike"].parse], @@ -1772,7 +1819,9 @@ To fix, add, for example, \`[Exposed=Window]\`. Please also consider carefully \ if your interface should also be exposed in a Worker scope. Refer to the \ [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \ for more information.`; - yield Object(_error_js__WEBPACK_IMPORTED_MODULE_6__["validationError"])(this.source, this.tokens.name, this, message); + yield Object(_error_js__WEBPACK_IMPORTED_MODULE_6__["validationError"])(this.source, this.tokens.name, this, message, { + autofix: Object(_helpers_js__WEBPACK_IMPORTED_MODULE_5__["autofixAddExposedWindow"])(this) + }); } yield* super.validate(defs); @@ -1790,9 +1839,9 @@ for more information.`; "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Container", function() { return Container; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _extended_attributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _extended_attributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); @@ -1876,9 +1925,9 @@ class Container extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Constant", function() { return Constant; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _type_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _type_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); @@ -1930,8 +1979,8 @@ class Constant extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IterableLike", function() { return IterableLike; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); @@ -2035,12 +2084,49 @@ function* checkInterfaceMemberDuplication(defs, i) { "use strict"; __webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Constructor", function() { return Constructor; }); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); + + + +class Constructor extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { + /** + * @param {import("../tokeniser").Tokeniser} tokeniser + */ + static parse(tokeniser) { + const base = tokeniser.consume("constructor"); + if (!base) { + return; + } + const tokens = { base }; + tokens.open = tokeniser.consume("(") || tokeniser.error("No argument list in constructor"); + const args = Object(_helpers_js__WEBPACK_IMPORTED_MODULE_1__["argument_list"])(tokeniser); + tokens.close = tokeniser.consume(")") || tokeniser.error("Unterminated constructor"); + tokens.termination = tokeniser.consume(";") || tokeniser.error("No semicolon after constructor"); + const ret = new Constructor({ tokens }); + ret.arguments = args; + return ret; + } + + get type() { + return "constructor"; + } +} + + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Mixin", function() { return Mixin; }); /* harmony import */ var _container_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); /* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21); -/* harmony import */ var _attribute_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(15); -/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5); +/* harmony import */ var _attribute_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14); +/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(13); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4); @@ -2075,14 +2161,14 @@ class Mixin extends _container_js__WEBPACK_IMPORTED_MODULE_0__["Container"] { /***/ }), -/* 25 */ +/* 26 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Dictionary", function() { return Dictionary; }); /* harmony import */ var _container_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); -/* harmony import */ var _field_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26); +/* harmony import */ var _field_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27); @@ -2112,16 +2198,16 @@ class Dictionary extends _container_js__WEBPACK_IMPORTED_MODULE_0__["Container"] /***/ }), -/* 26 */ +/* 27 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Field", function() { return Field; }); -/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); -/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); -/* harmony import */ var _extended_attributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11); -/* harmony import */ var _default_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10); +/* harmony import */ var _base_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); +/* harmony import */ var _extended_attributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10); +/* harmony import */ var _default_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9); @@ -2161,16 +2247,18 @@ class Field extends _base_js__WEBPACK_IMPORTED_MODULE_0__["Base"] { /***/ }), -/* 27 */ +/* 28 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Namespace", function() { return Namespace; }); /* harmony import */ var _container_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); -/* harmony import */ var _attribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(15); -/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14); +/* harmony import */ var _attribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14); +/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13); /* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3); +/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4); + @@ -2206,7 +2294,9 @@ To fix, add, for example, [Exposed=Window]. Please also consider carefully \ if your namespace should also be exposed in a Worker scope. Refer to the \ [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \ for more information.`; - yield Object(_error_js__WEBPACK_IMPORTED_MODULE_3__["validationError"])(this.source, this.tokens.name, this, message); + yield Object(_error_js__WEBPACK_IMPORTED_MODULE_3__["validationError"])(this.source, this.tokens.name, this, message, { + autofix: Object(_helpers_js__WEBPACK_IMPORTED_MODULE_4__["autofixAddExposedWindow"])(this) + }); } yield* super.validate(defs); } @@ -2214,14 +2304,14 @@ for more information.`; /***/ }), -/* 28 */ +/* 29 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CallbackInterface", function() { return CallbackInterface; }); /* harmony import */ var _container_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); -/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14); +/* harmony import */ var _operation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13); /* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); @@ -2255,7 +2345,7 @@ class CallbackInterface extends _container_js__WEBPACK_IMPORTED_MODULE_0__["Cont /***/ }), -/* 29 */ +/* 30 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -2274,6 +2364,7 @@ const templates = { reference: noop, type: noop, generic: noop, + nameless: noop, inheritance: noop, definition: noop, extendedAttribute: noop, @@ -2398,7 +2489,7 @@ function write(ast, { templates: ts = templates } = {}) { ] : []; return ts.definition(ts.wrap([ extended_attributes(it.extAttrs), - token(it.tokens.special), + it.tokens.name ? token(it.tokens.special) : token(it.tokens.special, ts.nameless, { data: it, parent }), ...body, token(it.tokens.termination) ]), { data: it, parent }); @@ -2416,6 +2507,17 @@ function write(ast, { templates: ts = templates } = {}) { ]), { data: it, parent }); } + function constructor(it, parent) { + return ts.definition(ts.wrap([ + extended_attributes(it.extAttrs), + token(it.tokens.base, ts.nameless, { data: it, parent }), + token(it.tokens.open), + ts.wrap(it.arguments.map(argument)), + token(it.tokens.close), + token(it.tokens.termination) + ]), { data: it, parent }); + } + function inheritance(inh) { if (!inh.tokens.inheritance) { return ""; @@ -2538,6 +2640,7 @@ function write(ast, { templates: ts = templates } = {}) { namespace: container, operation, attribute, + constructor, dictionary: container, field, const: const_, @@ -2570,7 +2673,7 @@ function write(ast, { templates: ts = templates } = {}) { /***/ }), -/* 30 */ +/* 31 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; diff --git a/tests/wpt/web-platform-tests/svg/struct/scripted/autofocus-attribute.svg b/tests/wpt/web-platform-tests/svg/struct/scripted/autofocus-attribute.svg new file mode 100644 index 00000000000..6c095a4bef5 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/struct/scripted/autofocus-attribute.svg @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml"> + <title>Autofocus attribute</title> + <metadata> + <h:link rel="help" href="https://svgwg.org/svg2-draft/struct.html#autofocusattribute"/> + </metadata> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <h:script src="/html/semantics/forms/autofocus/resources/utils.js"/> + <script><![CDATA[ +const SVG_NS = 'http://www.w3.org/2000/svg'; + +promise_test(async t => { + let w = window.open('blank.svg'); + await waitForLoad(w); + t.add_cleanup(() => { w.close(); }); + const svgA = w.document.createElementNS(SVG_NS, 'a'); + svgA.setAttribute('href', '#'); + svgA.setAttribute('autofocus', 'autofocus'); + w.document.documentElement.appendChild(svgA); + await waitUntilStableAutofocusState(t); + assert_equals(w.document.activeElement, svgA); +}, '<a> should support autofocus'); + +promise_test(async t => { + let w = window.open('blank.svg'); + await waitForLoad(w); + t.add_cleanup(() => { w.close(); }); + const path = w.document.createElementNS(SVG_NS, 'path'); + path.setAttribute('d', 'M0,0h8v8z'); + path.setAttribute('tabindex', '0'); + path.setAttribute('autofocus', 'autofocus'); + w.document.documentElement.appendChild(path); + await waitUntilStableAutofocusState(t); + assert_equals(w.document.activeElement, path); +}, 'Renderable element with tabindex should support autofocus'); + +promise_test(async t => { + let w = window.open('blank.svg'); + await waitForLoad(w); + t.add_cleanup(() => { w.close(); }); + let element = w.document.createElementNS(SVG_NS, 'metadata'); + element.setAttribute('tabindex', '0'); + element.setAttribute('autofocus', 'autofocus'); + w.document.documentElement.appendChild(element); + await waitUntilStableAutofocusState(t); + // https://html.spec.whatwg.org/C/#dom-documentorshadowroot-activeelement + // 6. If candidate's document element is non-null, then return that document + // element. + assert_equals(w.document.activeElement.tagName, 'svg'); +}, 'Never-rendered element with tabindex should not support autofocus'); +]]></script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/struct/scripted/blank.svg b/tests/wpt/web-platform-tests/svg/struct/scripted/blank.svg new file mode 100644 index 00000000000..9e560bdc5fe --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/struct/scripted/blank.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg"></svg> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html index 935ceeb715e..97684b21312 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html @@ -75,6 +75,19 @@ task.done(); }); + audit.define('illegal sample-rate', (task, should) => { + let node; + let options = {buffer: context.createBuffer(1, 1, context.sampleRate / 2)}; + + should( + () => { + node = new ConvolverNode(context, options); + }, + 'node1 = new ConvolverNode(c, ' + JSON.stringify(options)) + .throw(DOMException, 'NotSupportedError'); + + task.done(); + }); audit.define('construct with options', (task, should) => { let buf = context.createBuffer(1, 1, context.sampleRate); |