aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2019-09-03 13:38:47 -0400
committerGitHub <noreply@github.com>2019-09-03 13:38:47 -0400
commit618d00be1879b52211bcded28dd6f2d0a3c64a6f (patch)
tree02ce3ba6fb5cc093ce38824fda84ecfb0710cd59
parent4f4e219e54bf43dee47af26b7e6fc0b2c8018159 (diff)
parent33079866c19295d1b8d01bbb241b5233a0fec6a9 (diff)
downloadservo-618d00be1879b52211bcded28dd6f2d0a3c64a6f.tar.gz
servo-618d00be1879b52211bcded28dd6f2d0a3c64a6f.zip
Auto merge of #24127 - servo-wpt-sync:wpt_update_03-09-2019, r=servo-wpt-sync
Sync WPT with upstream (03-09-2019) Automated downstream sync of changes from upstream as of 03-09-2019. [no-wpt-sync] <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/24127) <!-- Reviewable:end -->
-rw-r--r--tests/wpt/metadata/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm.ini3
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini6
-rw-r--r--tests/wpt/metadata/MANIFEST.json205
-rw-r--r--tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini2
-rw-r--r--tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini2
-rw-r--r--tests/wpt/metadata/fetch/api/cors/cors-origin.any.js.ini6
-rw-r--r--tests/wpt/metadata/fetch/api/cors/cors-preflight-not-cors-safelisted.any.js.ini12
-rw-r--r--tests/wpt/metadata/fetch/api/cors/cors-preflight-star.any.js.ini12
-rw-r--r--tests/wpt/metadata/fetch/api/cors/cors-preflight.any.js.ini42
-rw-r--r--tests/wpt/metadata/fetch/api/cors/cors-redirect-preflight.any.js.ini90
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini19
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini6
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/forms/autofocus/supported-elements.html.ini7
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini4
-rw-r--r--tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini3
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini6
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_arcto_001-ref.htm15
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm25
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html9
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/linebox/video-needs-layout-crash.html7
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/keyframes-remove-documentElement-crash.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/with-custom-layout-on-same-element-crash.https.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/with-custom-layout-on-same-element.https.html10
-rw-r--r--tests/wpt/web-platform-tests/css/css-ruby/ruby-base-different-size-ref.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-ruby/ruby-base-different-size.html25
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html3
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/resources/preflight.py5
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coop-navigated-popup.https.html4
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/utils.js27
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/autofocus/supported-elements.html37
-rw-r--r--tests/wpt/web-platform-tests/images/canvas-line.pngbin502 -> 0 bytes
-rw-r--r--tests/wpt/web-platform-tests/import-maps/bare.sub.tentative.html1
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/expected-fail/uncaught-exception.html8
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/document-fonts-ready.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini7
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini7
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini20
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/wpt-server-websocket.sub.html.ini41
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/web-nfc.idl10
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-removetrack.https.html18
-rw-r--r--tests/wpt/web-platform-tests/resources/idlharness.js16
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/unit/IdlInterface/constructors.html25
-rw-r--r--tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js469
-rw-r--r--tests/wpt/web-platform-tests/svg/struct/scripted/autofocus-attribute.svg54
-rw-r--r--tests/wpt/web-platform-tests/svg/struct/scripted/blank.svg2
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html13
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
deleted file mode 100644
index 30f8f454056..00000000000
--- a/tests/wpt/web-platform-tests/images/canvas-line.png
+++ /dev/null
Binary files differ
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);