mirror of
https://github.com/servo/servo.git
synced 2025-08-04 05:00:08 +01:00
Update web-platform-tests to revision 7cb66930f16381536cec572cd3f4f86c7bbb6787
This commit is contained in:
parent
c183f95297
commit
9cff065d01
80 changed files with 1357 additions and 359 deletions
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -318,12 +318,15 @@
|
|||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,12 +56,9 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,3 @@
|
|||
[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%20%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[Element with tabindex should support autofocus]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
expected: CRASH
|
||||
[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,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[077.html]
|
||||
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
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,10 +1,9 @@
|
|||
[promise-job-entry-different-function-realm.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Thenable resolution]
|
||||
expected: FAIL
|
||||
|
@ -13,5 +12,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,3 +1,9 @@
|
|||
[abort.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[abort.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[abort.any.worker.html]
|
||||
[abort after connect should do nothing]
|
||||
expected: FAIL
|
||||
|
@ -9,12 +15,6 @@
|
|||
expected: FAIL
|
||||
|
||||
|
||||
[abort.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
[abort]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[abort.any.html]
|
||||
[abort after connect should do nothing]
|
||||
expected: FAIL
|
||||
|
@ -25,9 +25,3 @@
|
|||
[abort before constructing should prevent connection]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[abort.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
[abort]
|
||||
expected: FAIL
|
||||
|
|
@ -10,12 +10,6 @@
|
|||
|
||||
[backpressure-receive.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
[backpressure-receive]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[backpressure-receive.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
[backpressure-receive]
|
||||
expected: FAIL
|
||||
|
|
@ -1,21 +1,15 @@
|
|||
[backpressure-send.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
[backpressure-send]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[backpressure-send.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
[backpressure-send]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[backpressure-send.any.worker.html]
|
||||
[backpressure should be applied to sent messages]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[backpressure-send.any.html]
|
||||
[backpressure should be applied to sent messages]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[backpressure-send.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[backpressure-send.any.worker.html]
|
||||
[backpressure should be applied to sent messages]
|
||||
expected: FAIL
|
||||
|
|
@ -1,88 +1,5 @@
|
|||
[close.any.html]
|
||||
[unspecified close code with non-empty reason should set code to 1000]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with an invalid code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with an overlong reason should throw]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 5000 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a DOMException should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 999 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a DOMException should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close(true) should throw a TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a reason but no code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[closing the writable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[close during handshake should work]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with an invalid code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a code and reason should use them]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a code and reason should use them]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a code should send that code]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 2999 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a reason but no code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with an invalid reason should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[writer close() promise should not resolve until handshake completes]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a code should send that code]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with an invalid reason should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 1001 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[close code should be sent to server and reflected back]
|
||||
expected: FAIL
|
||||
|
||||
[no close argument should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[unspecified close code with empty reason should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[unspecified close code should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[close.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[close.any.worker.html]
|
||||
[unspecified close code with non-empty reason should set code to 1000]
|
||||
|
@ -172,12 +89,89 @@
|
|||
|
||||
[close.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
[close]
|
||||
|
||||
[close.any.html]
|
||||
[unspecified close code with non-empty reason should set code to 1000]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[close.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
[close]
|
||||
[canceling the readable with an invalid code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with an overlong reason should throw]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 5000 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a DOMException should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 999 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a DOMException should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close(true) should throw a TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a reason but no code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[closing the writable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[close during handshake should work]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with an invalid code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a code and reason should use them]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a code and reason should use them]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a code should send that code]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 2999 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a reason but no code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with an invalid reason should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[writer close() promise should not resolve until handshake completes]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a code should send that code]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with an invalid reason should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 1001 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[close code should be sent to server and reflected back]
|
||||
expected: FAIL
|
||||
|
||||
[no close argument should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[unspecified close code with empty reason should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[unspecified close code should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
|
@ -1,34 +1,8 @@
|
|||
[constructor.any.worker.html]
|
||||
[constructing with a valid URL should work]
|
||||
expected: FAIL
|
||||
|
||||
[setting a protocol in the constructor should work]
|
||||
expected: FAIL
|
||||
|
||||
[wss.connection should resolve to the right types]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with no URL should throw]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with invalid options should throw]
|
||||
expected: FAIL
|
||||
|
||||
[connection failure should reject the promises]
|
||||
expected: FAIL
|
||||
|
||||
[protocols should be required to be a list]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with an invalid URL should throw]
|
||||
expected: FAIL
|
||||
|
||||
[constructor.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[constructor.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
[constructor]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[constructor.any.html]
|
||||
[constructing with a valid URL should work]
|
||||
|
@ -56,8 +30,28 @@
|
|||
expected: FAIL
|
||||
|
||||
|
||||
[constructor.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
[constructor]
|
||||
[constructor.any.worker.html]
|
||||
[constructing with a valid URL should work]
|
||||
expected: FAIL
|
||||
|
||||
[setting a protocol in the constructor should work]
|
||||
expected: FAIL
|
||||
|
||||
[wss.connection should resolve to the right types]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with no URL should throw]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with invalid options should throw]
|
||||
expected: FAIL
|
||||
|
||||
[connection failure should reject the promises]
|
||||
expected: FAIL
|
||||
|
||||
[protocols should be required to be a list]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with an invalid URL should throw]
|
||||
expected: FAIL
|
||||
|
|
@ -122800,6 +122800,19 @@
|
|||
]
|
||||
},
|
||||
"css-borders": {
|
||||
"borders-on-sub-unit-sized-elements.html": [
|
||||
"1aff3c9a6b22a8bbaebf8c6b91dfdcc8a6a08e44",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-borders/reference/borders-on-sub-unit-sized-elements-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"subpixel-borders-with-child-border-box-sizing.html": [
|
||||
"0f469e4eb42a8bb9708897a7829c92403b92196d",
|
||||
[
|
||||
|
@ -122971,6 +122984,97 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"break-between-avoid-000.html": [
|
||||
"4816be7ae7d5d2a0bc2ea736d8af6b91027b134d",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square-only.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"break-between-avoid-001.html": [
|
||||
"b26f04abaf4ae7bd27d635c719a8402106300690",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square-only.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"break-between-avoid-002.html": [
|
||||
"14fa2c3832adb9ffa3caf0270ea48a9107a0a93a",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square-only.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"break-between-avoid-003.html": [
|
||||
"de738d145ff5919eccdcea3aa924be92c51f26d8",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square-only.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"break-between-avoid-004.html": [
|
||||
"71545b76c03bf07b6075b1e358ab1dc597621e47",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square-only.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"break-between-avoid-005.html": [
|
||||
"f42110a6c4eda93a78227b65dd5ad2ea8b2e110e",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square-only.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"break-between-avoid-006.html": [
|
||||
"91e05b5a9287e076517175fb421a2f37da21b34e",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square-only.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"fieldset-001.html": [
|
||||
"d320fe15bebcfbdd332ee9411b548dab60f8fba6",
|
||||
[
|
||||
|
@ -155931,7 +156035,20 @@
|
|||
]
|
||||
],
|
||||
"scrollbar-empty-001.html": [
|
||||
"7910f4de950f70e0bd5ba3afcad8596876fdeaef",
|
||||
"0b2eebb569929f1ec19ef086d03e63e281fc5900",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/blank.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"scrollbar-empty-002.html": [
|
||||
"490146cad20d171b3ac3608ba676765bc41ea923",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -190297,6 +190414,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"outline-negative-offset-composited-scroll.html": [
|
||||
"4abde0e80425dffaec3a99b1d8ec94aefdb6bc94",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"outline-offset-001.html": [
|
||||
"a131e96e29ef8d6dd0f3cbbc03235ede4f71e014",
|
||||
[
|
||||
|
@ -286691,6 +286821,10 @@
|
|||
},
|
||||
"css-borders": {
|
||||
"reference": {
|
||||
"borders-on-sub-unit-sized-elements-ref.html": [
|
||||
"19233778ed87c6153924a153e5fdaadc5925a057",
|
||||
[]
|
||||
],
|
||||
"subpixel-borders-with-child-border-box-sizing-ref.html": [
|
||||
"b2311d5ba083cf7760af5d57003b7777b472ded1",
|
||||
[]
|
||||
|
@ -323270,7 +323404,7 @@
|
|||
[]
|
||||
],
|
||||
"tests2d.yaml": [
|
||||
"2bbc1986e2376afe1f8f2ca5b54c5368dceae272",
|
||||
"a22d1b740ad9aff61252ecb4a5341da971ecc583",
|
||||
[]
|
||||
],
|
||||
"tests2dtext.yaml": [
|
||||
|
@ -332932,7 +333066,7 @@
|
|||
[]
|
||||
],
|
||||
"badging.idl": [
|
||||
"fe17fa087013e400e48076ce9f0422fe17171b7f",
|
||||
"01481820935a08675e4bef734aada27b3151e814",
|
||||
[]
|
||||
],
|
||||
"battery-status.idl": [
|
||||
|
@ -332960,7 +333094,7 @@
|
|||
[]
|
||||
],
|
||||
"cookie-store.idl": [
|
||||
"88719369760e4b0da19ae18c4016d2ea5b3ffbe4",
|
||||
"b32cf6b9d8d8ed005a24293796a4aaf5f824ad07",
|
||||
[]
|
||||
],
|
||||
"cors-rfc1918.idl": [
|
||||
|
@ -333412,7 +333546,7 @@
|
|||
[]
|
||||
],
|
||||
"wai-aria.idl": [
|
||||
"845e2ef6cf84aa6fafbfdcadf167e440eaadd668",
|
||||
"ef8fd6342a59c3584536e6ec491ad20c2208c51d",
|
||||
[]
|
||||
],
|
||||
"wasm-js-api.idl": [
|
||||
|
@ -338986,7 +339120,7 @@
|
|||
[]
|
||||
],
|
||||
"testharness.js": [
|
||||
"bd7a8bab0057ed3290ea49635b05f0be50236f29",
|
||||
"cf361bac3920ef1b34a1861fcc4f886d442e21a3",
|
||||
[]
|
||||
],
|
||||
"testharness.js.headers": [
|
||||
|
@ -343413,7 +343547,7 @@
|
|||
[]
|
||||
],
|
||||
"lint.py": [
|
||||
"6a5359bfb8a87728068fee64a69ba1de0c62e94d",
|
||||
"c56720d9a3f712b184ce1491fa8cb85a3746197a",
|
||||
[]
|
||||
],
|
||||
"rules.py": [
|
||||
|
@ -343655,7 +343789,7 @@
|
|||
[]
|
||||
],
|
||||
"item.py": [
|
||||
"6601f9c719e040219e45bc7d0dce8c4a77a2734c",
|
||||
"ee07f0d1d797175374b169a468b4c2c8505796da",
|
||||
[]
|
||||
],
|
||||
"log.py": [
|
||||
|
@ -343667,7 +343801,7 @@
|
|||
[]
|
||||
],
|
||||
"sourcefile.py": [
|
||||
"f36ce1ab3304d7ae7b7ae1da9c25e0d7c1a3846f",
|
||||
"c374ba050434e89b5c915d21da42550d16ed3b7d",
|
||||
[]
|
||||
],
|
||||
"testpaths.py": [
|
||||
|
@ -343692,7 +343826,7 @@
|
|||
[]
|
||||
],
|
||||
"test_sourcefile.py": [
|
||||
"a8fbc27071408da061e7e166026f0baa0cb518e1",
|
||||
"4d2080a70283be308898536708993c0843cfcebb",
|
||||
[]
|
||||
],
|
||||
"test_utils.py": [
|
||||
|
@ -343875,7 +344009,7 @@
|
|||
[]
|
||||
],
|
||||
"serve.py": [
|
||||
"45bfd4766ebcd278ab068f9632471c5c23a3c3f1",
|
||||
"0e5090c2eef80abd774797771297df2759265c59",
|
||||
[]
|
||||
],
|
||||
"test_functional.py": [
|
||||
|
@ -349718,7 +349852,7 @@
|
|||
[]
|
||||
],
|
||||
"wpttest.py": [
|
||||
"4b43b73610a591808aec938932eca228c08342bf",
|
||||
"6b0fab6eebaf505ffd20710e1a2ca46e3d6f59de",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -352589,7 +352723,7 @@
|
|||
[]
|
||||
]
|
||||
},
|
||||
"stream-tentative": {
|
||||
"stream.tentative": {
|
||||
"README.md": [
|
||||
"6c5158877417a3271ff0179449eace740cf157a1",
|
||||
[]
|
||||
|
@ -383975,6 +384109,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"relayout-input.html": [
|
||||
"b95601c04c5cff8078896598ae5225776dc237dc",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"shrinking-column-flexbox.html": [
|
||||
"680dc7eb7f36e508437fab444660d58d03f00bfe",
|
||||
[
|
||||
|
@ -429340,6 +429481,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"proxy-getOwnPropertyDescriptor.html": [
|
||||
"c3db82f8502e8a6c989204449a6e4ac960a46681",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"security-window": {
|
||||
"window-security.https.html": [
|
||||
"ad8f177f37d2ad97d4923dd73855e03f08b587b6",
|
||||
|
@ -430566,7 +430714,7 @@
|
|||
]
|
||||
],
|
||||
"2d.drawImage.canvas.html": [
|
||||
"3f1573e6e9c50686843ceef3ba0569424dbf2e48",
|
||||
"18348d27bfcdd1b1aa323976e6163e64f62e225a",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -463135,7 +463283,7 @@
|
|||
]
|
||||
],
|
||||
"bailout-side-effects-ignore-opens-during-unload.window.js": [
|
||||
"6b80ecacf8f640ff94209dbd915049e261214eac",
|
||||
"98ffba20a1a17ce12881c68a736db5a81d3e3289",
|
||||
[
|
||||
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-side-effects-ignore-opens-during-unload.window.html",
|
||||
{
|
||||
|
@ -493046,7 +493194,7 @@
|
|||
},
|
||||
"storage-access-api": {
|
||||
"hasStorageAccess.sub.window.js": [
|
||||
"b8b9e492d2590a016fd32d48396e7c5e3f20d989",
|
||||
"21400e68619a051bb25a4989d3b981504db7c5d9",
|
||||
[
|
||||
"storage-access-api/hasStorageAccess.sub.window.html",
|
||||
{
|
||||
|
@ -498677,8 +498825,15 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"attribute-value-unaffected-by-animation.html": [
|
||||
"55ebb0a3c9a019f921bf585bc83a0b3a1ff3422a",
|
||||
"attribute-value-unaffected-by-animation-001.html": [
|
||||
"21271ff0308f189b5ecc29d84bbb408f3135840e",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"attribute-value-unaffected-by-animation-002.html": [
|
||||
"29878d02cbd7594213d8f42c0406d988e1fe37b9",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -513256,6 +513411,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"split.https.html": [
|
||||
"102771e23a536848f00249166ece10217766a380",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"video-codecs.https.html": [
|
||||
"a4905ae441a912797788d6d0b065a6c861d708b8",
|
||||
[
|
||||
|
@ -516950,11 +517112,11 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"stream-tentative": {
|
||||
"stream.tentative": {
|
||||
"abort.any.js": [
|
||||
"09664f31ea6fa34f6df20f3aafe0b3ecaf39a7c3",
|
||||
[
|
||||
"websockets/stream-tentative/abort.any.html",
|
||||
"websockets/stream.tentative/abort.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -516977,7 +517139,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/abort.any.serviceworker.html",
|
||||
"websockets/stream.tentative/abort.any.serviceworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517000,7 +517162,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/abort.any.sharedworker.html",
|
||||
"websockets/stream.tentative/abort.any.sharedworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517023,7 +517185,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/abort.any.worker.html",
|
||||
"websockets/stream.tentative/abort.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517049,7 +517211,7 @@
|
|||
"backpressure-receive.any.js": [
|
||||
"22705c6ed11d60148bfc41590e7e335f9351ef79",
|
||||
[
|
||||
"websockets/stream-tentative/backpressure-receive.any.html",
|
||||
"websockets/stream.tentative/backpressure-receive.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517073,7 +517235,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/backpressure-receive.any.serviceworker.html",
|
||||
"websockets/stream.tentative/backpressure-receive.any.serviceworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517097,7 +517259,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/backpressure-receive.any.sharedworker.html",
|
||||
"websockets/stream.tentative/backpressure-receive.any.sharedworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517121,7 +517283,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/backpressure-receive.any.worker.html",
|
||||
"websockets/stream.tentative/backpressure-receive.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517148,7 +517310,7 @@
|
|||
"backpressure-send.any.js": [
|
||||
"6619a0b08f3ee39e1845d69c20ca3ae7c2d4ca5f",
|
||||
[
|
||||
"websockets/stream-tentative/backpressure-send.any.html",
|
||||
"websockets/stream.tentative/backpressure-send.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517172,7 +517334,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/backpressure-send.any.serviceworker.html",
|
||||
"websockets/stream.tentative/backpressure-send.any.serviceworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517196,7 +517358,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/backpressure-send.any.sharedworker.html",
|
||||
"websockets/stream.tentative/backpressure-send.any.sharedworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517220,7 +517382,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/backpressure-send.any.worker.html",
|
||||
"websockets/stream.tentative/backpressure-send.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517247,7 +517409,7 @@
|
|||
"close.any.js": [
|
||||
"0e6149e7a635eb649910fbd813228f36f7eb0283",
|
||||
[
|
||||
"websockets/stream-tentative/close.any.html",
|
||||
"websockets/stream.tentative/close.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517266,7 +517428,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/close.any.serviceworker.html",
|
||||
"websockets/stream.tentative/close.any.serviceworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517285,7 +517447,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/close.any.sharedworker.html",
|
||||
"websockets/stream.tentative/close.any.sharedworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517304,7 +517466,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/close.any.worker.html",
|
||||
"websockets/stream.tentative/close.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517326,7 +517488,7 @@
|
|||
"constructor.any.js": [
|
||||
"24f96cc308252be2467bc73f027994542c92987c",
|
||||
[
|
||||
"websockets/stream-tentative/constructor.any.html",
|
||||
"websockets/stream.tentative/constructor.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517345,7 +517507,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/constructor.any.serviceworker.html",
|
||||
"websockets/stream.tentative/constructor.any.serviceworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517364,7 +517526,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/constructor.any.sharedworker.html",
|
||||
"websockets/stream.tentative/constructor.any.sharedworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -517383,7 +517545,7 @@
|
|||
}
|
||||
],
|
||||
[
|
||||
"websockets/stream-tentative/constructor.any.worker.html",
|
||||
"websockets/stream.tentative/constructor.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -519517,7 +519679,7 @@
|
|||
]
|
||||
],
|
||||
"xrSession_visibilityState.https.html": [
|
||||
"e7a6041036f9d7c06133c602c976a87c8868dc3e",
|
||||
"2311792d0fd0e748bed709bfc90682682d44d9fd",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -318,12 +318,15 @@
|
|||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,12 +56,9 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,3 @@
|
|||
[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%20%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Element with tabindex should support autofocus]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[077.html]
|
||||
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
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,10 +1,9 @@
|
|||
[promise-job-entry-different-function-realm.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Thenable resolution]
|
||||
expected: FAIL
|
||||
|
@ -13,5 +12,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
[abort.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[abort.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[abort.any.worker.html]
|
||||
[abort after connect should do nothing]
|
||||
expected: FAIL
|
||||
|
||||
[abort during handshake should work]
|
||||
expected: FAIL
|
||||
|
||||
[abort before constructing should prevent connection]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[abort.any.html]
|
||||
[abort after connect should do nothing]
|
||||
expected: FAIL
|
||||
|
||||
[abort during handshake should work]
|
||||
expected: FAIL
|
||||
|
||||
[abort before constructing should prevent connection]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
[backpressure-receive.any.html]
|
||||
[backpressure should be applied to received messages]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[backpressure-receive.any.worker.html]
|
||||
[backpressure should be applied to received messages]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[backpressure-receive.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[backpressure-receive.any.sharedworker.html]
|
||||
expected: ERROR
|
|
@ -0,0 +1,15 @@
|
|||
[backpressure-send.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[backpressure-send.any.html]
|
||||
[backpressure should be applied to sent messages]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[backpressure-send.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[backpressure-send.any.worker.html]
|
||||
[backpressure should be applied to sent messages]
|
||||
expected: FAIL
|
||||
|
177
tests/wpt/metadata/websockets/stream.tentative/close.any.js.ini
Normal file
177
tests/wpt/metadata/websockets/stream.tentative/close.any.js.ini
Normal file
|
@ -0,0 +1,177 @@
|
|||
[close.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[close.any.worker.html]
|
||||
[unspecified close code with non-empty reason should set code to 1000]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with an invalid code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with an overlong reason should throw]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 5000 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a DOMException should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 999 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a DOMException should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close(true) should throw a TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a reason but no code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[closing the writable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[close during handshake should work]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with an invalid code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a code and reason should use them]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a code and reason should use them]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a code should send that code]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 2999 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a reason but no code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with an invalid reason should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[writer close() promise should not resolve until handshake completes]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a code should send that code]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with an invalid reason should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 1001 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[close code should be sent to server and reflected back]
|
||||
expected: FAIL
|
||||
|
||||
[no close argument should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[unspecified close code with empty reason should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[unspecified close code should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[close.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[close.any.html]
|
||||
[unspecified close code with non-empty reason should set code to 1000]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with an invalid code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with an overlong reason should throw]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 5000 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a DOMException should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 999 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a DOMException should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close(true) should throw a TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a reason but no code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[closing the writable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[close during handshake should work]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with an invalid code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a code and reason should use them]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a code and reason should use them]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with a code should send that code]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 2999 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a reason but no code should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with an invalid reason should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[writer close() promise should not resolve until handshake completes]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable with a code should send that code]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the readable with an invalid reason should be ignored]
|
||||
expected: FAIL
|
||||
|
||||
[close() with invalid code 1001 should throw]
|
||||
expected: FAIL
|
||||
|
||||
[close code should be sent to server and reflected back]
|
||||
expected: FAIL
|
||||
|
||||
[no close argument should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[unspecified close code with empty reason should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
||||
[aborting the writable should result in a clean close]
|
||||
expected: FAIL
|
||||
|
||||
[unspecified close code should send empty Close frame]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
[constructor.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[constructor.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
||||
[constructor.any.html]
|
||||
[constructing with a valid URL should work]
|
||||
expected: FAIL
|
||||
|
||||
[setting a protocol in the constructor should work]
|
||||
expected: FAIL
|
||||
|
||||
[wss.connection should resolve to the right types]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with no URL should throw]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with invalid options should throw]
|
||||
expected: FAIL
|
||||
|
||||
[connection failure should reject the promises]
|
||||
expected: FAIL
|
||||
|
||||
[protocols should be required to be a list]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with an invalid URL should throw]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[constructor.any.worker.html]
|
||||
[constructing with a valid URL should work]
|
||||
expected: FAIL
|
||||
|
||||
[setting a protocol in the constructor should work]
|
||||
expected: FAIL
|
||||
|
||||
[wss.connection should resolve to the right types]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with no URL should throw]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with invalid options should throw]
|
||||
expected: FAIL
|
||||
|
||||
[connection failure should reject the promises]
|
||||
expected: FAIL
|
||||
|
||||
[protocols should be required to be a list]
|
||||
expected: FAIL
|
||||
|
||||
[constructing with an invalid URL should throw]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<title>CSS Borders: Borders appear when the element is smaller than 1/2 a pixel</title>
|
||||
<link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#border-width">
|
||||
<link rel="match" href="reference/borders-on-sub-unit-sized-elements-ref.html">
|
||||
<meta name="assert" content="Borders on elements smaller than one pixel in size
|
||||
should still appear." />
|
||||
<head>
|
||||
<style>
|
||||
#right {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 65px;
|
||||
width: 0.25px;
|
||||
height: 50px;
|
||||
border-right: 1px dashed black;
|
||||
}
|
||||
#left {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 5px;
|
||||
width: 0.25px;
|
||||
height: 50px;
|
||||
border-left: 1px dashed black;
|
||||
}
|
||||
#top {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 10px;
|
||||
width: 50px;
|
||||
height: 0.25px;
|
||||
border-top: 1px dashed black;
|
||||
}
|
||||
#bottom {
|
||||
position: absolute;
|
||||
top: 65px;
|
||||
left: 10px;
|
||||
width: 50px;
|
||||
height: 0.25px;
|
||||
border-bottom: 1px dashed black;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"></div>
|
||||
<div id="right"></div>
|
||||
<div id="bottom"></div>
|
||||
<div id="left"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<title>CSS Borders: Borders appear when the element is smaller than 1/2 a pixel, reference</title>
|
||||
<link rel="author" title="Stephen Chenney" href="mailto:schenney@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#border-width">
|
||||
<head>
|
||||
<style>
|
||||
#right {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 65px;
|
||||
width: 0px;
|
||||
height: 50px;
|
||||
border-right: 1px dashed black;
|
||||
}
|
||||
#left {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 5px;
|
||||
width: 0px;
|
||||
height: 50px;
|
||||
border-left: 1px dashed black;
|
||||
}
|
||||
#top {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 10px;
|
||||
width: 50px;
|
||||
height: 0px;
|
||||
border-top: 1px dashed black;
|
||||
}
|
||||
#bottom {
|
||||
position: absolute;
|
||||
top: 65px;
|
||||
left: 10px;
|
||||
width: 50px;
|
||||
height: 0px;
|
||||
border-bottom: 1px dashed black;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"></div>
|
||||
<div id="right"></div>
|
||||
<div id="bottom"></div>
|
||||
<div id="left"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||
<meta name="assert" content="Three blocks could fit in the first fragmentainer, but there's a break-before:avoid between the third and fourth block, so we should break between the second and third">
|
||||
<style>
|
||||
.square {
|
||||
height: 50px;
|
||||
break-inside: avoid;
|
||||
background:green;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; width:100px; height:160px;">
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
<div class="square" style="break-before:avoid;"></div>
|
||||
</div>
|
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||
<meta name="assert" content="Three blocks could fit in the first fragmentainer, but there's a break-after:avoid between the third and fourth block, so we should break between the second and third">
|
||||
<style>
|
||||
.square {
|
||||
height: 50px;
|
||||
break-inside: avoid;
|
||||
background:green;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; width:100px; height:160px;">
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
<div class="square" style="break-after:avoid;"></div>
|
||||
<div class="square"></div>
|
||||
</div>
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||
<meta name="assert" content="Need to violate break-before:avoid and break-after:avoid if there are no better breakpoints">
|
||||
<style>
|
||||
.container {
|
||||
break-before: avoid;
|
||||
break-after: avoid;
|
||||
}
|
||||
.square {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
background:green;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; width:100px; height:120px;">
|
||||
<div class="container">
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||
<meta name="assert" content="The best breakpoint may be inside content we're already past when running out of space">
|
||||
<style>
|
||||
.square {
|
||||
height: 50px;
|
||||
break-inside: avoid;
|
||||
background:green;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; width:100px; height:160px;">
|
||||
<div>
|
||||
<div class="square"></div>
|
||||
<div>
|
||||
<div>
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="square" style="break-before:avoid;"></div>
|
||||
</div>
|
|
@ -0,0 +1,31 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||
<meta name="assert" content="Violate orphans/widows requirements rather than break-before:avoid and break-after:avoid">
|
||||
<style>
|
||||
.container {
|
||||
break-before: avoid;
|
||||
break-after: avoid;
|
||||
}
|
||||
.square {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
background:green;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; width:100px; height:120px; orphans:2; widows:2;">
|
||||
<div class="container">
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||
<meta name="assert" content="A forced break trumps break avoidance preferences">
|
||||
<style>
|
||||
.square {
|
||||
height: 50px;
|
||||
break-inside: avoid;
|
||||
background:green;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; width:100px; height:110px;">
|
||||
<div class="square"></div>
|
||||
<div class="square" style="break-after:column;"></div>
|
||||
<div class="square" style="break-before:avoid;"></div>
|
||||
<div class="square"></div>
|
||||
</div>
|
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||
<meta name="assert" content="A forced break trumps break avoidance preferences">
|
||||
<style>
|
||||
.square {
|
||||
height: 50px;
|
||||
break-inside: avoid;
|
||||
background:green;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; width:100px; height:110px;">
|
||||
<div class="square"></div>
|
||||
<div>
|
||||
<div>
|
||||
<div class="square" style="break-after:column;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
<div class="square" style="break-before:avoid;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="square"></div>
|
||||
</div>
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://crbug.com/1082447" />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
<div style="display: flex; width: 100px;">
|
||||
<input id="target" style="position: relative; height: 20px; flex: 1; width: 0px;" data-expected-width="100" />
|
||||
</div>
|
||||
<script>
|
||||
test(function() {
|
||||
document.body.offsetTop;
|
||||
document.getElementById('target').value = 'text';
|
||||
checkLayout('#target');
|
||||
});
|
||||
</script>
|
|
@ -2,6 +2,8 @@
|
|||
<title>overflow-y: scroll on an empty element doesn't cause it to gain height</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-overflow-y">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1365806">
|
||||
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
<link rel="author" title="Mozilla" href="https://mozilla.org">
|
||||
<link rel="match" href="/css/reference/blank.html">
|
||||
<style>
|
||||
div {
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
<!doctype html>
|
||||
<title>overflow:auto containers shouldn't grow due to scrollbars, even if there's out of flow content that overflows</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-overflow-y">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1637511">
|
||||
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
<link rel="author" title="Mozilla" href="https://mozilla.org">
|
||||
<link rel="match" href="/css/reference/blank.html">
|
||||
|
||||
<!--
|
||||
If we create a horizontal scrollbar it'd cause overflow in the vertical
|
||||
direction as well, due to the svg's aspect-ratio.
|
||||
-->
|
||||
<div style="width: 300px;">
|
||||
<div style="overflow:auto">
|
||||
<div style="height: 0; position: relative;">
|
||||
<svg style="top: 0; left: 0; position: absolute" width="300" height="300"></svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<!doctype html>
|
||||
<title>CSS-UI test: outline-offset width negative values on scroller</title>
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel=help href="https://drafts.csswg.org/css-ui-3/#outline-props">
|
||||
<style>
|
||||
#container {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: red;
|
||||
will-change: transform;
|
||||
overflow: scroll;
|
||||
outline: solid 50px green;
|
||||
outline-offset: -50px;
|
||||
}
|
||||
#child {
|
||||
position: relative;
|
||||
will-change: transform;
|
||||
height: 1000px;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div id="container">
|
||||
<div id="child"></div>
|
||||
</div>
|
|
@ -0,0 +1,126 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>getOwnPropertyDescriptor() is correct for Proxy with host object target</title>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#window">
|
||||
<link rel="help" href="https://heycam.github.io/webidl/#Unforgeable">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
const assert_accessor_descriptor_equals = (actual, expected) => {
|
||||
assert_equals(actual.get, expected.get, 'get');
|
||||
assert_equals(actual.set, expected.set, 'set');
|
||||
assert_equals(actual.enumerable, expected.enumerable, 'enumerable');
|
||||
assert_equals(actual.configurable, expected.configurable, 'configurable');
|
||||
};
|
||||
|
||||
const assert_data_descriptor_equals = (actual, expected) => {
|
||||
assert_equals(actual.value, expected.value, 'value');
|
||||
assert_equals(actual.writable, expected.writable, 'writable');
|
||||
assert_equals(actual.enumerable, expected.enumerable, 'enumerable');
|
||||
assert_equals(actual.configurable, expected.configurable, 'configurable');
|
||||
};
|
||||
|
||||
test(() => {
|
||||
const windowProxy = new Proxy(window, {});
|
||||
name = 'old_name';
|
||||
const descriptor = Object.getOwnPropertyDescriptor(windowProxy, 'name');
|
||||
|
||||
assert_equals(descriptor.get.call(window), 'old_name');
|
||||
descriptor.set.call(window, 'new_name');
|
||||
assert_equals(name, 'new_name');
|
||||
assert_true(descriptor.enumerable);
|
||||
assert_true(descriptor.configurable);
|
||||
}, 'Window target, no trap, "name" attribute');
|
||||
|
||||
test(() => {
|
||||
let trapCalls = 0;
|
||||
const windowProxy = new Proxy(window, {
|
||||
getOwnPropertyDescriptor(...args) {
|
||||
trapCalls++;
|
||||
return Reflect.getOwnPropertyDescriptor(...args);
|
||||
},
|
||||
});
|
||||
|
||||
assert_accessor_descriptor_equals(
|
||||
Object.getOwnPropertyDescriptor(windowProxy, 'document'),
|
||||
Object.getOwnPropertyDescriptor(window, 'document')
|
||||
);
|
||||
assert_equals(trapCalls, 1);
|
||||
}, 'Window target, forwarding trap, [Unforgeable] "document" attribute');
|
||||
|
||||
test(() => {
|
||||
const trapResult = {get() {}, set(_val) {}, enumerable: false, configurable: true};
|
||||
const windowProxy = new Proxy(new Proxy(window, {}), {
|
||||
getOwnPropertyDescriptor: () => trapResult,
|
||||
});
|
||||
|
||||
assert_accessor_descriptor_equals(
|
||||
Object.getOwnPropertyDescriptor(windowProxy, 'onclick'),
|
||||
trapResult
|
||||
);
|
||||
}, 'Window proxy target, custom trap, "onclick" event handler attribute');
|
||||
|
||||
test(() => {
|
||||
let trapCalls = 0;
|
||||
const documentProxy = new Proxy(document, {
|
||||
getOwnPropertyDescriptor(...args) {
|
||||
trapCalls++;
|
||||
return Reflect.getOwnPropertyDescriptor(...args);
|
||||
},
|
||||
});
|
||||
|
||||
assert_accessor_descriptor_equals(
|
||||
Object.getOwnPropertyDescriptor(documentProxy, 'location'),
|
||||
Object.getOwnPropertyDescriptor(document, 'location')
|
||||
);
|
||||
assert_equals(trapCalls, 1);
|
||||
}, 'Document target, forwarding trap, [Unforgeable] "location" attribute');
|
||||
|
||||
test(() => {
|
||||
const trapResult = {value: 4, writable: false, enumerable: true, configurable: true};
|
||||
const documentProxy = new Proxy(new Proxy(document, {}), {
|
||||
getOwnPropertyDescriptor: () => trapResult,
|
||||
});
|
||||
|
||||
assert_data_descriptor_equals(
|
||||
Object.getOwnPropertyDescriptor(documentProxy, 'foo'),
|
||||
trapResult
|
||||
);
|
||||
}, 'Document proxy target, custom trap, non-existent value attribute');
|
||||
|
||||
test(() => {
|
||||
const locationProxy = new Proxy(location, {});
|
||||
location.hash = '#old';
|
||||
const descriptor = Object.getOwnPropertyDescriptor(locationProxy, 'hash');
|
||||
|
||||
assert_equals(descriptor.get.call(location), '#old');
|
||||
descriptor.set.call(location, '#new');
|
||||
assert_equals(location.hash, '#new');
|
||||
assert_true(descriptor.enumerable);
|
||||
assert_false(descriptor.configurable);
|
||||
}, 'Location target, no trap, [Unforgeable] "hash" attribute');
|
||||
|
||||
test(() => {
|
||||
let trapCalls = 0;
|
||||
const locationProxy = new Proxy(new Proxy(location, {}), {
|
||||
getOwnPropertyDescriptor(...args) {
|
||||
trapCalls++;
|
||||
return Reflect.getOwnPropertyDescriptor(...args);
|
||||
},
|
||||
});
|
||||
|
||||
assert_data_descriptor_equals(
|
||||
Object.getOwnPropertyDescriptor(locationProxy, 'reload'),
|
||||
Object.getOwnPropertyDescriptor(location, 'reload')
|
||||
);
|
||||
assert_equals(trapCalls, 1);
|
||||
}, 'Location proxy target, forwarding trap, [Unforgeable] "reload" method');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -34,6 +34,13 @@ _assertPixelApprox(canvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255", 2);
|
|||
_assertPixelApprox(canvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255", 2);
|
||||
_assertPixelApprox(canvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255", 2);
|
||||
|
||||
ctx.drawImage(document.createElement('canvas'), 0, 0);
|
||||
|
||||
_assertPixelApprox(canvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255", 2);
|
||||
_assertPixelApprox(canvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255", 2);
|
||||
_assertPixelApprox(canvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255", 2);
|
||||
_assertPixelApprox(canvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255", 2);
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -8886,6 +8886,13 @@
|
|||
@assert pixel 99,0 ==~ 0,255,0,255;
|
||||
@assert pixel 0,49 ==~ 0,255,0,255;
|
||||
@assert pixel 99,49 ==~ 0,255,0,255;
|
||||
|
||||
ctx.drawImage(document.createElement('canvas'), 0, 0);
|
||||
|
||||
@assert pixel 0,0 ==~ 0,255,0,255;
|
||||
@assert pixel 99,0 ==~ 0,255,0,255;
|
||||
@assert pixel 0,49 ==~ 0,255,0,255;
|
||||
@assert pixel 99,49 ==~ 0,255,0,255;
|
||||
expected: green
|
||||
|
||||
- name: 2d.drawImage.self.1
|
||||
|
|
|
@ -6,20 +6,12 @@ for (const ev of ["unload", "beforeunload", "pagehide"]) {
|
|||
t.add_cleanup(() => iframe.remove());
|
||||
iframe.src = "/common/blank.html";
|
||||
iframe.onload = t.step_func(() => {
|
||||
iframe.contentWindow.addEventListener(ev, t.step_func(() => {
|
||||
// Here, the entry settings object could still be the iframe's. Delay
|
||||
// it in such a way that ensures the entry settings object is the
|
||||
// top-level page's, but without delaying too much that the
|
||||
// ignore-opens-during-unload counter becomes decremented. A microtask
|
||||
// is perfect as it's executed immediately in "clean up after running
|
||||
// script".
|
||||
Promise.resolve().then(t.step_func_done(() => {
|
||||
iframe.contentWindow.addEventListener(ev, t.step_func_done(() => {
|
||||
const origURL = iframe.contentDocument.URL;
|
||||
assertDocumentIsReadyForSideEffectsTest(iframe.contentDocument, `ignore-opens-during-unload counter is greater than 0 during ${ev} event`);
|
||||
assert_equals(iframe.contentDocument.open(), iframe.contentDocument);
|
||||
assertOpenHasNoSideEffects(iframe.contentDocument, origURL, `ignore-opens-during-unload counter is greater than 0 during ${ev} event`);
|
||||
}));
|
||||
}));
|
||||
iframe.src = "about:blank";
|
||||
});
|
||||
}, `document.open bailout should not have any side effects (ignore-opens-during-unload is greater than 0 during ${ev} event)`);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content was automatically extracted by Reffy into reffy-reports
|
||||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: Badging API (https://wicg.github.io/badging/)
|
||||
// Source: Badging API (https://w3c.github.io/badging/)
|
||||
|
||||
// Methods only exposed on documents.
|
||||
[SecureContext]
|
||||
|
|
|
@ -44,7 +44,6 @@ dictionary CookieStoreSetOptions {
|
|||
DOMTimeStamp? expires = null;
|
||||
USVString? domain = null;
|
||||
USVString path = "/";
|
||||
boolean secure = true;
|
||||
CookieSameSite sameSite = "strict";
|
||||
};
|
||||
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
// Source: Accessible Rich Internet Applications (WAI-ARIA) 1.2 (https://rawgit.com/w3c/aria/master/)
|
||||
|
||||
interface mixin AccessibilityRole {
|
||||
attribute DOMString? role;
|
||||
attribute DOMString role;
|
||||
};
|
||||
Element includes AccessibilityRole;
|
||||
|
||||
interface mixin AriaAttributes {
|
||||
attribute Element? ariaActiveDescendantElement;
|
||||
|
||||
attribute DOMString? ariaAtomic;
|
||||
attribute DOMString? ariaAutoComplete;
|
||||
attribute DOMString? ariaBusy;
|
||||
|
@ -18,28 +18,28 @@ interface mixin AriaAttributes {
|
|||
attribute DOMString? ariaColIndex;
|
||||
attribute DOMString? ariaColIndexText;
|
||||
attribute DOMString? ariaColSpan;
|
||||
attribute FrozenArray<Element>? ariaControlsElements;
|
||||
|
||||
attribute DOMString? ariaCurrent;
|
||||
attribute FrozenArray<Element>? ariaDescribedByElements;
|
||||
|
||||
attribute DOMString? ariaDescription;
|
||||
attribute FrozenArray<Element>? ariaDetailsElements;
|
||||
|
||||
attribute DOMString? ariaDisabled;
|
||||
attribute Element? ariaErrorMessageElement;
|
||||
|
||||
attribute DOMString? ariaExpanded;
|
||||
attribute FrozenArray<Element>? ariaFlowToElements;
|
||||
|
||||
attribute DOMString? ariaHasPopup;
|
||||
attribute DOMString? ariaHidden;
|
||||
attribute DOMString? ariaInvalid;
|
||||
attribute DOMString? ariaKeyShortcuts;
|
||||
attribute DOMString? ariaLabel;
|
||||
attribute FrozenArray<Element>? ariaLabelledByElements;
|
||||
|
||||
attribute DOMString? ariaLevel;
|
||||
attribute DOMString? ariaLive;
|
||||
attribute DOMString? ariaModal;
|
||||
attribute DOMString? ariaMultiLine;
|
||||
attribute DOMString? ariaMultiSelectable;
|
||||
attribute DOMString? ariaOrientation;
|
||||
attribute FrozenArray<Element>? ariaOwnsElements;
|
||||
|
||||
attribute DOMString? ariaPlaceholder;
|
||||
attribute DOMString? ariaPosInSet;
|
||||
attribute DOMString? ariaPressed;
|
||||
|
|
|
@ -1190,6 +1190,8 @@ policies and contribution forms [3].
|
|||
}
|
||||
expose(assert_in_array, "assert_in_array");
|
||||
|
||||
// This function was deprecated in July of 2015.
|
||||
// See https://github.com/web-platform-tests/wpt/issues/2033
|
||||
function assert_object_equals(actual, expected, description)
|
||||
{
|
||||
assert(typeof actual === "object" && actual !== null, "assert_object_equals", description,
|
||||
|
|
|
@ -55,7 +55,7 @@ if (topLevelDocument) {
|
|||
RunTestsInIFrame("hasStorageAccess.sub.window.html?testCase=same-origin-frame&rootdocument=false");
|
||||
|
||||
// Create a test with a single-child cross-origin iframe.
|
||||
RunTestsInIFrame("http://{{domains[www]}}:{{ports[http][0]}}/storage-access-api/hasStorageAccess.sub.window.html?testCase=cross-origin-frame&allowed=false&rootdocument=false");
|
||||
RunTestsInIFrame("http://{{domains[www]}}:{{ports[http][0]}}/storage-access-api/hasStorageAccess.sub.window.html?testCase=cross-origin-frame&rootdocument=false");
|
||||
|
||||
// Validate the nested-iframe scenario where the same-origin frame containing
|
||||
// the tests is not the first child.
|
||||
|
@ -63,5 +63,5 @@ if (topLevelDocument) {
|
|||
|
||||
// Validate the nested-iframe scenario where the cross-origin frame containing
|
||||
// the tests is not the first child.
|
||||
RunTestsInNestedIFrame("http://{{domains[www]}}:{{ports[http][0]}}/storage-access-api/hasStorageAccess.sub.window.html?testCase=nested-cross-origin-frame&allowed=false&rootdocument=false");
|
||||
RunTestsInNestedIFrame("http://{{domains[www]}}:{{ports[http][0]}}/storage-access-api/hasStorageAccess.sub.window.html?testCase=nested-cross-origin-frame&rootdocument=false");
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!doctype html>
|
||||
<title>An animation of an attribute does not change the DOM attribute value</title>
|
||||
<title>An animation of an attribute ('class') does not change the DOM attribute value</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/2001/REC-smil-animation-20010904/#BasicAnim">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
|
@ -0,0 +1,21 @@
|
|||
<!doctype html>
|
||||
<title>An animation of an attribute ('orient') does not change the DOM attribute value</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/2001/REC-smil-animation-20010904/#BasicAnim">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<svg>
|
||||
<marker orient="90">
|
||||
<set attributeName="orient" to="auto"/>
|
||||
</rect>
|
||||
</svg>
|
||||
<script>
|
||||
async_test(t => {
|
||||
onload = t.step_func(() => {
|
||||
requestAnimationFrame(t.step_func_done(() => {
|
||||
let marker = document.querySelector('marker');
|
||||
marker.orientAngle.baseVal.valueInSpecifiedUnits = 180;
|
||||
assert_equals(marker.getAttribute('orient'), '180');
|
||||
}));
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -652,7 +652,7 @@ broken_python_metadata = re.compile(br"#\s*META:")
|
|||
|
||||
def check_global_metadata(value):
|
||||
# type: (str) -> Iterable[Tuple[Type[rules.Rule], Tuple[Any, ...]]]
|
||||
global_values = {item.strip() for item in value.split(b",") if item.strip()}
|
||||
global_values = {item.strip().decode("utf8") for item in value.split(b",") if item.strip()}
|
||||
|
||||
# TODO: this could check for duplicates and such
|
||||
for global_value in global_values:
|
||||
|
|
|
@ -212,7 +212,7 @@ class TestharnessTest(URLManifestItem):
|
|||
if self.quic is not None:
|
||||
rv[-1]["quic"] = self.quic
|
||||
if self.script_metadata:
|
||||
rv[-1]["script_metadata"] = [(k.decode('utf8'), v.decode('utf8')) for (k,v) in self.script_metadata]
|
||||
rv[-1]["script_metadata"] = [(k, v) for (k,v) in self.script_metadata]
|
||||
return rv
|
||||
|
||||
|
||||
|
|
|
@ -56,9 +56,9 @@ def replace_end(s, old, new):
|
|||
|
||||
|
||||
def read_script_metadata(f, regexp):
|
||||
# type: (BinaryIO, Pattern[bytes]) -> Iterable[Tuple[bytes, bytes]]
|
||||
# type: (BinaryIO, Pattern[bytes]) -> Iterable[Tuple[Text, Text]]
|
||||
"""
|
||||
Yields any metadata (pairs of bytestrings) from the file-like object `f`,
|
||||
Yields any metadata (pairs of strings) from the file-like object `f`,
|
||||
as specified according to a supplied regexp.
|
||||
|
||||
`regexp` - Regexp containing two groups containing the metadata name and
|
||||
|
@ -70,25 +70,25 @@ def read_script_metadata(f, regexp):
|
|||
if not m:
|
||||
break
|
||||
|
||||
yield (m.groups()[0], m.groups()[1])
|
||||
yield (m.groups()[0].decode("utf8"), m.groups()[1].decode("utf8"))
|
||||
|
||||
|
||||
_any_variants = {
|
||||
b"window": {"suffix": ".any.html"},
|
||||
b"serviceworker": {"force_https": True},
|
||||
b"sharedworker": {},
|
||||
b"dedicatedworker": {"suffix": ".any.worker.html"},
|
||||
b"worker": {"longhand": {b"dedicatedworker", b"sharedworker", b"serviceworker"}},
|
||||
b"jsshell": {"suffix": ".any.js"},
|
||||
} # type: Dict[bytes, Dict[str, Any]]
|
||||
"window": {"suffix": ".any.html"},
|
||||
"serviceworker": {"force_https": True},
|
||||
"sharedworker": {},
|
||||
"dedicatedworker": {"suffix": ".any.worker.html"},
|
||||
"worker": {"longhand": {"dedicatedworker", "sharedworker", "serviceworker"}},
|
||||
"jsshell": {"suffix": ".any.js"},
|
||||
} # type: Dict[Text, Dict[Text, Any]]
|
||||
|
||||
|
||||
def get_any_variants(item):
|
||||
# type: (bytes) -> Set[bytes]
|
||||
# type: (Text) -> Set[Text]
|
||||
"""
|
||||
Returns a set of variants (bytestrings) defined by the given keyword.
|
||||
Returns a set of variants (strings) defined by the given keyword.
|
||||
"""
|
||||
assert isinstance(item, binary_type), item
|
||||
assert isinstance(item, text_type), item
|
||||
|
||||
variant = _any_variants.get(item, None)
|
||||
if variant is None:
|
||||
|
@ -98,46 +98,46 @@ def get_any_variants(item):
|
|||
|
||||
|
||||
def get_default_any_variants():
|
||||
# type: () -> Set[bytes]
|
||||
# type: () -> Set[Text]
|
||||
"""
|
||||
Returns a set of variants (bytestrings) that will be used by default.
|
||||
Returns a set of variants (strings) that will be used by default.
|
||||
"""
|
||||
return set({b"window", b"dedicatedworker"})
|
||||
return set({"window", "dedicatedworker"})
|
||||
|
||||
|
||||
def parse_variants(value):
|
||||
# type: (bytes) -> Set[bytes]
|
||||
# type: (Text) -> Set[Text]
|
||||
"""
|
||||
Returns a set of variants (bytestrings) defined by a comma-separated value.
|
||||
Returns a set of variants (strings) defined by a comma-separated value.
|
||||
"""
|
||||
assert isinstance(value, binary_type), value
|
||||
assert isinstance(value, text_type), value
|
||||
|
||||
if value == b"":
|
||||
if value == "":
|
||||
return get_default_any_variants()
|
||||
|
||||
globals = set()
|
||||
for item in value.split(b","):
|
||||
for item in value.split(","):
|
||||
item = item.strip()
|
||||
globals |= get_any_variants(item)
|
||||
return globals
|
||||
|
||||
|
||||
def global_suffixes(value):
|
||||
# type: (bytes) -> Set[Tuple[bytes, bool]]
|
||||
# type: (Text) -> Set[Tuple[Text, bool]]
|
||||
"""
|
||||
Yields tuples of the relevant filename suffix (a string) and whether the
|
||||
variant is intended to run in a JS shell, for the variants defined by the
|
||||
given comma-separated value.
|
||||
"""
|
||||
assert isinstance(value, binary_type), value
|
||||
assert isinstance(value, text_type), value
|
||||
|
||||
rv = set()
|
||||
|
||||
global_types = parse_variants(value)
|
||||
for global_type in global_types:
|
||||
variant = _any_variants[global_type]
|
||||
suffix = variant.get("suffix", ".any.%s.html" % global_type.decode("utf-8"))
|
||||
rv.add((suffix, global_type == b"jsshell"))
|
||||
suffix = variant.get("suffix", ".any.%s.html" % global_type)
|
||||
rv.add((suffix, global_type == "jsshell"))
|
||||
|
||||
return rv
|
||||
|
||||
|
@ -462,7 +462,7 @@ class SourceFile(object):
|
|||
|
||||
@cached_property
|
||||
def script_metadata(self):
|
||||
# type: () -> Optional[List[Tuple[bytes, bytes]]]
|
||||
# type: () -> Optional[List[Tuple[Text, Text]]]
|
||||
if self.name_is_worker or self.name_is_multi_global or self.name_is_window:
|
||||
regexp = js_meta_re
|
||||
elif self.name_is_webdriver:
|
||||
|
@ -479,7 +479,7 @@ class SourceFile(object):
|
|||
"""The timeout of a test or reference file. "long" if the file has an extended timeout
|
||||
or None otherwise"""
|
||||
if self.script_metadata:
|
||||
if any(m == (b"timeout", b"long") for m in self.script_metadata):
|
||||
if any(m == ("timeout", "long") for m in self.script_metadata):
|
||||
return "long"
|
||||
|
||||
if self.root is None:
|
||||
|
@ -641,8 +641,8 @@ class SourceFile(object):
|
|||
script_metadata = self.script_metadata
|
||||
assert script_metadata is not None
|
||||
for (key, value) in script_metadata:
|
||||
if key == b"variant":
|
||||
rv.append(value.decode("utf-8"))
|
||||
if key == "variant":
|
||||
rv.append(value)
|
||||
else:
|
||||
for element in self.variant_nodes:
|
||||
if "content" in element.attrib:
|
||||
|
@ -691,7 +691,7 @@ class SourceFile(object):
|
|||
(`script_metadata()`).
|
||||
"""
|
||||
if self.script_metadata:
|
||||
if any(m == (b"quic", b"true") for m in self.script_metadata):
|
||||
if any(m == ("quic", "true") for m in self.script_metadata):
|
||||
return True
|
||||
|
||||
if self.root is None:
|
||||
|
@ -864,11 +864,11 @@ class SourceFile(object):
|
|||
)]
|
||||
|
||||
elif self.name_is_multi_global:
|
||||
globals = b""
|
||||
globals = u""
|
||||
script_metadata = self.script_metadata
|
||||
assert script_metadata is not None
|
||||
for (key, value) in script_metadata:
|
||||
if key == b"global":
|
||||
if key == "global":
|
||||
globals = value
|
||||
break
|
||||
|
||||
|
@ -992,9 +992,9 @@ class SourceFile(object):
|
|||
|
||||
if drop_cached and "__cached_properties__" in self.__dict__:
|
||||
cached_properties = self.__dict__["__cached_properties__"]
|
||||
for key in cached_properties:
|
||||
if key in self.__dict__:
|
||||
del self.__dict__[key]
|
||||
for prop in cached_properties:
|
||||
if prop in self.__dict__:
|
||||
del self.__dict__[prop]
|
||||
del self.__dict__["__cached_properties__"]
|
||||
|
||||
return rv
|
||||
|
|
|
@ -180,7 +180,7 @@ importScripts('/resources/testharness.js')
|
|||
test()"""
|
||||
|
||||
metadata = list(read_script_metadata(BytesIO(contents), js_meta_re))
|
||||
assert metadata == [(b"timeout", b"long")]
|
||||
assert metadata == [("timeout", "long")]
|
||||
|
||||
s = create("html/test.worker.js", contents=contents)
|
||||
assert s.name_is_worker
|
||||
|
@ -197,7 +197,7 @@ def test_window_long_timeout():
|
|||
test()"""
|
||||
|
||||
metadata = list(read_script_metadata(BytesIO(contents), js_meta_re))
|
||||
assert metadata == [(b"timeout", b"long")]
|
||||
assert metadata == [("timeout", "long")]
|
||||
|
||||
s = create("html/test.window.js", contents=contents)
|
||||
assert s.name_is_window
|
||||
|
@ -278,7 +278,7 @@ def test_python_long_timeout():
|
|||
|
||||
metadata = list(read_script_metadata(BytesIO(contents),
|
||||
python_meta_re))
|
||||
assert metadata == [(b"timeout", b"long")]
|
||||
assert metadata == [("timeout", "long")]
|
||||
|
||||
s = create("webdriver/test.py", contents=contents)
|
||||
assert s.name_is_webdriver
|
||||
|
@ -322,7 +322,7 @@ importScripts('/resources/testharness.js')
|
|||
test()"""
|
||||
|
||||
metadata = list(read_script_metadata(BytesIO(contents), js_meta_re))
|
||||
assert metadata == [(b"timeout", b"long")]
|
||||
assert metadata == [("timeout", "long")]
|
||||
|
||||
s = create("html/test.any.js", contents=contents)
|
||||
assert s.name_is_multi_global
|
||||
|
@ -447,14 +447,14 @@ test()"""
|
|||
|
||||
|
||||
@pytest.mark.parametrize("input,expected", [
|
||||
(b"""//META: foo=bar\n""", [(b"foo", b"bar")]),
|
||||
(b"""// META: foo=bar\n""", [(b"foo", b"bar")]),
|
||||
(b"""// META: foo=bar\n""", [(b"foo", b"bar")]),
|
||||
(b"""//META: foo=bar\n""", [("foo", "bar")]),
|
||||
(b"""// META: foo=bar\n""", [("foo", "bar")]),
|
||||
(b"""// META: foo=bar\n""", [("foo", "bar")]),
|
||||
(b"""\n// META: foo=bar\n""", []),
|
||||
(b""" // META: foo=bar\n""", []),
|
||||
(b"""// META: foo=bar\n// META: baz=quux\n""", [(b"foo", b"bar"), (b"baz", b"quux")]),
|
||||
(b"""// META: foo=bar\n\n// META: baz=quux\n""", [(b"foo", b"bar")]),
|
||||
(b"""// META: foo=bar\n// Start of the test\n// META: baz=quux\n""", [(b"foo", b"bar")]),
|
||||
(b"""// META: foo=bar\n// META: baz=quux\n""", [("foo", "bar"), ("baz", "quux")]),
|
||||
(b"""// META: foo=bar\n\n// META: baz=quux\n""", [("foo", "bar")]),
|
||||
(b"""// META: foo=bar\n// Start of the test\n// META: baz=quux\n""", [("foo", "bar")]),
|
||||
(b"""// META:\n""", []),
|
||||
(b"""// META: foobar\n""", []),
|
||||
])
|
||||
|
|
|
@ -178,9 +178,9 @@ class HtmlWrapperHandler(WrapperHandler):
|
|||
|
||||
def check_exposure(self, request):
|
||||
if self.global_type:
|
||||
globals = b""
|
||||
globals = u""
|
||||
for (key, value) in self._get_metadata(request):
|
||||
if key == b"global":
|
||||
if key == "global":
|
||||
globals = value
|
||||
break
|
||||
|
||||
|
@ -189,23 +189,23 @@ class HtmlWrapperHandler(WrapperHandler):
|
|||
self.global_type)
|
||||
|
||||
def _meta_replacement(self, key, value):
|
||||
if key == b"timeout":
|
||||
if value == b"long":
|
||||
if key == "timeout":
|
||||
if value == "long":
|
||||
return '<meta name="timeout" content="long">'
|
||||
if key == b"title":
|
||||
value = value.decode('utf-8').replace("&", "&").replace("<", "<")
|
||||
if key == "title":
|
||||
value = value.replace("&", "&").replace("<", "<")
|
||||
return '<title>%s</title>' % value
|
||||
return None
|
||||
|
||||
def _script_replacement(self, key, value):
|
||||
if key == b"script":
|
||||
attribute = value.decode('utf-8').replace("&", "&").replace('"', """)
|
||||
if key == "script":
|
||||
attribute = value.replace("&", "&").replace('"', """)
|
||||
return '<script src="%s"></script>' % attribute
|
||||
return None
|
||||
|
||||
|
||||
class WorkersHandler(HtmlWrapperHandler):
|
||||
global_type = b"dedicatedworker"
|
||||
global_type = "dedicatedworker"
|
||||
path_replace = [(".any.worker.html", ".any.js", ".any.worker.js"),
|
||||
(".worker.html", ".worker.js")]
|
||||
wrapper = """<!doctype html>
|
||||
|
@ -234,7 +234,7 @@ class WindowHandler(HtmlWrapperHandler):
|
|||
|
||||
|
||||
class AnyHtmlHandler(HtmlWrapperHandler):
|
||||
global_type = b"window"
|
||||
global_type = "window"
|
||||
path_replace = [(".any.html", ".any.js")]
|
||||
wrapper = """<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
|
@ -254,7 +254,7 @@ self.GLOBAL = {
|
|||
|
||||
|
||||
class SharedWorkersHandler(HtmlWrapperHandler):
|
||||
global_type = b"sharedworker"
|
||||
global_type = "sharedworker"
|
||||
path_replace = [(".any.sharedworker.html", ".any.js", ".any.worker.js")]
|
||||
wrapper = """<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
|
@ -269,7 +269,7 @@ fetch_tests_from_worker(new SharedWorker("%(path)s%(query)s"));
|
|||
|
||||
|
||||
class ServiceWorkersHandler(HtmlWrapperHandler):
|
||||
global_type = b"serviceworker"
|
||||
global_type = "serviceworker"
|
||||
path_replace = [(".any.serviceworker.html", ".any.js", ".any.worker.js")]
|
||||
wrapper = """<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
|
@ -307,11 +307,11 @@ done();
|
|||
return None
|
||||
|
||||
def _script_replacement(self, key, value):
|
||||
if key == b"script":
|
||||
attribute = value.decode('utf-8').replace("\\", "\\\\").replace('"', '\\"')
|
||||
if key == "script":
|
||||
attribute = value.replace("\\", "\\\\").replace('"', '\\"')
|
||||
return 'importScripts("%s")' % attribute
|
||||
if key == b"title":
|
||||
value = value.decode('utf-8').replace("\\", "\\\\").replace('"', '\\"')
|
||||
if key == "title":
|
||||
value = value.replace("\\", "\\\\").replace('"', '\\"')
|
||||
return 'self.META_TITLE = "%s";' % value
|
||||
return None
|
||||
|
||||
|
|
|
@ -411,7 +411,7 @@ class TestharnessTest(Test):
|
|||
quic = manifest_item.quic if hasattr(manifest_item, "quic") else False
|
||||
script_metadata = manifest_item.script_metadata or []
|
||||
scripts = [v for (k, v) in script_metadata
|
||||
if k in (b"script", "script")]
|
||||
if k == "script"]
|
||||
return cls(manifest_file.tests_root,
|
||||
manifest_item.url,
|
||||
inherit_metadata,
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>RTCPeerConnection BUNDLE</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="../RTCPeerConnection-helper.js"></script>
|
||||
<script src="/webrtc/third_party/sdp/sdp.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
promise_test(async t => {
|
||||
const caller = new RTCPeerConnection();
|
||||
t.add_cleanup(() => caller.close());
|
||||
const calleeAudio = new RTCPeerConnection();
|
||||
t.add_cleanup(() => calleeAudio.close());
|
||||
const calleeVideo = new RTCPeerConnection();
|
||||
t.add_cleanup(() => calleeVideo.close());
|
||||
|
||||
const stream = await getNoiseStream({audio: true, video: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
stream.getTracks().forEach(track => caller.addTrack(track, stream));
|
||||
|
||||
let metadataToBeLoaded;
|
||||
calleeVideo.ontrack = (e) => {
|
||||
const stream = e.streams[0];
|
||||
const v = document.createElement('video');
|
||||
v.autoplay = true;
|
||||
v.srcObject = stream;
|
||||
v.id = stream.id
|
||||
metadataToBeLoaded = new Promise((resolve) => {
|
||||
v.addEventListener('loadedmetadata', () => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
caller.addEventListener('icecandidate', (e) => {
|
||||
// route depending on sdpMlineIndex
|
||||
if (e.candidate) {
|
||||
const target = e.candidate.sdpMLineIndex === 0 ? calleeAudio : calleeVideo;
|
||||
target.addIceCandidate({sdpMid: e.candidate.sdpMid, candidate: e.candidate.candidate});
|
||||
}
|
||||
});
|
||||
calleeAudio.addEventListener('icecandidate', (e) => {
|
||||
if (e.candidate) {
|
||||
caller.addIceCandidate({sdpMid: e.candidate.sdpMid, candidate: e.candidate.candidate});
|
||||
}
|
||||
});
|
||||
calleeVideo.addEventListener('icecandidate', (e) => {
|
||||
if (e.candidate) {
|
||||
caller.addIceCandidate({sdpMid: e.candidate.sdpMid, candidate: e.candidate.candidate});
|
||||
}
|
||||
});
|
||||
|
||||
const offer = await caller.createOffer();
|
||||
const sections = SDPUtils.splitSections(offer.sdp);
|
||||
// remove the a=group:BUNDLE from the SDP when signaling.
|
||||
const bundle = SDPUtils.matchPrefix(sections[0], 'a=group:BUNDLE')[0];
|
||||
sections[0] = sections[0].replace(bundle + '\r\n', '');
|
||||
|
||||
const audioSdp = sections[0] + sections[1];
|
||||
const videoSdp = sections[0] + sections[2];
|
||||
|
||||
await calleeAudio.setRemoteDescription({type: 'offer', sdp: audioSdp});
|
||||
await calleeVideo.setRemoteDescription({type: 'offer', sdp: videoSdp});
|
||||
await caller.setLocalDescription(offer);
|
||||
|
||||
const answerAudio = await calleeAudio.createAnswer();
|
||||
const answerVideo = await calleeVideo.createAnswer();
|
||||
const audioSections = SDPUtils.splitSections(answerAudio.sdp);
|
||||
const videoSections = SDPUtils.splitSections(answerVideo.sdp);
|
||||
const sdp = audioSections[0] + audioSections[1] + videoSections[1];
|
||||
await caller.setRemoteDescription({type: 'answer', sdp});
|
||||
await calleeAudio.setLocalDescription(answerAudio);
|
||||
await calleeVideo.setLocalDescription(answerVideo);
|
||||
|
||||
await metadataToBeLoaded;
|
||||
assert_equals(calleeAudio.connectionState, 'connected');
|
||||
assert_equals(calleeVideo.connectionState, 'connected');
|
||||
}, 'Connect audio and video to two independent PeerConnections');
|
||||
</script>
|
|
@ -16,7 +16,7 @@ let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
|
|||
|
||||
let testFunction = function(session, fakeDeviceController, t) {
|
||||
let eventWatcher = new EventWatcher(
|
||||
t, session, ["visibilitychange", "visibilitychange", "framefired", "watcherdone"]);
|
||||
t, session, ["visibilitychange", "framefired", "watcherdone"]);
|
||||
let eventPromise = eventWatcher.wait_for(
|
||||
["visibilitychange", "visibilitychange", "framefired", "watcherdone"]);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue