mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Update web-platform-tests to revision 064bb25e5e9ab5e08ec39c4fbd1fe6653520595d
This commit is contained in:
parent
f8ebe03dc2
commit
d2586450c0
86 changed files with 1092 additions and 282 deletions
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[CaretPosition-001.html]
|
||||
[Element at (400, 100)]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -318,21 +318,18 @@
|
|||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate 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 */*]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -53,6 +53,6 @@
|
|||
[combined text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,3 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_5.html]
|
||||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +0,0 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
|
|
@ -65,3 +65,9 @@
|
|||
[Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData]
|
||||
expected: FAIL
|
||||
|
||||
[Test createImageData(width, height) from e-SRGB canvas ]
|
||||
expected: FAIL
|
||||
|
||||
[Test createImageData(width, height) from SRGB canvas ]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -10,7 +9,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -171,3 +171,6 @@
|
|||
[XHTML img usemap="#hash-id"]
|
||||
expected: FAIL
|
||||
|
||||
[HTML (standards) IMG usemap="no-hash-name"]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[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]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[module-delayed.html]
|
||||
[async document.write in a module]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -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]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[realtimeanalyser-fft-scaling.html]
|
||||
expected: TIMEOUT
|
||||
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[audiocontext-not-fully-active.html]
|
||||
expected: TIMEOUT
|
||||
[frame in navigated remote-site frame]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -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
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -22272,13 +22272,6 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"focus-manual.html": [
|
||||
"391daf7028ce7fdff4f78b542caa2dd7d917a0d2",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"legacy-manual.html": [
|
||||
"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": [
|
||||
"a3de19d6d9df95a505c547e48dea3de82af44de5",
|
||||
[
|
||||
|
@ -302306,7 +302312,13 @@
|
|||
"broken-symbols-ref.htm": [
|
||||
"0247f65d3e0bd0db6de4403e1da90dae2cd42de1",
|
||||
[]
|
||||
],
|
||||
"support": {
|
||||
"counter-style-testcommon.js": [
|
||||
"a3615e92ff0678d5e7b2aad0a20076cd1ac07d6e",
|
||||
[]
|
||||
]
|
||||
}
|
||||
},
|
||||
"css-device-adapt": {
|
||||
"META.yml": [
|
||||
|
@ -303461,6 +303473,10 @@
|
|||
"2f7e669c72fc263d4b39d7a198d8abafbf54b463",
|
||||
[]
|
||||
],
|
||||
"position-absolute-scrollbar-freeze-ref.html": [
|
||||
"d0bf617951f3a9b5e3ae8e4b77e6ff3762b3cde1",
|
||||
[]
|
||||
],
|
||||
"reference": {
|
||||
"align-baseline-ref.html": [
|
||||
"d5b88e8c7dae73b57c7f993260d7cce363eeebaa",
|
||||
|
@ -358021,7 +358037,7 @@
|
|||
[]
|
||||
],
|
||||
"client-navigate-worker.js": [
|
||||
"a96c53bced98f63cca8c97ef74d6be3887cd066f",
|
||||
"6101d5d8f92ccd0ec798c27a2ab1cd33de5fc1bb",
|
||||
[]
|
||||
],
|
||||
"client-navigated-frame.html": [
|
||||
|
@ -358500,6 +358516,10 @@
|
|||
"19c7a4b8e561b3d95f10496e92a2c7264d693815",
|
||||
[]
|
||||
],
|
||||
"import-scripts-cross-origin-worker.sub.js": [
|
||||
"b432854db8bc7f8292c43434d8c24a3ffe97dec0",
|
||||
[]
|
||||
],
|
||||
"import-scripts-diff-resource-map-worker.js": [
|
||||
"0fdcb0fcf80ad7f0dffa284c5b77178bdad95ef6",
|
||||
[]
|
||||
|
@ -367528,7 +367548,7 @@
|
|||
]
|
||||
},
|
||||
"requirements.txt": [
|
||||
"766b9bd914391f558de2e28999cbfcc3f16db8ca",
|
||||
"7c134b89b9583f9f0584450f20e9665cb80e6445",
|
||||
[]
|
||||
],
|
||||
"requirements_android_webview.txt": [
|
||||
|
@ -373878,6 +373898,10 @@
|
|||
"cb762eff806849df46dc758ef7b98b63f27f54c9",
|
||||
[]
|
||||
],
|
||||
"export-on-load-script.py": [
|
||||
"6cca411e8a85a7fa0d78ced6b32011bda890b7c3",
|
||||
[]
|
||||
],
|
||||
"export-on-static-import-script.js": [
|
||||
"3f7174eef0beb68a3f36d66d3ed7a73c9074955c",
|
||||
[]
|
||||
|
@ -373903,7 +373927,7 @@
|
|||
[]
|
||||
],
|
||||
"import-test-cases.js": [
|
||||
"c5830e97eebc88b12a5ed1f600e810df443204f8",
|
||||
"8ad89e8fda11a3923e29128f4835928f9a8c2cb6",
|
||||
[]
|
||||
],
|
||||
"nested-dynamic-import-worker.js": [
|
||||
|
@ -373919,7 +373943,7 @@
|
|||
[]
|
||||
],
|
||||
"new-worker-window.html": [
|
||||
"a7bd2eedef6ab6d639f28e063ccd50aefbbb0528",
|
||||
"32a89fae0ecd59ba7c84870c86f4251d057c5339",
|
||||
[]
|
||||
],
|
||||
"post-message-on-load-worker.js": [
|
||||
|
@ -373934,6 +373958,10 @@
|
|||
"699af684a2366fc0aaa8c1e64abf3240489cf7be",
|
||||
[]
|
||||
],
|
||||
"redirect.py": [
|
||||
"396bd4c4b2dfbb6091779b6f4375245c1a4604d8",
|
||||
[]
|
||||
],
|
||||
"static-import-and-then-dynamic-import-worker.js": [
|
||||
"2d857a2e90a11af9f52e5d59d15ee30d225deeaf",
|
||||
[]
|
||||
|
@ -373946,6 +373974,10 @@
|
|||
"16f70e9daf4909605746c6614a509afb3cf71ed1",
|
||||
[]
|
||||
],
|
||||
"static-import-redirect-worker.js": [
|
||||
"8434c1a34e2837c9fde3709ec3d5bed468deeb7e",
|
||||
[]
|
||||
],
|
||||
"static-import-remote-origin-credentials-checker-worker.sub.js": [
|
||||
"c543cb49616062dc85fbbe7d885c17ada9646728",
|
||||
[]
|
||||
|
@ -373955,7 +373987,7 @@
|
|||
[]
|
||||
],
|
||||
"static-import-remote-origin-script-worker.sub.js": [
|
||||
"0221a2b8ba775c672d724a9f5946cdc9915db362",
|
||||
"6432dd5d80d0f1c5c05512658dd240f09fa8ae8e",
|
||||
[]
|
||||
],
|
||||
"static-import-same-origin-credentials-checker-worker.js": [
|
||||
|
@ -402465,6 +402497,76 @@
|
|||
]
|
||||
},
|
||||
"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": [
|
||||
"e914b41b0e43a1e471af458c94c13690c4559c33",
|
||||
[
|
||||
|
@ -423013,7 +423115,7 @@
|
|||
]
|
||||
],
|
||||
"MediaQueryList-addListener-removeListener.html": [
|
||||
"1144e3a78322ceb7b49056c0530835bb2301fc30",
|
||||
"c705206bba468b8bd792c7defe1d2071904b441d",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -460931,7 +461033,7 @@
|
|||
]
|
||||
],
|
||||
"imageData-colorManagedBehavior.html": [
|
||||
"d106904f2e236e2d44a76a7c95066abbf107342c",
|
||||
"737d2b6ec730dbe5a11eb5f92326b75074548536",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -522186,10 +522288,12 @@
|
|||
]
|
||||
],
|
||||
"client-navigate.https.html": [
|
||||
"6112e37c34ee991094ee8fcbe623e9c1e26f6e7c",
|
||||
"f40a08635cfd1e0345a64228ccab82302439f7dd",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"clients-get-client-types.https.html": [
|
||||
|
@ -522763,6 +522867,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"import-scripts-cross-origin.https.html": [
|
||||
"773708a9fbce32a6b17f22d88b9fb6ebc3553710",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"import-scripts-mime-types.https.html": [
|
||||
"1679831d0f2b98aee22898d820373e80079fbe00",
|
||||
[
|
||||
|
@ -523782,7 +523893,7 @@
|
|||
]
|
||||
],
|
||||
"getinnerhtml.tentative.html": [
|
||||
"64fd78ba8ed0ca4d465c5a3ef8cb496350c69f7c",
|
||||
"bcf5471b5e9e8748c49fbc899788203ead6fc19a",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -523817,7 +523928,7 @@
|
|||
]
|
||||
],
|
||||
"setinnerhtml.tentative.html": [
|
||||
"f99863c7c1fabfbaee11d5cc90cc81d3e4acebff",
|
||||
"076fdac2b0dda4fadfb1584a8b7650f736e7a908",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -534389,6 +534500,15 @@
|
|||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"focus.html": [
|
||||
"7942674a70b7941cd1c23cee1251c43524362d57",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"mouse-events": {
|
||||
|
@ -546167,6 +546287,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"handover.html": [
|
||||
"378d65ffc320bf0ac6a6a16690dd992d0f5e536d",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"ice-state.https.html": [
|
||||
"becce59509b792dd5d63571bff065d93185ca1fa",
|
||||
[
|
||||
|
@ -552454,6 +552581,15 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"layers": {
|
||||
"xrWebGLBinding_constructor.https.html": [
|
||||
"b3457cf3203005562785b0a93f8e462c01addbc8",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"navigator_xr_sameObject.https.html": [
|
||||
"2c3ea541a97301d4dfabe93bc71c8c6d3c50b5d1",
|
||||
[
|
||||
|
@ -555024,6 +555160,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"dedicated-worker-import-data-url-cross-origin.html": [
|
||||
"37390947b642ebf1ff80434d6e870a0118d3b0be",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"dedicated-worker-import-data-url.any.js": [
|
||||
"0d8510da0c24ad378d1215157a70b4fd615a3d94",
|
||||
[
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[CaretPosition-001.html]
|
||||
[Element at (400, 100)]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[keepalive.html]
|
||||
[cross-origin redirect with preflight]
|
||||
expected: FAIL
|
||||
|
|
@ -318,21 +318,18 @@
|
|||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate 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 */*]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -53,6 +53,6 @@
|
|||
[combined text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,3 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_5.html]
|
||||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +0,0 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
|
|
@ -65,3 +65,9 @@
|
|||
[Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData]
|
||||
expected: FAIL
|
||||
|
||||
[Test createImageData(width, height) from e-SRGB canvas ]
|
||||
expected: FAIL
|
||||
|
||||
[Test createImageData(width, height) from SRGB canvas ]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -10,7 +9,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -172,3 +172,6 @@
|
|||
[XHTML img usemap="http://example.org/#garbage-before-hash-id"]
|
||||
expected: FAIL
|
||||
|
||||
[HTML (standards) IMG usemap="no-hash-name"]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[module-delayed.html]
|
||||
[async document.write in a module]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -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]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[realtimeanalyser-fft-scaling.html]
|
||||
expected: TIMEOUT
|
||||
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[audiocontext-not-fully-active.html]
|
||||
expected: TIMEOUT
|
||||
[frame in navigated remote-site frame]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -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
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<div style="width: 100px; height: 100px; overflow: auto;">
|
||||
<div style="height: 200px; background: green;"></div>
|
||||
</div>
|
|
@ -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>
|
|
@ -11,6 +11,16 @@
|
|||
<script>
|
||||
"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 => {
|
||||
const iframe = await createIFrame(t, 200, 100);
|
||||
const heightMQL = iframe.contentWindow.matchMedia("(max-height: 50px)");
|
||||
|
|
|
@ -136,7 +136,7 @@ function runTestCreateImageDataWH(canvasColorSettings) {
|
|||
|
||||
var testScenariosCreateImageDataWH = [];
|
||||
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 ";
|
||||
testScenariosCreateImageDataWH.
|
||||
push([message, canvasColorSettingsSet[i].colorSettings]);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<meta name="timeout" content="long">
|
||||
<title>Service Worker: WindowClient.navigate</title>
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
|
@ -32,154 +33,75 @@
|
|||
});
|
||||
}
|
||||
|
||||
promise_test(function(t) {
|
||||
var worker = "resources/client-navigate-worker.js";
|
||||
var scope = "resources/client-navigate-frame.html";
|
||||
var controller, frame, clientId;
|
||||
async function with_controlled_iframe_and_url(t, name, f) {
|
||||
const SCRIPT = "resources/client-navigate-worker.js";
|
||||
const SCOPE = "resources/client-navigate-frame.html";
|
||||
|
||||
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_success"))
|
||||
.then(({result, url}) => {
|
||||
assert_equals(result, "test_client_navigate_success");
|
||||
// Register service worker and wait for it to become activated
|
||||
const registration = await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
|
||||
t.add_cleanup(() => registration.unregister());
|
||||
const worker = registration.installing;
|
||||
await wait_for_state(t, worker, 'activated');
|
||||
|
||||
// Create child iframe and make sure we register a listener for the message
|
||||
// it sends before it's created
|
||||
const client_id_promise = wait_for_message();
|
||||
const iframe = await with_iframe(SCOPE);
|
||||
t.add_cleanup(() => iframe.remove());
|
||||
const { id } = await client_id_promise;
|
||||
|
||||
// Run the test in the service worker and fetch it
|
||||
const { result, url } = await run_test(worker, id, name);
|
||||
fetch_tests_from_worker(worker);
|
||||
assert_equals(result, name);
|
||||
|
||||
// Hand over the iframe and URL from the service worker to the callback
|
||||
await f(iframe, url);
|
||||
}
|
||||
|
||||
promise_test(function(t) {
|
||||
return with_controlled_iframe_and_url(t, 'test_client_navigate_success', async (iframe, url) => {
|
||||
assert_equals(
|
||||
url, new URL("resources/client-navigated-frame.html",
|
||||
location).toString());
|
||||
assert_equals(
|
||||
frame.contentWindow.location.href,
|
||||
iframe.contentWindow.location.href,
|
||||
new URL("resources/client-navigated-frame.html",
|
||||
location).toString());
|
||||
frame.remove();
|
||||
})
|
||||
.catch(unreached_rejection(t))
|
||||
.then(___ => service_worker_unregister(t, scope));
|
||||
});
|
||||
}, "Frame location should update on successful navigation");
|
||||
|
||||
promise_test(function(t) {
|
||||
var worker = "resources/client-navigate-worker.js";
|
||||
var scope = "resources/client-navigate-frame.html";
|
||||
var controller, frame, clientId;
|
||||
|
||||
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");
|
||||
return with_controlled_iframe_and_url(t, 'test_client_navigate_redirect', async (iframe, url) => {
|
||||
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));
|
||||
assert_throws_dom("SecurityError", function() { return iframe.contentWindow.location.href });
|
||||
});
|
||||
}, "Frame location should not be accessible after redirect");
|
||||
|
||||
promise_test(function(t) {
|
||||
var worker = "resources/client-navigate-worker.js";
|
||||
var scope = "resources/client-navigate-frame.html";
|
||||
var controller, frame, clientId;
|
||||
|
||||
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");
|
||||
return with_controlled_iframe_and_url(t, 'test_client_navigate_cross_origin', async (iframe, url) => {
|
||||
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));
|
||||
assert_throws_dom("SecurityError", function() { return iframe.contentWindow.location.href });
|
||||
});
|
||||
}, "Frame location should not be accessible after cross-origin navigation");
|
||||
|
||||
promise_test(function(t) {
|
||||
var worker = "resources/client-navigate-worker.js";
|
||||
var scope = "resources/client-navigate-frame.html";
|
||||
var controller, frame, clientId;
|
||||
|
||||
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");
|
||||
return with_controlled_iframe_and_url(t, 'test_client_navigate_about_blank', async (iframe, url) => {
|
||||
assert_equals(
|
||||
frame.contentWindow.location.href,
|
||||
iframe.contentWindow.location.href,
|
||||
new URL("resources/client-navigate-frame.html",
|
||||
location).toString());
|
||||
frame.contentWindow.document.body.style = "background-color: green"
|
||||
frame.remove();
|
||||
})
|
||||
.catch(unreached_rejection(t))
|
||||
.then(___ => service_worker_unregister(t, scope));
|
||||
iframe.contentWindow.document.body.style = "background-color: green"
|
||||
});
|
||||
}, "Frame location should not update on failed about:blank navigation");
|
||||
|
||||
promise_test(function(t) {
|
||||
var worker = "resources/client-navigate-worker.js";
|
||||
var scope = "resources/client-navigate-frame.html";
|
||||
var controller, frame, clientId;
|
||||
|
||||
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");
|
||||
return with_controlled_iframe_and_url(t, 'test_client_navigate_mixed_content', async (iframe, url) => {
|
||||
assert_equals(
|
||||
frame.contentWindow.location.href,
|
||||
iframe.contentWindow.location.href,
|
||||
new URL("resources/client-navigate-frame.html",
|
||||
location).toString());
|
||||
frame.contentWindow.document.body.style = "background-color: green"
|
||||
frame.remove();
|
||||
})
|
||||
.catch(unreached_rejection(t))
|
||||
.then(___ => service_worker_unregister(t, scope));
|
||||
iframe.contentWindow.document.body.style = "background-color: green"
|
||||
});
|
||||
}, "Frame location should not update on failed mixed-content navigation");
|
||||
</script>
|
||||
|
|
|
@ -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>
|
|
@ -3,6 +3,8 @@ importScripts("test-helpers.sub.js");
|
|||
importScripts("/common/get-host-info.sub.js")
|
||||
importScripts("testharness-helpers.js")
|
||||
|
||||
setup({ explicit_done: true });
|
||||
|
||||
self.onfetch = function(e) {
|
||||
if (e.request.url.indexOf("client-navigate-frame.html") >= 0) {
|
||||
return;
|
||||
|
@ -35,6 +37,7 @@ self.onmessage = function(e) {
|
|||
})
|
||||
.catch(unreached_rejection(t));
|
||||
}, "Return value should be instance of WindowClient");
|
||||
done();
|
||||
} else if (test === "test_client_navigate_cross_origin") {
|
||||
promise_test(function(t) {
|
||||
this.add_cleanup(() => port.postMessage(pass(test, clientUrl)));
|
||||
|
@ -49,6 +52,7 @@ self.onmessage = function(e) {
|
|||
})
|
||||
.catch(unreached_rejection(t));
|
||||
}, "Navigating to different origin should resolve with null");
|
||||
done();
|
||||
} else if (test === "test_client_navigate_about_blank") {
|
||||
promise_test(function(t) {
|
||||
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")))
|
||||
.catch(unreached_rejection(t));
|
||||
}, "Navigating to about:blank should reject with TypeError");
|
||||
done();
|
||||
} else if (test === "test_client_navigate_mixed_content") {
|
||||
promise_test(function(t) {
|
||||
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)))
|
||||
.catch(unreached_rejection(t));
|
||||
}, "Navigating to mixed-content iframe should reject with TypeError");
|
||||
done();
|
||||
} else if (test === "test_client_navigate_redirect") {
|
||||
var host_info = get_host_info();
|
||||
var url = new URL(host_info['HTTPS_REMOTE_ORIGIN']).toString() +
|
||||
|
@ -81,5 +87,6 @@ self.onmessage = function(e) {
|
|||
})
|
||||
.catch(unreached_rejection(t));
|
||||
}, "Redirecting to another origin should resolve with null");
|
||||
done();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
importScripts('https://{{domains[www1]}}:{{ports[https][0]}}/service-workers/service-worker/resources/import-scripts-version.py');
|
|
@ -9,12 +9,20 @@
|
|||
<body>
|
||||
|
||||
<script>
|
||||
function testElementType(allowsShadowDom, elementType, mode, delegatesFocus) {
|
||||
var t = test(t => {
|
||||
function testElementType(allowsShadowDom, elementType, applyToShadow, mode, delegatesFocus) {
|
||||
const t = test(t => {
|
||||
// Create and attach element
|
||||
const wrapper = document.createElement('div');
|
||||
let wrapper;
|
||||
if (applyToShadow) {
|
||||
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);
|
||||
wrapper.appendChild(element);
|
||||
|
||||
|
@ -44,7 +52,7 @@ function testElementType(allowsShadowDom, elementType, mode, delegatesFocus) {
|
|||
// 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');
|
||||
|
||||
}, `getInnerHTML() on <${elementType}>${allowsShadowDom ? `, with mode=${mode}, delegatesFocus=${delegatesFocus}.` : ''}`);
|
||||
}, `${applyToShadow ? 'ShadowRoot' : 'Element'}.getInnerHTML() on <${elementType}>${allowsShadowDom ? `, with mode=${mode}, delegatesFocus=${delegatesFocus}.` : ''}`);
|
||||
}
|
||||
|
||||
function runAllTests() {
|
||||
|
@ -52,14 +60,16 @@ function runAllTests() {
|
|||
const safelisted = ATTACHSHADOW_SAFELISTED_ELEMENTS;
|
||||
for (const elementName of allElements) {
|
||||
const allowsShadowDom = safelisted.includes(elementName);
|
||||
for (const applyToShadow of [false, true]) {
|
||||
if (allowsShadowDom) {
|
||||
for (const delegatesFocus of [false, true]) {
|
||||
for (const mode of ['open', 'closed']) {
|
||||
testElementType(true, elementName, mode, delegatesFocus);
|
||||
testElementType(true, elementName, applyToShadow, mode, delegatesFocus);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
testElementType(false, elementName);
|
||||
testElementType(false, elementName, applyToShadow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,13 +8,20 @@
|
|||
|
||||
<body>
|
||||
<script>
|
||||
function testElementType(allowsShadowDom, elementType) {
|
||||
var t = test(t => {
|
||||
function testElementType(allowsShadowDom, elementType, applyToShadow) {
|
||||
const t = test(t => {
|
||||
// Create and attach element
|
||||
const wrapper = document.createElement('div');
|
||||
let wrapper;
|
||||
if (applyToShadow) {
|
||||
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}>`;
|
||||
wrapper.setInnerHTML(html, {allowShadowRoot: true});
|
||||
if (allowsShadowDom) {
|
||||
|
@ -24,14 +31,16 @@ function testElementType(allowsShadowDom, elementType) {
|
|||
const leftover = wrapper.firstElementChild.firstElementChild;
|
||||
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() {
|
||||
const allElements = [...HTML5_ELEMENT_NAMES, 'htmlunknown'].filter(item => item !== 'body');
|
||||
const safelisted = ATTACHSHADOW_SAFELISTED_ELEMENTS;
|
||||
for (const elementName of allElements) {
|
||||
testElementType(safelisted.includes(elementName), elementName);
|
||||
for (const applyToShadow of [false, true]) {
|
||||
testElementType(safelisted.includes(elementName), elementName, applyToShadow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,6 @@ mozdebug==0.2
|
|||
# Pillow 7 requires Python 3
|
||||
pillow==6.2.2; python_version <= '2.7' # pyup: <7.0
|
||||
pillow==8.0.1; python_version >= '3.0'
|
||||
urllib3[secure]==1.26.1
|
||||
urllib3[secure]==1.26.2
|
||||
requests==2.24.0
|
||||
six==1.15.0
|
||||
|
|
|
@ -5,10 +5,12 @@
|
|||
<title>Focus-related events should fire in the correct order</title>
|
||||
<link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
|
||||
<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/testharnessreport.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>
|
||||
|
||||
<body>
|
||||
|
@ -40,7 +42,9 @@ var relevantEvents = [
|
|||
window.onload = function () {
|
||||
var a = document.getElementById("a");
|
||||
var b = document.getElementById("b");
|
||||
var button = document.getElementById("done");
|
||||
var inputs = [a, b];
|
||||
var actions_promise;
|
||||
EventRecorder.configure({
|
||||
objectMap: {
|
||||
"a": a,
|
||||
|
@ -50,25 +54,41 @@ window.onload = function () {
|
|||
|
||||
EventRecorder.addEventListenersForNodes(relevantEvents, inputs, stopPropagation);
|
||||
var expected = [
|
||||
{type: "focusin", target: "a"},
|
||||
{type: "focus", target: "a"},
|
||||
{type: "focusout", target: "a"},
|
||||
{type: "focusin", target: "b"},
|
||||
{type: "focusin", target: "a"},
|
||||
{type: "blur", target: "a"},
|
||||
{type: "focusout", target: "a"},
|
||||
{type: "focus", target: "b"},
|
||||
{type: "focusout", target: "b"},
|
||||
{type: "blur", target: "b"}
|
||||
{type: "focusin", target: "b"},
|
||||
{type: "blur", target: "b"},
|
||||
{type: "focusout", target: "b"}
|
||||
];
|
||||
|
||||
async_test(function(t) {
|
||||
document.getElementById("done").addEventListener("click", function () {
|
||||
button.addEventListener("click", function () {
|
||||
t.step(function () {
|
||||
assert_true(EventRecorder.checkRecords(expected));
|
||||
// Make sure the test finishes after all the input actions are completed.
|
||||
actions_promise.then( () => {
|
||||
t.done();
|
||||
});
|
||||
});
|
||||
}, false);
|
||||
}, "Focus-related events should fire in the correct order");
|
||||
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>
|
||||
</html>
|
74
tests/wpt/web-platform-tests/webrtc/protocol/handover.html
Normal file
74
tests/wpt/web-platform-tests/webrtc/protocol/handover.html
Normal 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>
|
|
@ -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>
|
|
@ -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: request’s current URL’s 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>
|
|
@ -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'];")
|
|
@ -4,6 +4,16 @@ const testCases = [
|
|||
expectation: ['export-on-load-script.js'],
|
||||
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',
|
||||
expectation: [
|
||||
|
|
|
@ -8,6 +8,7 @@ let worker;
|
|||
// Creates a new dedicated worker for a given script url.
|
||||
window.onmessage = e => {
|
||||
worker = new Worker(e.data, { type: 'module' });
|
||||
worker.postMessage('start');
|
||||
worker.onmessage = msg => window.opener.postMessage(msg.data, '*');
|
||||
worker.onerror = err => {
|
||||
window.opener.postMessage(['ERROR'], '*');
|
||||
|
|
|
@ -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)
|
|
@ -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);
|
||||
};
|
||||
}
|
|
@ -1,12 +1,20 @@
|
|||
// 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 &&
|
||||
self instanceof DedicatedWorkerGlobalScope) {
|
||||
postMessage(module.importedModules);
|
||||
self.onmessage = e => {
|
||||
e.target.postMessage(module.importedModules);
|
||||
};
|
||||
} else if (
|
||||
'SharedWorkerGlobalScope' in self &&
|
||||
self instanceof SharedWorkerGlobalScope) {
|
||||
onconnect = e => {
|
||||
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);
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue