Update web-platform-tests to revision 064bb25e5e9ab5e08ec39c4fbd1fe6653520595d

This commit is contained in:
WPT Sync Bot 2020-11-14 08:21:25 +00:00
parent f8ebe03dc2
commit d2586450c0
86 changed files with 1092 additions and 282 deletions

View file

@ -1,4 +0,0 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -1,4 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -318,21 +318,18 @@
[<iframe>: combined response Content-Type: text/html */*;charset=gbk] [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain] [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*] [<iframe>: combined response Content-Type: text/html */*]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk] [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL

View file

@ -53,6 +53,6 @@
[combined text/javascript ] [combined text/javascript ]
expected: FAIL expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript] [separate text/javascript x/x]
expected: FAIL expected: FAIL

View file

@ -11,3 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

@ -1,4 +1,4 @@
[traverse_the_history_5.html] [traverse_the_history_2.html]
[Multiple history traversals, last would be aborted] [Multiple history traversals, last would be aborted]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[creating_browsing_context_test_01.html]
[first argument: absolute url]
expected: FAIL

View file

@ -65,3 +65,9 @@
[Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData] [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData]
expected: FAIL expected: FAIL
[Test createImageData(width, height) from e-SRGB canvas ]
expected: FAIL
[Test createImageData(width, height) from SRGB canvas ]
expected: FAIL

View file

@ -1,5 +1,4 @@
[supported-elements.html] [supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus] [Contenteditable element should support autofocus]
expected: FAIL expected: FAIL
@ -10,7 +9,7 @@
expected: FAIL expected: FAIL
[Area element should support autofocus] [Area element should support autofocus]
expected: TIMEOUT expected: FAIL
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: FAIL

View file

@ -171,3 +171,6 @@
[XHTML img usemap="#hash-id"] [XHTML img usemap="#hash-id"]
expected: FAIL expected: FAIL
[HTML (standards) IMG usemap="no-hash-name"]
expected: FAIL

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: FAIL

View file

@ -1,4 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL expected: NOTRUN

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: FAIL

View file

@ -1,4 +0,0 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -0,0 +1,4 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

@ -3,3 +3,6 @@
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL expected: FAIL

View file

@ -269,3 +269,6 @@
[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[28696\]\t-2.5028273606901356e+21\t9.3139332532882690e-1\t2.5028273606901356e+21\t2.6871862752575734e+21\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.5028273606901356e+21 at index of 28696.\n\tMax RelError of 2.6871862752575734e+21 at index of 28696.\n] [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[28696\]\t-2.5028273606901356e+21\t9.3139332532882690e-1\t2.5028273606901356e+21\t2.6871862752575734e+21\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.5028273606901356e+21 at index of 28696.\n\tMax RelError of 2.6871862752575734e+21 at index of 28696.\n]
expected: FAIL 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[28696\]\t-1.0600505888725913e-34\t9.3139332532882690e-1\t9.3139332532882690e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.3139332532882690e-1 at index of 28696.\n\tMax RelError of 1.0000000000000000e+0 at index of 28696.\n]
expected: FAIL

View file

@ -1,4 +1,5 @@
[audiocontext-not-fully-active.html] [audiocontext-not-fully-active.html]
expected: TIMEOUT
[frame in navigated remote-site frame] [frame in navigated remote-site frame]
expected: FAIL expected: FAIL

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[xrWebGLBinding_constructor.https.html]
[Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl2]
expected: FAIL
[Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl]
expected: FAIL

View file

@ -1,2 +0,0 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -22272,13 +22272,6 @@
{} {}
] ]
], ],
"focus-manual.html": [
"391daf7028ce7fdff4f78b542caa2dd7d917a0d2",
[
null,
{}
]
],
"legacy-manual.html": [ "legacy-manual.html": [
"e71273973e615932addc8cd69dc76e3a0cd0a000", "e71273973e615932addc8cd69dc76e3a0cd0a000",
[ [
@ -144316,6 +144309,19 @@
{} {}
] ]
], ],
"position-absolute-scrollbar-freeze.html": [
"ac510f11e9160b1ed646047ed5aa44d2ebaa8a6f",
[
null,
[
[
"/css/css-flexbox/position-absolute-scrollbar-freeze-ref.html",
"=="
]
],
{}
]
],
"position-fixed-001.html": [ "position-fixed-001.html": [
"a3de19d6d9df95a505c547e48dea3de82af44de5", "a3de19d6d9df95a505c547e48dea3de82af44de5",
[ [
@ -302306,7 +302312,13 @@
"broken-symbols-ref.htm": [ "broken-symbols-ref.htm": [
"0247f65d3e0bd0db6de4403e1da90dae2cd42de1", "0247f65d3e0bd0db6de4403e1da90dae2cd42de1",
[] []
] ],
"support": {
"counter-style-testcommon.js": [
"a3615e92ff0678d5e7b2aad0a20076cd1ac07d6e",
[]
]
}
}, },
"css-device-adapt": { "css-device-adapt": {
"META.yml": [ "META.yml": [
@ -303461,6 +303473,10 @@
"2f7e669c72fc263d4b39d7a198d8abafbf54b463", "2f7e669c72fc263d4b39d7a198d8abafbf54b463",
[] []
], ],
"position-absolute-scrollbar-freeze-ref.html": [
"d0bf617951f3a9b5e3ae8e4b77e6ff3762b3cde1",
[]
],
"reference": { "reference": {
"align-baseline-ref.html": [ "align-baseline-ref.html": [
"d5b88e8c7dae73b57c7f993260d7cce363eeebaa", "d5b88e8c7dae73b57c7f993260d7cce363eeebaa",
@ -358021,7 +358037,7 @@
[] []
], ],
"client-navigate-worker.js": [ "client-navigate-worker.js": [
"a96c53bced98f63cca8c97ef74d6be3887cd066f", "6101d5d8f92ccd0ec798c27a2ab1cd33de5fc1bb",
[] []
], ],
"client-navigated-frame.html": [ "client-navigated-frame.html": [
@ -358500,6 +358516,10 @@
"19c7a4b8e561b3d95f10496e92a2c7264d693815", "19c7a4b8e561b3d95f10496e92a2c7264d693815",
[] []
], ],
"import-scripts-cross-origin-worker.sub.js": [
"b432854db8bc7f8292c43434d8c24a3ffe97dec0",
[]
],
"import-scripts-diff-resource-map-worker.js": [ "import-scripts-diff-resource-map-worker.js": [
"0fdcb0fcf80ad7f0dffa284c5b77178bdad95ef6", "0fdcb0fcf80ad7f0dffa284c5b77178bdad95ef6",
[] []
@ -367528,7 +367548,7 @@
] ]
}, },
"requirements.txt": [ "requirements.txt": [
"766b9bd914391f558de2e28999cbfcc3f16db8ca", "7c134b89b9583f9f0584450f20e9665cb80e6445",
[] []
], ],
"requirements_android_webview.txt": [ "requirements_android_webview.txt": [
@ -373878,6 +373898,10 @@
"cb762eff806849df46dc758ef7b98b63f27f54c9", "cb762eff806849df46dc758ef7b98b63f27f54c9",
[] []
], ],
"export-on-load-script.py": [
"6cca411e8a85a7fa0d78ced6b32011bda890b7c3",
[]
],
"export-on-static-import-script.js": [ "export-on-static-import-script.js": [
"3f7174eef0beb68a3f36d66d3ed7a73c9074955c", "3f7174eef0beb68a3f36d66d3ed7a73c9074955c",
[] []
@ -373903,7 +373927,7 @@
[] []
], ],
"import-test-cases.js": [ "import-test-cases.js": [
"c5830e97eebc88b12a5ed1f600e810df443204f8", "8ad89e8fda11a3923e29128f4835928f9a8c2cb6",
[] []
], ],
"nested-dynamic-import-worker.js": [ "nested-dynamic-import-worker.js": [
@ -373919,7 +373943,7 @@
[] []
], ],
"new-worker-window.html": [ "new-worker-window.html": [
"a7bd2eedef6ab6d639f28e063ccd50aefbbb0528", "32a89fae0ecd59ba7c84870c86f4251d057c5339",
[] []
], ],
"post-message-on-load-worker.js": [ "post-message-on-load-worker.js": [
@ -373934,6 +373958,10 @@
"699af684a2366fc0aaa8c1e64abf3240489cf7be", "699af684a2366fc0aaa8c1e64abf3240489cf7be",
[] []
], ],
"redirect.py": [
"396bd4c4b2dfbb6091779b6f4375245c1a4604d8",
[]
],
"static-import-and-then-dynamic-import-worker.js": [ "static-import-and-then-dynamic-import-worker.js": [
"2d857a2e90a11af9f52e5d59d15ee30d225deeaf", "2d857a2e90a11af9f52e5d59d15ee30d225deeaf",
[] []
@ -373946,6 +373974,10 @@
"16f70e9daf4909605746c6614a509afb3cf71ed1", "16f70e9daf4909605746c6614a509afb3cf71ed1",
[] []
], ],
"static-import-redirect-worker.js": [
"8434c1a34e2837c9fde3709ec3d5bed468deeb7e",
[]
],
"static-import-remote-origin-credentials-checker-worker.sub.js": [ "static-import-remote-origin-credentials-checker-worker.sub.js": [
"c543cb49616062dc85fbbe7d885c17ada9646728", "c543cb49616062dc85fbbe7d885c17ada9646728",
[] []
@ -373955,7 +373987,7 @@
[] []
], ],
"static-import-remote-origin-script-worker.sub.js": [ "static-import-remote-origin-script-worker.sub.js": [
"0221a2b8ba775c672d724a9f5946cdc9915db362", "6432dd5d80d0f1c5c05512658dd240f09fa8ae8e",
[] []
], ],
"static-import-same-origin-credentials-checker-worker.js": [ "static-import-same-origin-credentials-checker-worker.js": [
@ -402465,6 +402497,76 @@
] ]
}, },
"css-counter-styles": { "css-counter-styles": {
"counter-style-additive-symbols-syntax.html": [
"41747daede6d1bcef2d5ea7b5cd31a0ae7375e7e",
[
null,
{}
]
],
"counter-style-fallback.html": [
"5c844fbccf36dd8e1a15740e286573a10dc68552",
[
null,
{}
]
],
"counter-style-name-syntax.html": [
"a09bac7bec9f873048f45c13707c153006c257eb",
[
null,
{}
]
],
"counter-style-negative-syntax.html": [
"5314201e5dca1b490ba2eac0d26a00bb4e09bcd5",
[
null,
{}
]
],
"counter-style-pad-syntax.html": [
"18c151f045801b173e327ff067ac6468db933d4f",
[
null,
{}
]
],
"counter-style-prefix-suffix-syntax.html": [
"4f53b9afe648ec0084955147af6533dc7f4c75a6",
[
null,
{}
]
],
"counter-style-range-syntax.html": [
"26cea66a0e858a7d34c12966a72dfe618f0f2dfa",
[
null,
{}
]
],
"counter-style-speak-as-syntax.html": [
"f67896633ff1aecb7069fc3465850890142c2f3a",
[
null,
{}
]
],
"counter-style-symbols-syntax.html": [
"240ce8a16a31722d09452fd578fe3da05ee4a9f9",
[
null,
{}
]
],
"counter-style-system-syntax.html": [
"be593c436bba717042caa26472199fc0424b75da",
[
null,
{}
]
],
"idlharness.html": [ "idlharness.html": [
"e914b41b0e43a1e471af458c94c13690c4559c33", "e914b41b0e43a1e471af458c94c13690c4559c33",
[ [
@ -423013,7 +423115,7 @@
] ]
], ],
"MediaQueryList-addListener-removeListener.html": [ "MediaQueryList-addListener-removeListener.html": [
"1144e3a78322ceb7b49056c0530835bb2301fc30", "c705206bba468b8bd792c7defe1d2071904b441d",
[ [
null, null,
{} {}
@ -460931,7 +461033,7 @@
] ]
], ],
"imageData-colorManagedBehavior.html": [ "imageData-colorManagedBehavior.html": [
"d106904f2e236e2d44a76a7c95066abbf107342c", "737d2b6ec730dbe5a11eb5f92326b75074548536",
[ [
null, null,
{} {}
@ -522186,10 +522288,12 @@
] ]
], ],
"client-navigate.https.html": [ "client-navigate.https.html": [
"6112e37c34ee991094ee8fcbe623e9c1e26f6e7c", "f40a08635cfd1e0345a64228ccab82302439f7dd",
[ [
null, null,
{} {
"timeout": "long"
}
] ]
], ],
"clients-get-client-types.https.html": [ "clients-get-client-types.https.html": [
@ -522763,6 +522867,13 @@
{} {}
] ]
], ],
"import-scripts-cross-origin.https.html": [
"773708a9fbce32a6b17f22d88b9fb6ebc3553710",
[
null,
{}
]
],
"import-scripts-mime-types.https.html": [ "import-scripts-mime-types.https.html": [
"1679831d0f2b98aee22898d820373e80079fbe00", "1679831d0f2b98aee22898d820373e80079fbe00",
[ [
@ -523782,7 +523893,7 @@
] ]
], ],
"getinnerhtml.tentative.html": [ "getinnerhtml.tentative.html": [
"64fd78ba8ed0ca4d465c5a3ef8cb496350c69f7c", "bcf5471b5e9e8748c49fbc899788203ead6fc19a",
[ [
null, null,
{} {}
@ -523817,7 +523928,7 @@
] ]
], ],
"setinnerhtml.tentative.html": [ "setinnerhtml.tentative.html": [
"f99863c7c1fabfbaee11d5cc90cc81d3e4acebff", "076fdac2b0dda4fadfb1584a8b7650f736e7a908",
[ [
null, null,
{} {}
@ -534389,6 +534500,15 @@
"testdriver": true "testdriver": true
} }
] ]
],
"focus.html": [
"7942674a70b7941cd1c23cee1251c43524362d57",
[
null,
{
"testdriver": true
}
]
] ]
}, },
"mouse-events": { "mouse-events": {
@ -546167,6 +546287,13 @@
{} {}
] ]
], ],
"handover.html": [
"378d65ffc320bf0ac6a6a16690dd992d0f5e536d",
[
null,
{}
]
],
"ice-state.https.html": [ "ice-state.https.html": [
"becce59509b792dd5d63571bff065d93185ca1fa", "becce59509b792dd5d63571bff065d93185ca1fa",
[ [
@ -552454,6 +552581,15 @@
} }
] ]
], ],
"layers": {
"xrWebGLBinding_constructor.https.html": [
"b3457cf3203005562785b0a93f8e462c01addbc8",
[
null,
{}
]
]
},
"navigator_xr_sameObject.https.html": [ "navigator_xr_sameObject.https.html": [
"2c3ea541a97301d4dfabe93bc71c8c6d3c50b5d1", "2c3ea541a97301d4dfabe93bc71c8c6d3c50b5d1",
[ [
@ -555024,6 +555160,13 @@
{} {}
] ]
], ],
"dedicated-worker-import-data-url-cross-origin.html": [
"37390947b642ebf1ff80434d6e870a0118d3b0be",
[
null,
{}
]
],
"dedicated-worker-import-data-url.any.js": [ "dedicated-worker-import-data-url.any.js": [
"0d8510da0c24ad378d1215157a70b4fd615a3d94", "0d8510da0c24ad378d1215157a70b4fd615a3d94",
[ [

View file

@ -1,4 +0,0 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -1,4 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -1,4 +0,0 @@
[keepalive.html]
[cross-origin redirect with preflight]
expected: FAIL

View file

@ -318,21 +318,18 @@
[<iframe>: combined response Content-Type: text/html */*;charset=gbk] [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain] [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*] [<iframe>: combined response Content-Type: text/html */*]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk] [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL

View file

@ -53,6 +53,6 @@
[combined text/javascript ] [combined text/javascript ]
expected: FAIL expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript] [separate text/javascript x/x]
expected: FAIL expected: FAIL

View file

@ -11,3 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

@ -1,4 +1,4 @@
[traverse_the_history_5.html] [traverse_the_history_2.html]
[Multiple history traversals, last would be aborted] [Multiple history traversals, last would be aborted]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[creating_browsing_context_test_01.html]
[first argument: absolute url]
expected: FAIL

View file

@ -65,3 +65,9 @@
[Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData] [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData]
expected: FAIL expected: FAIL
[Test createImageData(width, height) from e-SRGB canvas ]
expected: FAIL
[Test createImageData(width, height) from SRGB canvas ]
expected: FAIL

View file

@ -1,5 +1,4 @@
[supported-elements.html] [supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus] [Contenteditable element should support autofocus]
expected: FAIL expected: FAIL
@ -10,7 +9,7 @@
expected: FAIL expected: FAIL
[Area element should support autofocus] [Area element should support autofocus]
expected: TIMEOUT expected: FAIL
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: FAIL

View file

@ -172,3 +172,6 @@
[XHTML img usemap="http://example.org/#garbage-before-hash-id"] [XHTML img usemap="http://example.org/#garbage-before-hash-id"]
expected: FAIL expected: FAIL
[HTML (standards) IMG usemap="no-hash-name"]
expected: FAIL

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: FAIL

View file

@ -1,5 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
type: testharness type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL expected: NOTRUN

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
type: testharness type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: FAIL

View file

@ -1,4 +0,0 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -0,0 +1,4 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

@ -4,3 +4,6 @@
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL expected: FAIL

View file

@ -497,3 +497,6 @@
[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[28696\]\t-2.5028273606901356e+21\t9.3139332532882690e-1\t2.5028273606901356e+21\t2.6871862752575734e+21\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.5028273606901356e+21 at index of 28696.\n\tMax RelError of 2.6871862752575734e+21 at index of 28696.\n] [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[28696\]\t-2.5028273606901356e+21\t9.3139332532882690e-1\t2.5028273606901356e+21\t2.6871862752575734e+21\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.5028273606901356e+21 at index of 28696.\n\tMax RelError of 2.6871862752575734e+21 at index of 28696.\n]
expected: FAIL 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[28696\]\t-1.0600505888725913e-34\t9.3139332532882690e-1\t9.3139332532882690e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.3139332532882690e-1 at index of 28696.\n\tMax RelError of 1.0000000000000000e+0 at index of 28696.\n]
expected: FAIL

View file

@ -1,4 +1,5 @@
[audiocontext-not-fully-active.html] [audiocontext-not-fully-active.html]
expected: TIMEOUT
[frame in navigated remote-site frame] [frame in navigated remote-site frame]
expected: FAIL expected: FAIL

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[xrWebGLBinding_constructor.https.html]
[Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl2]
expected: FAIL
[Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl]
expected: FAIL

View file

@ -1,2 +0,0 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-symbols">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_additive_symbols(value, expected) {
test_valid_counter_style_descriptor('additive-symbols', value, expected);
}
function test_invalid_additive_symbols(value) {
test_invalid_counter_style_descriptor('additive-symbols', value);
}
// [ <integer [0,]> && <symbol> ]#
test_valid_additive_symbols('1 "X"');
test_valid_additive_symbols('"X" 1', '1 "X"');
test_valid_additive_symbols('5 "V", 1 "I"');
test_invalid_additive_symbols('');
// Weights must be non-negative
test_invalid_additive_symbols('-1 "X"');
// Weights must be in strictly decreasing order
test_invalid_additive_symbols('1 "I", 5 "V"');
test_invalid_additive_symbols('1 "X", 1 "Y"');
</script>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-fallback">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_fallback(value) {
test_valid_counter_style_descriptor('fallback', value);
}
function test_invalid_fallback(value) {
test_invalid_counter_style_descriptor('fallback', value);
}
// <counter-style-name>
test_valid_fallback('bar');
// Counter style names are custom identifiers, not strings
test_invalid_fallback('"bar"');
// The following are not valid counter style names
test_invalid_fallback('none');
test_invalid_fallback('initial');
test_invalid_fallback('inherit');
test_invalid_fallback('unset');
</script>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#the-counter-style-rule">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
test_valid_name('foo');
test_invalid_name('');
test_invalid_name('none');
test_invalid_name('initial');
test_invalid_name('inherit');
test_invalid_name('unset');
test_invalid_name('decimal');
test_invalid_name('disc');
</script>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-negative">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_negative(value) {
test_valid_counter_style_descriptor('negative', value);
}
function test_invalid_negative(value) {
test_invalid_counter_style_descriptor('negative', value);
}
// <symbol> <symbol>?
test_valid_negative('"X"');
test_valid_negative('"X" "X"');
test_invalid_negative('"X" "X" "X"');
</script>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-pad">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_pad(value, expected) {
test_valid_counter_style_descriptor('pad', value, expected);
}
function test_invalid_pad(value) {
test_invalid_counter_style_descriptor('pad', value);
}
// <integer [0,]> && <symbol>
test_invalid_pad('10');
test_invalid_pad('"X"');
test_valid_pad('10 "X"');
test_valid_pad('"X" 10', '10 "X"');
test_invalid_pad('-1 "X"');
test_invalid_pad('"X" -1');
test_invalid_pad('10 "X" "Y"');
test_invalid_pad('10 10 "X"');
</script>

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-prefix">
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-suffix">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_prefix_suffix(value, expected) {
test_valid_counter_style_descriptor('prefix', value, expected);
test_valid_counter_style_descriptor('suffix', value, expected);
}
function test_invalid_prefix_suffix(value) {
test_invalid_counter_style_descriptor('prefix', value);
test_invalid_counter_style_descriptor('suffix', value);
}
// <symbol>
// <symbol> = <string> | <image> | <custom-ident>
// string values
test_valid_prefix_suffix('"string"');
test_valid_prefix_suffix('"initial"');
test_valid_prefix_suffix('"inherit"');
test_valid_prefix_suffix('"unset"');
// custom-ident values
test_valid_prefix_suffix('custom-ident')
test_invalid_prefix_suffix('initial');
test_invalid_prefix_suffix('inherit');
test_invalid_prefix_suffix('unset');
// image values
test_valid_prefix_suffix('url("https://example.com/foo.png")');
test_valid_prefix_suffix('url(https://example.com/foo.png)', 'url("https://example.com/foo.png")');
test_valid_prefix_suffix('linear-gradient(yellow, blue)');
// Must be exactly one symbol
test_invalid_prefix_suffix('');
test_invalid_prefix_suffix('foo bar');
</script>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-range">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_range(value) {
test_valid_counter_style_descriptor('range', value);
}
function test_invalid_range(value) {
test_invalid_counter_style_descriptor('range', value);
}
// [ <integer> | infinite ]{2} ]# | auto
test_valid_range('auto');
test_valid_range('infinite infinite');
test_valid_range('infinite 0');
test_valid_range('0 infinite');
test_valid_range('infinite 0, 5 10, 100 infinite');
test_valid_range('infinite 10, 5 20, 15 infinite');
test_invalid_range('');
test_invalid_range('0 -1');
</script>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-speak_as">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_speak_as(value) {
test_valid_counter_style_descriptor('speak-as', value);
}
function test_invalid_speak_as(value) {
test_invalid_counter_style_descriptor('speak-as', value);
}
// auto | bullets | numbers | words | spell-out | <counter-style-name>
test_valid_speak_as('auto');
test_valid_speak_as('bullets');
test_valid_speak_as('numbers');
test_valid_speak_as('words');
test_valid_speak_as('spell-out');
test_valid_speak_as('bar');
test_valid_speak_as('spellout'); // 'spellout' is a valid counter style name
test_invalid_speak_as('bullets numbers');
// The following are not valid counter style names
test_invalid_speak_as('none');
test_invalid_speak_as('initial');
test_invalid_speak_as('inherit');
test_invalid_speak_as('unset');
</script>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-symbols">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_symbols(value, expected) {
test_valid_counter_style_descriptor('symbols', value, expected);
}
function test_invalid_symbols(value) {
test_invalid_counter_style_descriptor('symbols', value);
}
// <symbol>+
test_valid_symbols('"X"');
test_valid_symbols('"X" "X"');
test_valid_symbols('ident "X"');
test_valid_symbols('ident "X" url("foo.jpg")');
test_invalid_symbols('');
test_invalid_symbols('initial "X" "X"');
test_invalid_symbols('inherit "X" "X"');
test_invalid_symbols('unset "X" "X"');
</script>

View file

@ -0,0 +1,38 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-system">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/counter-style-testcommon.js"></script>
<script>
function test_valid_system(value) {
test_valid_counter_style_descriptor('system', value);
}
function test_invalid_system(value) {
test_invalid_counter_style_descriptor('system', value);
}
// cyclic | numeric | alphabetic | symbolic | additive |
// [fixed <integer>?] | [ extends <counter-style-name> ]
test_valid_system('cyclic');
test_valid_system('fixed');
test_valid_system('fixed 100');
test_valid_system('fixed -1');
test_valid_system('symbolic');
test_valid_system('alphabetic');
test_valid_system('numeric');
test_valid_system('additive');
test_valid_system('extends bar');
test_invalid_system('float');
test_invalid_system('cyclic cyclic');
// The following are not valid counter style names
test_invalid_system('extends none');
test_invalid_system('extends initial');
test_invalid_system('extends inherit');
test_invalid_system('extends unset');
</script>

View file

@ -0,0 +1,83 @@
function test_counter_style_descriptor(descriptor, value, expected) {
let descriptors = [];
descriptors.push(`${descriptor}: ${value}`);
// Fill out the remaining necessary descriptors
if (descriptor === 'system') {
if (value === 'additive')
descriptors.push('additive-symbols: 1 "I"');
else if (!value.startsWith('extends'))
descriptors.push('symbols: "X" "Y"');
} else if (descriptor === 'symbols') {
descriptors.push('system: symbolic');
} else if (descriptor === 'additive-symbols') {
descriptors.push('system: additive');
} else {
descriptors.push('system: symbolic');
descriptors.push('symbols: "X" "Y"');
}
let style = document.createElement('style');
style.textContent = `@counter-style foo { ${descriptors.join(';')} }`;
document.head.appendChild(style);
test(() => {
let rule = style.sheet.cssRules[0];
// TODO: The spec is inconsistent on when the entire rule is invalid
// (and hence absent from OM), and when only the descriptor is invalid.
// Revise when spec issue is resolved.
// See https://github.com/w3c/csswg-drafts/issues/5717
if (!rule) {
assert_equals(expected, undefined);
return;
}
assert_equals(rule.constructor.name, 'CSSCounterStyleRule');
let text = rule.cssText;
if (expected)
assert_not_equals(text.indexOf(`${descriptor}: ${expected}`), -1);
else
assert_equals(text.indexOf(`${descriptor}:`), -1);
}, `@counter-style '${descriptor}: ${value}' is ${expected ? 'valid' : 'invalid'}`);
style.remove();
}
function test_valid_counter_style_descriptor(descriptor, value, expected) {
expected = expected || value;
test_counter_style_descriptor(descriptor, value, expected);
}
function test_invalid_counter_style_descriptor(descriptor, value) {
test_counter_style_descriptor(descriptor, value, undefined);
}
function test_counter_style_name(name, isValid) {
let style = document.createElement('style');
style.textContent = `@counter-style ${name} { system: symbolic; symbols: 'X' 'Y'; }`;
document.head.appendChild(style);
test(() => {
let rule = style.sheet.cssRules[0];
if (!isValid) {
assert_equals(rule, undefined);
return;
}
assert_not_equals(rule, undefined);
assert_equals(rule.constructor.name, 'CSSCounterStyleRule');
assert_equals(rule.name, name);
}, `@counter-style name ${name} is ${isValid ? 'valid' : 'invalid'}`);
style.remove();
}
function test_valid_name(name) {
test_counter_style_name(name, true);
}
function test_invalid_name(name) {
test_counter_style_name(name, false);
}

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<div style="width: 100px; height: 100px; overflow: auto;">
<div style="height: 200px; background: green;"></div>
</div>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1148288">
<link rel="match" href="position-absolute-scrollbar-freeze-ref.html">
<div style="display: flex; position: relative;">
<div style="display: flex;">
<div id="target1" style="width: 0px;">text</div>
</div>
<div id="target2" style="position: absolute; overflow: auto; top: 0; left: 0; width: 100px; max-height: 100px; display: none;">
<div style="height: 200px; background: green;"></div>
</div>
</div>
<script>
document.body.offsetTop;
document.getElementById('target1').innerText = '';
document.getElementById('target2').style.display = '';
</script>

View file

@ -11,6 +11,16 @@
<script> <script>
"use strict"; "use strict";
test(() => {
const mql = window.matchMedia("(min-width: 100px)");
mql.addListener(null);
mql.addListener(undefined);
mql.removeListener(null);
mql.removeListener(undefined);
}, "EventListener parameter is optional");
promise_test(async t => { promise_test(async t => {
const iframe = await createIFrame(t, 200, 100); const iframe = await createIFrame(t, 200, 100);
const heightMQL = iframe.contentWindow.matchMedia("(max-height: 50px)"); const heightMQL = iframe.contentWindow.matchMedia("(max-height: 50px)");

View file

@ -136,7 +136,7 @@ function runTestCreateImageDataWH(canvasColorSettings) {
var testScenariosCreateImageDataWH = []; var testScenariosCreateImageDataWH = [];
for (var i = 0; i < canvasColorSettingsSet.length; i++) { for (var i = 0; i < canvasColorSettingsSet.length; i++) {
var message = "Test cretateImageData(width, height) from " + var message = "Test createImageData(width, height) from " +
canvasColorSettingsSet[i].name + " canvas "; canvasColorSettingsSet[i].name + " canvas ";
testScenariosCreateImageDataWH. testScenariosCreateImageDataWH.
push([message, canvasColorSettingsSet[i].colorSettings]); push([message, canvasColorSettingsSet[i].colorSettings]);

View file

@ -1,5 +1,6 @@
<!doctype html> <!doctype html>
<meta charset=utf-8> <meta charset=utf-8>
<meta name="timeout" content="long">
<title>Service Worker: WindowClient.navigate</title> <title>Service Worker: WindowClient.navigate</title>
<script src=/resources/testharness.js></script> <script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script> <script src=/resources/testharnessreport.js></script>
@ -32,154 +33,75 @@
}); });
} }
promise_test(function(t) { async function with_controlled_iframe_and_url(t, name, f) {
var worker = "resources/client-navigate-worker.js"; const SCRIPT = "resources/client-navigate-worker.js";
var scope = "resources/client-navigate-frame.html"; const SCOPE = "resources/client-navigate-frame.html";
var controller, frame, clientId;
return service_worker_unregister_and_register(t, worker, scope) // Register service worker and wait for it to become activated
.then(reg => { const registration = await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
controller = reg.installing; t.add_cleanup(() => registration.unregister());
return wait_for_state(t, reg.installing, "activated"); const worker = registration.installing;
}) await wait_for_state(t, worker, 'activated');
.then(___ => with_iframe(scope))
.then(f => { // Create child iframe and make sure we register a listener for the message
frame = f; // it sends before it's created
fetch_tests_from_worker(controller); const client_id_promise = wait_for_message();
return wait_for_message() const iframe = await with_iframe(SCOPE);
}) t.add_cleanup(() => iframe.remove());
.then(({id}) => clientId = id) const { id } = await client_id_promise;
.then(___ => run_test(controller, clientId, "test_client_navigate_success"))
.then(({result, url}) => { // Run the test in the service worker and fetch it
assert_equals(result, "test_client_navigate_success"); const { result, url } = await run_test(worker, id, name);
assert_equals( fetch_tests_from_worker(worker);
url, new URL("resources/client-navigated-frame.html", assert_equals(result, name);
location).toString());
assert_equals( // Hand over the iframe and URL from the service worker to the callback
frame.contentWindow.location.href, await f(iframe, url);
new URL("resources/client-navigated-frame.html", }
location).toString());
frame.remove(); promise_test(function(t) {
}) return with_controlled_iframe_and_url(t, 'test_client_navigate_success', async (iframe, url) => {
.catch(unreached_rejection(t)) assert_equals(
.then(___ => service_worker_unregister(t, scope)); url, new URL("resources/client-navigated-frame.html",
location).toString());
assert_equals(
iframe.contentWindow.location.href,
new URL("resources/client-navigated-frame.html",
location).toString());
});
}, "Frame location should update on successful navigation"); }, "Frame location should update on successful navigation");
promise_test(function(t) { promise_test(function(t) {
var worker = "resources/client-navigate-worker.js"; return with_controlled_iframe_and_url(t, 'test_client_navigate_redirect', async (iframe, url) => {
var scope = "resources/client-navigate-frame.html"; assert_equals(url, "");
var controller, frame, clientId; assert_throws_dom("SecurityError", function() { return iframe.contentWindow.location.href });
});
return service_worker_unregister_and_register(t, worker, scope)
.then(reg => {
controller = reg.installing;
return wait_for_state(t, reg.installing, "activated");
})
.then(___ => with_iframe(scope))
.then(f => {
frame = f;
fetch_tests_from_worker(controller);
return wait_for_message()
})
.then(({id}) => clientId = id)
.then(___ => run_test(controller, clientId, "test_client_navigate_redirect"))
.then(({result, url}) => {
assert_equals(result, "test_client_navigate_redirect");
assert_equals(url, "");
assert_throws_dom("SecurityError", function() { return frame.contentWindow.location.href });
frame.remove();
})
.catch(unreached_rejection(t))
.then(___ => service_worker_unregister(t, scope));
}, "Frame location should not be accessible after redirect"); }, "Frame location should not be accessible after redirect");
promise_test(function(t) { promise_test(function(t) {
var worker = "resources/client-navigate-worker.js"; return with_controlled_iframe_and_url(t, 'test_client_navigate_cross_origin', async (iframe, url) => {
var scope = "resources/client-navigate-frame.html"; assert_equals(url, "");
var controller, frame, clientId; assert_throws_dom("SecurityError", function() { return iframe.contentWindow.location.href });
});
return service_worker_unregister_and_register(t, worker, scope)
.then(reg => {
controller = reg.installing;
return wait_for_state(t, reg.installing, "activated");
})
.then(___ => with_iframe(scope))
.then(f => {
frame = f;
fetch_tests_from_worker(controller);
return wait_for_message()
})
.then(({id}) => clientId = id)
.then(___ => run_test(controller, clientId, "test_client_navigate_cross_origin"))
.then(({result, url}) => {
assert_equals(result, "test_client_navigate_cross_origin");
assert_equals(url, "");
assert_throws_dom("SecurityError", function() { return frame.contentWindow.location.href });
frame.remove();
})
.catch(unreached_rejection(t))
.then(___ => service_worker_unregister(t, scope));
}, "Frame location should not be accessible after cross-origin navigation"); }, "Frame location should not be accessible after cross-origin navigation");
promise_test(function(t) { promise_test(function(t) {
var worker = "resources/client-navigate-worker.js"; return with_controlled_iframe_and_url(t, 'test_client_navigate_about_blank', async (iframe, url) => {
var scope = "resources/client-navigate-frame.html"; assert_equals(
var controller, frame, clientId; iframe.contentWindow.location.href,
return service_worker_unregister_and_register(t, worker, scope)
.then(reg => {
controller = reg.installing;
return wait_for_state(t, reg.installing, "activated");
})
.then(___ => with_iframe(scope))
.then(f => {
frame = f;
fetch_tests_from_worker(controller);
return wait_for_message()
})
.then(({id}) => clientId = id)
.then(___ => run_test(controller, clientId, "test_client_navigate_about_blank"))
.then(({result, url}) => {
assert_equals(result, "test_client_navigate_about_blank");
assert_equals(
frame.contentWindow.location.href,
new URL("resources/client-navigate-frame.html", new URL("resources/client-navigate-frame.html",
location).toString()); location).toString());
frame.contentWindow.document.body.style = "background-color: green" iframe.contentWindow.document.body.style = "background-color: green"
frame.remove(); });
})
.catch(unreached_rejection(t))
.then(___ => service_worker_unregister(t, scope));
}, "Frame location should not update on failed about:blank navigation"); }, "Frame location should not update on failed about:blank navigation");
promise_test(function(t) { promise_test(function(t) {
var worker = "resources/client-navigate-worker.js"; return with_controlled_iframe_and_url(t, 'test_client_navigate_mixed_content', async (iframe, url) => {
var scope = "resources/client-navigate-frame.html"; assert_equals(
var controller, frame, clientId; iframe.contentWindow.location.href,
return service_worker_unregister_and_register(t, worker, scope)
.then(reg => {
controller = reg.installing;
return wait_for_state(t, reg.installing, "activated");
})
.then(___ => with_iframe(scope))
.then(f => {
frame = f;
fetch_tests_from_worker(controller);
return wait_for_message()
})
.then(({id}) => clientId = id)
.then(___ => run_test(controller, clientId, "test_client_navigate_mixed_content"))
.then(({result, url}) => {
assert_equals(result, "test_client_navigate_mixed_content");
assert_equals(
frame.contentWindow.location.href,
new URL("resources/client-navigate-frame.html", new URL("resources/client-navigate-frame.html",
location).toString()); location).toString());
frame.contentWindow.document.body.style = "background-color: green" iframe.contentWindow.document.body.style = "background-color: green"
frame.remove(); });
})
.catch(unreached_rejection(t))
.then(___ => service_worker_unregister(t, scope));
}, "Frame location should not update on failed mixed-content navigation"); }, "Frame location should not update on failed mixed-content navigation");
</script> </script>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Tests for importScripts: cross-origin</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<body>
<script>
promise_test(async t => {
const scope = 'resources/import-scripts-cross-origin';
await service_worker_unregister(t, scope);
let reg = await navigator.serviceWorker.register(
'resources/import-scripts-cross-origin-worker.sub.js', { scope: scope });
t.add_cleanup(_ => reg.unregister());
assert_not_equals(reg.installing, null, 'worker is installing');
}, 'importScripts() supports cross-origin requests');
</script>
</body>

View file

@ -3,6 +3,8 @@ importScripts("test-helpers.sub.js");
importScripts("/common/get-host-info.sub.js") importScripts("/common/get-host-info.sub.js")
importScripts("testharness-helpers.js") importScripts("testharness-helpers.js")
setup({ explicit_done: true });
self.onfetch = function(e) { self.onfetch = function(e) {
if (e.request.url.indexOf("client-navigate-frame.html") >= 0) { if (e.request.url.indexOf("client-navigate-frame.html") >= 0) {
return; return;
@ -35,6 +37,7 @@ self.onmessage = function(e) {
}) })
.catch(unreached_rejection(t)); .catch(unreached_rejection(t));
}, "Return value should be instance of WindowClient"); }, "Return value should be instance of WindowClient");
done();
} else if (test === "test_client_navigate_cross_origin") { } else if (test === "test_client_navigate_cross_origin") {
promise_test(function(t) { promise_test(function(t) {
this.add_cleanup(() => port.postMessage(pass(test, clientUrl))); this.add_cleanup(() => port.postMessage(pass(test, clientUrl)));
@ -49,6 +52,7 @@ self.onmessage = function(e) {
}) })
.catch(unreached_rejection(t)); .catch(unreached_rejection(t));
}, "Navigating to different origin should resolve with null"); }, "Navigating to different origin should resolve with null");
done();
} else if (test === "test_client_navigate_about_blank") { } else if (test === "test_client_navigate_about_blank") {
promise_test(function(t) { promise_test(function(t) {
this.add_cleanup(function() { port.postMessage(pass(test, "")); }); this.add_cleanup(function() { port.postMessage(pass(test, "")); });
@ -56,6 +60,7 @@ self.onmessage = function(e) {
.then(client => promise_rejects_js(t, TypeError, client.navigate("about:blank"))) .then(client => promise_rejects_js(t, TypeError, client.navigate("about:blank")))
.catch(unreached_rejection(t)); .catch(unreached_rejection(t));
}, "Navigating to about:blank should reject with TypeError"); }, "Navigating to about:blank should reject with TypeError");
done();
} else if (test === "test_client_navigate_mixed_content") { } else if (test === "test_client_navigate_mixed_content") {
promise_test(function(t) { promise_test(function(t) {
this.add_cleanup(function() { port.postMessage(pass(test, "")); }); this.add_cleanup(function() { port.postMessage(pass(test, "")); });
@ -67,6 +72,7 @@ self.onmessage = function(e) {
.then(client => promise_rejects_js(t, TypeError, client.navigate(url))) .then(client => promise_rejects_js(t, TypeError, client.navigate(url)))
.catch(unreached_rejection(t)); .catch(unreached_rejection(t));
}, "Navigating to mixed-content iframe should reject with TypeError"); }, "Navigating to mixed-content iframe should reject with TypeError");
done();
} else if (test === "test_client_navigate_redirect") { } else if (test === "test_client_navigate_redirect") {
var host_info = get_host_info(); var host_info = get_host_info();
var url = new URL(host_info['HTTPS_REMOTE_ORIGIN']).toString() + var url = new URL(host_info['HTTPS_REMOTE_ORIGIN']).toString() +
@ -81,5 +87,6 @@ self.onmessage = function(e) {
}) })
.catch(unreached_rejection(t)); .catch(unreached_rejection(t));
}, "Redirecting to another origin should resolve with null"); }, "Redirecting to another origin should resolve with null");
done();
} }
}; };

View file

@ -0,0 +1 @@
importScripts('https://{{domains[www1]}}:{{ports[https][0]}}/service-workers/service-worker/resources/import-scripts-version.py');

View file

@ -9,12 +9,20 @@
<body> <body>
<script> <script>
function testElementType(allowsShadowDom, elementType, mode, delegatesFocus) { function testElementType(allowsShadowDom, elementType, applyToShadow, mode, delegatesFocus) {
var t = test(t => { const t = test(t => {
// Create and attach element // Create and attach element
const wrapper = document.createElement('div'); let wrapper;
t.add_cleanup(function() { wrapper.remove(); }); if (applyToShadow) {
document.body.appendChild(wrapper); const host = document.createElement('div');
t.add_cleanup(function() { host.remove(); });
document.body.appendChild(host);
wrapper = host.attachShadow({mode: 'open'});
} else {
wrapper = document.createElement('div');
t.add_cleanup(function() { wrapper.remove(); });
document.body.appendChild(wrapper);
}
const element = document.createElement(elementType); const element = document.createElement(elementType);
wrapper.appendChild(element); wrapper.appendChild(element);
@ -44,7 +52,7 @@ function testElementType(allowsShadowDom, elementType, mode, delegatesFocus) {
// Either way, make sure getInnerHTML({includeShadowRoots: false}) matches .innerHTML // Either way, make sure getInnerHTML({includeShadowRoots: false}) matches .innerHTML
assert_equals(wrapper.getInnerHTML({includeShadowRoots: false}),wrapper.innerHTML,'getInnerHTML() with includeShadowRoots false should return the same as .innerHTML'); assert_equals(wrapper.getInnerHTML({includeShadowRoots: false}),wrapper.innerHTML,'getInnerHTML() with includeShadowRoots false should return the same as .innerHTML');
}, `getInnerHTML() on <${elementType}>${allowsShadowDom ? `, with mode=${mode}, delegatesFocus=${delegatesFocus}.` : ''}`); }, `${applyToShadow ? 'ShadowRoot' : 'Element'}.getInnerHTML() on <${elementType}>${allowsShadowDom ? `, with mode=${mode}, delegatesFocus=${delegatesFocus}.` : ''}`);
} }
function runAllTests() { function runAllTests() {
@ -52,14 +60,16 @@ function runAllTests() {
const safelisted = ATTACHSHADOW_SAFELISTED_ELEMENTS; const safelisted = ATTACHSHADOW_SAFELISTED_ELEMENTS;
for (const elementName of allElements) { for (const elementName of allElements) {
const allowsShadowDom = safelisted.includes(elementName); const allowsShadowDom = safelisted.includes(elementName);
if (allowsShadowDom) { for (const applyToShadow of [false, true]) {
for (const delegatesFocus of [false, true]) { if (allowsShadowDom) {
for (const mode of ['open', 'closed']) { for (const delegatesFocus of [false, true]) {
testElementType(true, elementName, mode, delegatesFocus); for (const mode of ['open', 'closed']) {
testElementType(true, elementName, applyToShadow, mode, delegatesFocus);
}
} }
} else {
testElementType(false, elementName, applyToShadow);
} }
} else {
testElementType(false, elementName);
} }
} }
} }

View file

@ -8,13 +8,20 @@
<body> <body>
<script> <script>
function testElementType(allowsShadowDom, elementType) { function testElementType(allowsShadowDom, elementType, applyToShadow) {
var t = test(t => { const t = test(t => {
// Create and attach element // Create and attach element
const wrapper = document.createElement('div'); let wrapper;
t.add_cleanup(function() { wrapper.remove(); }); if (applyToShadow) {
document.body.appendChild(wrapper); const host = document.createElement('div');
t.add_cleanup(function() { host.remove(); });
document.body.appendChild(host);
wrapper = host.attachShadow({mode: 'open'});
} else {
wrapper = document.createElement('div');
t.add_cleanup(function() { wrapper.remove(); });
document.body.appendChild(wrapper);
}
const html = `<${elementType}><template shadowroot="open"><slot></slot></template><span></span></${elementType}>`; const html = `<${elementType}><template shadowroot="open"><slot></slot></template><span></span></${elementType}>`;
wrapper.setInnerHTML(html, {allowShadowRoot: true}); wrapper.setInnerHTML(html, {allowShadowRoot: true});
if (allowsShadowDom) { if (allowsShadowDom) {
@ -24,14 +31,16 @@ function testElementType(allowsShadowDom, elementType) {
const leftover = wrapper.firstElementChild.firstElementChild; const leftover = wrapper.firstElementChild.firstElementChild;
assert_true(wrapper.firstElementChild.childElementCount == 0 || leftover instanceof HTMLTemplateElement,'Template should be left over (or no children)'); assert_true(wrapper.firstElementChild.childElementCount == 0 || leftover instanceof HTMLTemplateElement,'Template should be left over (or no children)');
} }
}, `setInnerHTML() on <${elementType}>${allowsShadowDom ? `, with declarative Shadow DOM.` : ''}`); }, `${applyToShadow ? 'ShadowRoot' : 'Element'}.setInnerHTML() on <${elementType}>${allowsShadowDom ? `, with declarative Shadow DOM.` : ''}`);
} }
function runAllTests() { function runAllTests() {
const allElements = [...HTML5_ELEMENT_NAMES, 'htmlunknown'].filter(item => item !== 'body'); const allElements = [...HTML5_ELEMENT_NAMES, 'htmlunknown'].filter(item => item !== 'body');
const safelisted = ATTACHSHADOW_SAFELISTED_ELEMENTS; const safelisted = ATTACHSHADOW_SAFELISTED_ELEMENTS;
for (const elementName of allElements) { for (const elementName of allElements) {
testElementType(safelisted.includes(elementName), elementName); for (const applyToShadow of [false, true]) {
testElementType(safelisted.includes(elementName), elementName, applyToShadow);
}
} }
} }

View file

@ -5,6 +5,6 @@ mozdebug==0.2
# Pillow 7 requires Python 3 # Pillow 7 requires Python 3
pillow==6.2.2; python_version <= '2.7' # pyup: <7.0 pillow==6.2.2; python_version <= '2.7' # pyup: <7.0
pillow==8.0.1; python_version >= '3.0' pillow==8.0.1; python_version >= '3.0'
urllib3[secure]==1.26.1 urllib3[secure]==1.26.2
requests==2.24.0 requests==2.24.0
six==1.15.0 six==1.15.0

View file

@ -5,10 +5,12 @@
<title>Focus-related events should fire in the correct order</title> <title>Focus-related events should fire in the correct order</title>
<link rel="author" title="Chris Rebert" href="http://chrisrebert.com"> <link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
<link rel="help" href="https://w3c.github.io/uievents/#events-focusevent-event-order"> <link rel="help" href="https://w3c.github.io/uievents/#events-focusevent-event-order">
<meta name="flags" content="interact">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="/uievents/resources/eventrecorder.js"></script> <script src="/uievents/resources/eventrecorder.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
</head> </head>
<body> <body>
@ -40,7 +42,9 @@ var relevantEvents = [
window.onload = function () { window.onload = function () {
var a = document.getElementById("a"); var a = document.getElementById("a");
var b = document.getElementById("b"); var b = document.getElementById("b");
var button = document.getElementById("done");
var inputs = [a, b]; var inputs = [a, b];
var actions_promise;
EventRecorder.configure({ EventRecorder.configure({
objectMap: { objectMap: {
"a": a, "a": a,
@ -50,25 +54,41 @@ window.onload = function () {
EventRecorder.addEventListenersForNodes(relevantEvents, inputs, stopPropagation); EventRecorder.addEventListenersForNodes(relevantEvents, inputs, stopPropagation);
var expected = [ var expected = [
{type: "focusin", target: "a"},
{type: "focus", target: "a"}, {type: "focus", target: "a"},
{type: "focusout", target: "a"}, {type: "focusin", target: "a"},
{type: "focusin", target: "b"},
{type: "blur", target: "a"}, {type: "blur", target: "a"},
{type: "focusout", target: "a"},
{type: "focus", target: "b"}, {type: "focus", target: "b"},
{type: "focusout", target: "b"}, {type: "focusin", target: "b"},
{type: "blur", target: "b"} {type: "blur", target: "b"},
{type: "focusout", target: "b"}
]; ];
async_test(function(t) { async_test(function(t) {
document.getElementById("done").addEventListener("click", function () { button.addEventListener("click", function () {
t.step(function () { t.step(function () {
assert_true(EventRecorder.checkRecords(expected)); assert_true(EventRecorder.checkRecords(expected));
t.done(); // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
t.done();
});
}); });
}, false); }, false);
}, "Focus-related events should fire in the correct order"); }, "Focus-related events should fire in the correct order");
EventRecorder.start(); EventRecorder.start();
// Inject mouse inputs.
actions_promise = new test_driver.Actions()
.pointerMove(0, 0, {origin: a})
.pointerDown()
.pointerUp()
.pointerMove(0, 0, {origin: b})
.pointerDown()
.pointerUp()
.pointerMove(0, 0, {origin: button})
.pointerDown()
.pointerUp()
.send();
}; };
</script> </script>
</html> </html>

View file

@ -0,0 +1,74 @@
<!doctype html>
<meta charset=utf-8>
<title>RTCPeerConnection Handovers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../RTCPeerConnection-helper.js"></script>
<script>
'use strict';
promise_test(async t => {
const offerPc = new RTCPeerConnection();
const answerPcFirst = new RTCPeerConnection();
const answerPcSecond = new RTCPeerConnection();
t.add_cleanup(() => {
offerPc.close();
answerPcFirst.close();
answerPcSecond.close();
});
offerPc.addTransceiver('audio');
// Negotiate connection with PC 1
const offer1 = await offerPc.createOffer();
await offerPc.setLocalDescription(offer1);
await answerPcFirst.setRemoteDescription(offer1);
const answer1 = await answerPcFirst.createAnswer();
await offerPc.setRemoteDescription(answer1);
await answerPcFirst.setLocalDescription(answer1);
// Renegotiate with PC 2
const offer2 = await offerPc.createOffer();
await offerPc.setLocalDescription(offer2);
await answerPcSecond.setRemoteDescription(offer2);
const answer2 = await answerPcSecond.createAnswer();
await offerPc.setRemoteDescription(answer2);
await answerPcSecond.setLocalDescription(answer2);
}, 'Negotiation of handover initiated at caller works');
promise_test(async t => {
const offerPc = new RTCPeerConnection();
const answerPcFirst = new RTCPeerConnection();
const answerPcSecond = new RTCPeerConnection();
t.add_cleanup(() => {
offerPc.close();
answerPcFirst.close();
answerPcSecond.close();
});
offerPc.addTransceiver('audio');
// Negotiate connection with PC 1
const offer1 = await offerPc.createOffer();
await offerPc.setLocalDescription(offer1);
await answerPcFirst.setRemoteDescription(offer1);
const answer1 = await answerPcFirst.createAnswer();
await offerPc.setRemoteDescription(answer1);
await answerPcFirst.setLocalDescription(answer1);
// Renegotiate with PC 2
// The offer from PC 2 needs to be consistent on at least the following:
// - Number, type and order of media sections
// - MID values
// - Payload type values
// Do a "fake" offer/answer using the original offer against PC2 to achieve this.
await answerPcSecond.setRemoteDescription(offer1);
// Discard the output of this round.
await answerPcSecond.setLocalDescription(await answerPcSecond.createAnswer());
// Now we can initiate an offer from the new PC.
const offer2 = await answerPcSecond.createOffer();
await answerPcSecond.setLocalDescription(offer2);
await offerPc.setRemoteDescription(offer2);
const answer2 = await offerPc.createAnswer();
await answerPcSecond.setRemoteDescription(answer2);
await offerPc.setLocalDescription(answer2);
}, 'Negotiation of handover initiated at callee works');
</script>

View file

@ -0,0 +1,83 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/webxr_util.js"></script>
<script src="../resources/webxr_test_constants.js"></script>
<script>
function testConstructor(t, gl) {
return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
.then(() => {
return navigator.xr.requestSession('inline')
.then((session) => {
try {
let webglLayerIncompatible = new XRWebGLBinding(session, gl);
assert_unreached("XRWebGLBinding should fail when created with an inline session.");
} catch (err) {
assert_equals(err.name, "InvalidStateError", "Should get InvalidStateError for creating with inline session.");
}
});
})
.then(() => {
return new Promise((resolve) => {
navigator.xr.test.simulateUserActivation(() => {
let xrSession = null;
navigator.xr.requestSession('immersive-vr')
.then((session) => {
xrSession = session;
t.step_func(() => {
try {
let webglLayerIncompatible = new XRWebGLBinding(xrSession, gl);
assert_unreached("XRWebGLBinding should fail when created with a context that is not XRCompatible.")
} catch (err) {
assert_equals(err.name, "InvalidStateError", "Should get InvalidStateError for non-XRCompatible context.");
}
})
return gl.makeXRCompatible();
}).then(() => {
try {
let webglLayerGood = new XRWebGLBinding(xrSession, gl);
} catch (err) {
reject("XRWebGLBinding should not fail with valid arguments.");
}
let lose_context_ext = gl.getExtension('WEBGL_lose_context');
gl.canvas.addEventListener('webglcontextlost', (ev) => {
ev.preventDefault();
try {
let webglLayerBadContext = new XRWebGLBinding(xrSession, gl);
reject("XRWebGLBinding should fail when created with a lost context.");
} catch (err) {
assert_equals(err.name, 'InvalidStateError', "Should get InvalidStateError for lost context.");
t.step_timeout(() => { lose_context_ext.restoreContext(); }, 100);
}
});
gl.canvas.addEventListener('webglcontextrestored', (ev) => {
resolve(xrSession.end().then(() => {
try {
let webglLayerBadSession = new XRWebGLBinding(xrSession, gl);
assert_unreached("XRWebGLBinding should fail when created with an ended session.");
} catch (err) {
assert_equals(err.name, 'InvalidStateError', "Should get InvalidStateError when passed an ended session.");
}
}));
});
lose_context_ext.loseContext();
});
});
});
});
}
xr_promise_test("Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl",
testConstructor, null, 'webgl');
xr_promise_test("Ensure that XRWebGLBinding's constructor throws appropriate errors using webgl2",
testConstructor, null, 'webgl2');
</script>

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<title>DedicatedWorker: ES modules for data URL workers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
const import_from_data_url_worker_test = (importType, isDataURL, expectation) => {
promise_test(async () => {
const importURL = new URL(`resources/${importType}-import-` +
`${isDataURL ? 'data-url' : 'script'}-block-cross-origin.js`,
location.href) + '?pipe=header(Access-Control-Allow-Origin, *)';
const dataURL = `data:text/javascript,import "${importURL}";`;
const worker = new Worker(dataURL, { type: 'module' });
worker.postMessage('Send message for tests from main script.');
const msgEvent =
await new Promise(resolve => worker.onmessage = resolve);
assert_array_equals(msgEvent.data,
expectation === 'blocked' ? ['ERROR']
: ['export-block-cross-origin.js']);
}, `${importType} import ${isDataURL ? 'data url' : 'script'} from data: ` +
`URL should be ${expectation}.`);
}
// Static import should obey the outside settings.
// SecurityOrigin of the outside settings is decided by Window.
import_from_data_url_worker_test('static', true, 'allowed');
import_from_data_url_worker_test('static', false, 'allowed');
// Dynamic import should obey the inside settings.
// SecurityOrigin of the inside settings is a unique opaque origin.
//
// Data url script is cross-origin to the inside settings' SecurityOrigin, but
// dynamic importing it is allowed.
// https://fetch.spec.whatwg.org/#concept-main-fetch
// Step 5: requests current URLs scheme is "data" [spec text]
import_from_data_url_worker_test('dynamic', true, 'allowed');
// Non-data url script is cross-origin to the inside settings' SecurityOrigin.
// It should be blocked.
import_from_data_url_worker_test('dynamic', false, 'blocked');
</script>

View file

@ -0,0 +1,11 @@
def main(request, response):
# This script serves both preflight and main GET request for cross-origin
# static imports from module service workers.
# According to https://w3c.github.io/ServiceWorker/#update-algorithm,
# `Service-Worker: script` request header is added, which triggers CORS
# preflight.
response_headers = [(b"Content-Type", b"text/javascript"),
(b"Access-Control-Allow-Origin", b"*"),
(b"Access-Control-Allow-Headers", b"Service-Worker")]
return (200, response_headers,
b"export const importedModules = ['export-on-load-script.js'];")

View file

@ -4,6 +4,16 @@ const testCases = [
expectation: ['export-on-load-script.js'], expectation: ['export-on-load-script.js'],
description: 'Static import.' description: 'Static import.'
}, },
{
scriptURL: '/workers/modules/resources/static-import-remote-origin-script-worker.sub.js',
expectation: ['export-on-load-script.js'],
description: 'Static import (cross-origin).'
},
{
scriptURL: '/workers/modules/resources/static-import-redirect-worker.js',
expectation: ['export-on-load-script.js'],
description: 'Static import (redirect).'
},
{ {
scriptURL: '/workers/modules/resources/nested-static-import-worker.js', scriptURL: '/workers/modules/resources/nested-static-import-worker.js',
expectation: [ expectation: [

View file

@ -8,6 +8,7 @@ let worker;
// Creates a new dedicated worker for a given script url. // Creates a new dedicated worker for a given script url.
window.onmessage = e => { window.onmessage = e => {
worker = new Worker(e.data, { type: 'module' }); worker = new Worker(e.data, { type: 'module' });
worker.postMessage('start');
worker.onmessage = msg => window.opener.postMessage(msg.data, '*'); worker.onmessage = msg => window.opener.postMessage(msg.data, '*');
worker.onerror = err => { worker.onerror = err => {
window.opener.postMessage(['ERROR'], '*'); window.opener.postMessage(['ERROR'], '*');

View file

@ -0,0 +1,8 @@
def main(request, response):
"""Simple handler that causes redirection.
This is placed here to stay within the same directory during redirects,
to avoid issues like https://crbug.com/1136775.
"""
response.status = 302
location = request.GET.first(b"location")
response.headers.set(b"Location", location)

View file

@ -0,0 +1,21 @@
// This script is meant to be imported by a module worker. It receives a
// message from the worker and responds with the list of imported modules.
import * as module from './redirect.py?location=/workers/modules/resources/export-on-load-script.js';
if ('DedicatedWorkerGlobalScope' in self &&
self instanceof DedicatedWorkerGlobalScope) {
self.onmessage = e => {
e.target.postMessage(module.importedModules);
};
} else if (
'SharedWorkerGlobalScope' in self &&
self instanceof SharedWorkerGlobalScope) {
self.onconnect = e => {
e.ports[0].postMessage(module.importedModules);
};
} else if (
'ServiceWorkerGlobalScope' in self &&
self instanceof ServiceWorkerGlobalScope) {
self.onmessage = e => {
e.source.postMessage(module.importedModules);
};
}

View file

@ -1,12 +1,20 @@
// Import a remote origin script. // Import a remote origin script.
import * as module from 'https://{{domains[www1]}}:{{ports[https][0]}}/workers/modules/resources/export-on-load-script.js'; import * as module from 'https://{{domains[www1]}}:{{ports[https][0]}}/workers/modules/resources/export-on-load-script.py';
if ('DedicatedWorkerGlobalScope' in self && if ('DedicatedWorkerGlobalScope' in self &&
self instanceof DedicatedWorkerGlobalScope) { self instanceof DedicatedWorkerGlobalScope) {
postMessage(module.importedModules); self.onmessage = e => {
e.target.postMessage(module.importedModules);
};
} else if ( } else if (
'SharedWorkerGlobalScope' in self && 'SharedWorkerGlobalScope' in self &&
self instanceof SharedWorkerGlobalScope) { self instanceof SharedWorkerGlobalScope) {
onconnect = e => { self.onconnect = e => {
e.ports[0].postMessage(module.importedModules); e.ports[0].postMessage(module.importedModules);
}; };
} else if (
'ServiceWorkerGlobalScope' in self &&
self instanceof ServiceWorkerGlobalScope) {
self.onmessage = e => {
e.source.postMessage(module.importedModules);
};
} }