mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
Auto merge of #27722 - servo-wpt-sync:wpt_update_27-10-2020, r=servo-wpt-sync
Sync WPT with upstream (27-10-2020) Automated downstream sync of changes from upstream as of 27-10-2020. [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
80570dafdd
71 changed files with 968 additions and 189 deletions
|
@ -4,7 +4,7 @@
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Opening a blob URL in a new window immediately before revoking it works.]
|
[Opening a blob URL in a new window immediately before revoking it works.]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Fetching a blob URL immediately before revoking it works in an iframe.]
|
[Fetching a blob URL immediately before revoking it works in an iframe.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-002.html]
|
||||||
|
[Hit test float]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-004.html]
|
|
||||||
[Miss float below something else]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-005.html]
|
|
||||||
[Miss clipped float]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[CaretPosition-001.html]
|
||||||
|
[Element at (400, 100)]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[scroll-overflow-clip-quirks-001.html]
|
||||||
|
[CSSOM scrollingElement reflects the propagated scroll to viewport correctly]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[scroll-overflow-clip-quirks-002.html]
|
||||||
|
[CSSOM scrollingElement reflects the propagated scroll to viewport correctly]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -315,24 +315,21 @@
|
||||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html */*]
|
|
||||||
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;charset=gbk text/plain text/html]
|
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/plain */*]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: */* text/html]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -56,3 +56,6 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[separate text/javascript ]
|
||||||
|
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!]
|
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_3.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[embedded-opener-remove-frame.html]
|
[embedded-opener-remove-frame.html]
|
||||||
expected: CRASH
|
|
||||||
[opener of discarded nested browsing context]
|
[opener of discarded nested browsing context]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
[supported-elements.html]
|
[supported-elements.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Contenteditable element should support autofocus]
|
[Contenteditable element should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||||
expected: FAIL
|
expected: NOTRUN
|
||||||
|
|
||||||
[Element with tabindex should support autofocus]
|
[Element with tabindex should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Area element should support autofocus]
|
[Area element should support autofocus]
|
||||||
expected: FAIL
|
expected: NOTRUN
|
||||||
|
|
||||||
[Host element with delegatesFocus should support autofocus]
|
[Host element with delegatesFocus should support autofocus]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[iframe_sandbox_popups_escaping-2.html]
|
[iframe_sandbox_popups_escaping-2.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_nonescaping-2.html]
|
[iframe_sandbox_popups_nonescaping-2.html]
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -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,6 +3,3 @@
|
||||||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[realtimeanalyser-fft-scaling.html]
|
[realtimeanalyser-fft-scaling.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -197,3 +197,9 @@
|
||||||
[X SNR (-529.35563055275 dB) is not greater than or equal to 65.737. Got -529.35563055275.]
|
[X SNR (-529.35563055275 dB) is not greater than or equal to 65.737. Got -529.35563055275.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X SNR (-481.3741499669012 dB) is not greater than or equal to 65.737. Got -481.3741499669012.]
|
||||||
|
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\]\t1.7394493830210567e+26\t9.3139332532882690e-1\t1.7394493830210567e+26\t1.8675776771397270e+26\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 1.7394493830210567e+26 at index of 28696.\n\tMax RelError of 1.8675776771397270e+26 at index of 28696.\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[018.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, javascript:]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[WorkerGlobalScope-close.html]
|
|
||||||
[Test sending a message after closing.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[Worker-constructor.html]
|
||||||
|
expected: ERROR
|
|
@ -7,7 +7,7 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Opening a blob URL in a new window immediately before revoking it works.]
|
[Opening a blob URL in a new window immediately before revoking it works.]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
|
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
|
@ -127979,6 +127979,19 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"out-of-flow-in-multicolumn-002.html": [
|
||||||
|
"bc91fe11c6975eb6ea9fbe274a0a93d596efff5f",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/css/reference/ref-filled-green-100px-square.xht",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"overflowed-block-with-no-room-after-000.html": [
|
"overflowed-block-with-no-room-after-000.html": [
|
||||||
"084e16fb38de072fb83f92ba01302a2e404cdd97",
|
"084e16fb38de072fb83f92ba01302a2e404cdd97",
|
||||||
[
|
[
|
||||||
|
@ -128070,6 +128083,19 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"relpos-inline.html": [
|
||||||
|
"a296f0ae7eb04e0b7fee52f9da9da84ff9ddd884",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/css/css-break/relpos-inline-ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"tall-break-inside-avoid-at-start.html": [
|
"tall-break-inside-avoid-at-start.html": [
|
||||||
"6e9ab8bd9f56502247a6d8c2c2045b8f3af3605d",
|
"6e9ab8bd9f56502247a6d8c2c2045b8f3af3605d",
|
||||||
[
|
[
|
||||||
|
@ -250040,7 +250066,7 @@
|
||||||
],
|
],
|
||||||
"reftests": {
|
"reftests": {
|
||||||
"display-none-mask.html": [
|
"display-none-mask.html": [
|
||||||
"5a746c9fdaec71c5c530e393aaa1f641f55c89b8",
|
"a6aa6007574ff6c3b2930fd15b6e51d65a633c7e",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
[
|
[
|
||||||
|
@ -299958,7 +299984,11 @@
|
||||||
"06108ac800c19c68841f2a0e8867fb05e868c1ab",
|
"06108ac800c19c68841f2a0e8867fb05e868c1ab",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"relpos-inline-ref.html": [
|
||||||
|
"8c19f1cf4c6c0173b45face28d624368d365ec70",
|
||||||
|
[]
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"css-cascade": {
|
"css-cascade": {
|
||||||
"META.yml": [
|
"META.yml": [
|
||||||
|
@ -345015,6 +345045,10 @@
|
||||||
"62c141d960d27dc59666538b2ec0f185f59c9468",
|
"62c141d960d27dc59666538b2ec0f185f59c9468",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"input-types.js": [
|
||||||
|
"44567510523622ff06f3ffccdd26cd44f864f372",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"multiline-placeholder-ref.html": [
|
"multiline-placeholder-ref.html": [
|
||||||
"2812f86e1e6c8e240f60ff313e856b6733e54b5e",
|
"2812f86e1e6c8e240f60ff313e856b6733e54b5e",
|
||||||
[]
|
[]
|
||||||
|
@ -358879,7 +358913,7 @@
|
||||||
],
|
],
|
||||||
"reftests": {
|
"reftests": {
|
||||||
"display-none-mask-ref.html": [
|
"display-none-mask-ref.html": [
|
||||||
"7835597d961a9c9feb0fff92b0f651e164456c12",
|
"3739265b23d22e39f2e2acdc90d94c583b36f4f9",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"marker-path-001-ref.svg": [
|
"marker-path-001-ref.svg": [
|
||||||
|
@ -366154,7 +366188,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"requirements.txt": [
|
"requirements.txt": [
|
||||||
"1eba114a31c21f3e48aafae5e9466cefbe741288",
|
"7567e81ada590486bda300e484564700c373d11a",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"requirements_android_webview.txt": [
|
"requirements_android_webview.txt": [
|
||||||
|
@ -368773,7 +368807,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"helpers.js": [
|
"helpers.js": [
|
||||||
"c355d0586257b802c3f4a401c7ddedad16c860f9",
|
"620feebd2999ac71fe06d73e7b0cda4ec5d855fe",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"resources": {
|
"resources": {
|
||||||
|
@ -400381,6 +400415,13 @@
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"relpos-inline-hit-testing.html": [
|
||||||
|
"ca0c961ca22b3ac7fac7f25f21085ceb220dfddc",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"remove-inline-child.html": [
|
"remove-inline-child.html": [
|
||||||
"64f4d0b1ac224b3386e915f31bedd70d718a5528",
|
"64f4d0b1ac224b3386e915f31bedd70d718a5528",
|
||||||
[
|
[
|
||||||
|
@ -422095,6 +422136,20 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"scroll-overflow-clip-quirks-001.html": [
|
||||||
|
"ae70083ac32af4e89dc15d6dca9192c827f36ac3",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"scroll-overflow-clip-quirks-002.html": [
|
||||||
|
"8909125649a0f8731898d203593d591f8b2da41b",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"scrollIntoView-horizontal-partially-visible.html": [
|
"scrollIntoView-horizontal-partially-visible.html": [
|
||||||
"1e8bc50071f080a89b9e19bbad9f6c4fbda1cc29",
|
"1e8bc50071f080a89b9e19bbad9f6c4fbda1cc29",
|
||||||
[
|
[
|
||||||
|
@ -422243,7 +422298,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"scrollingElement.html": [
|
"scrollingElement.html": [
|
||||||
"84d313741ce88f5e3ae77e5c85f79a88348caddc",
|
"408fa47be9a3330aff88ef01e9b8be90fd4008ce",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -470864,6 +470919,13 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fieldset-content-percentage-size.html": [
|
||||||
|
"6195d8bb0527b5d3e72e57c41da32bfe2aa4bb50",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"fieldset-default-style.html": [
|
"fieldset-default-style.html": [
|
||||||
"f07c84f406cefc7054e8a13c2796d3d82673bdf7",
|
"f07c84f406cefc7054e8a13c2796d3d82673bdf7",
|
||||||
[
|
[
|
||||||
|
@ -477481,6 +477543,15 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"selection-pointer.html": [
|
||||||
|
"8ad1f578215773a072304108e528c96afafd2797",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"testdriver": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"selection.html": [
|
"selection.html": [
|
||||||
"42c40108d92716ca263323389d05c5480703b393",
|
"42c40108d92716ca263323389d05c5480703b393",
|
||||||
[
|
[
|
||||||
|
@ -489560,7 +489631,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"attribute-mapping-002.html": [
|
"attribute-mapping-002.html": [
|
||||||
"e4532321e4a5b20944ff4181b2ad9b967ee31213",
|
"1fe9b34f98189c12683e13df931f63c572e00fdf",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -518868,7 +518939,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"general.any.js": [
|
"general.any.js": [
|
||||||
"bd18973b41315d1bdbf3f242d6c09f821c867f3f",
|
"2e02dfad78a0fa0f74d916075a2d87bf8430e2f5",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
|
@ -536313,7 +536384,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"createcredential-extensions.https.html": [
|
"createcredential-extensions.https.html": [
|
||||||
"46cab3051b4924a2cb9cf1d7a2df46046b7b2f23",
|
"64690e7c506bb77ad260fe8606d499e2e1fb9b23",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
|
@ -536332,6 +536403,26 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"createcredential-large-blob-not-supported.https.html": [
|
||||||
|
"1a320d54d156baf0cd55f32c3154331f6ce958e3",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"testdriver": true,
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"createcredential-large-blob-supported.https.html": [
|
||||||
|
"46623de77476141fb4adf72e3b63ddc62d34489b",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"testdriver": true,
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"createcredential-passing.https.html": [
|
"createcredential-passing.https.html": [
|
||||||
"30fef13bbdc9efb5659460652054d119399ce819",
|
"30fef13bbdc9efb5659460652054d119399ce819",
|
||||||
[
|
[
|
||||||
|
@ -536392,6 +536483,26 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"getcredential-large-blob-not-supported.https.html": [
|
||||||
|
"26e91d8f4f632fe9f396e9758421f3131b4e8633",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"testdriver": true,
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"getcredential-large-blob-supported.https.html": [
|
||||||
|
"02aea568173a317e76ce0516f06d2a5d675a7252",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"testdriver": true,
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"getcredential-passing.https.html": [
|
"getcredential-passing.https.html": [
|
||||||
"1af35aa9cb14327d3d1d4ea660b7380d6b0f65bd",
|
"1af35aa9cb14327d3d1d4ea660b7380d6b0f65bd",
|
||||||
[
|
[
|
||||||
|
@ -536482,7 +536593,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"video-decoder.html": [
|
"video-decoder.html": [
|
||||||
"33c478d0090775bee319c6f30710bfdedad7bc86",
|
"f653ba03b09a51b9e25b90173b4d7002242e05e7",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -538724,7 +538835,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCPeerConnection-insertable-streams-audio.https.html": [
|
"RTCPeerConnection-insertable-streams-audio.https.html": [
|
||||||
"3d419b2b9a792fe7e732309f81e64716146cd683",
|
"04282d0942cc1f8b733d9a48cab3a77a264b7f34",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -538766,7 +538877,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCPeerConnection-insertable-streams-worker.https.html": [
|
"RTCPeerConnection-insertable-streams-worker.https.html": [
|
||||||
"a21a0d90e55cbcc1ca912b88cfa61d038688e1fc",
|
"04c9c106b873058176298d8deca1cad06ffc8049",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-002.html]
|
||||||
|
[Hit test float]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-004.html]
|
|
||||||
[Miss float below something else]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-005.html]
|
|
||||||
[Miss clipped float]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[CaretPosition-001.html]
|
||||||
|
[Element at (400, 100)]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[scroll-overflow-clip-quirks-001.html]
|
||||||
|
[CSSOM scrollingElement reflects the propagated scroll to viewport correctly]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[scroll-overflow-clip-quirks-002.html]
|
||||||
|
[CSSOM scrollingElement reflects the propagated scroll to viewport correctly]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -315,24 +315,21 @@
|
||||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html */*]
|
|
||||||
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;charset=gbk text/plain text/html]
|
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/plain */*]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: */* text/html]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -56,3 +56,6 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[separate text/javascript ]
|
||||||
|
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!]
|
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_3.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[embedded-opener-remove-frame.html]
|
[embedded-opener-remove-frame.html]
|
||||||
expected: CRASH
|
|
||||||
[opener and "removed" embedded documents]
|
[opener and "removed" embedded documents]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[supported-elements.html]
|
[supported-elements.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Contenteditable element should support autofocus]
|
[Contenteditable element should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -6,11 +7,11 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||||
expected: FAIL
|
expected: NOTRUN
|
||||||
|
|
||||||
[Area element should support autofocus]
|
[Area element should support autofocus]
|
||||||
expected: FAIL
|
expected: NOTRUN
|
||||||
|
|
||||||
[Host element with delegatesFocus should support autofocus]
|
[Host element with delegatesFocus should support autofocus]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[iframe_sandbox_popups_escaping-2.html]
|
[iframe_sandbox_popups_escaping-2.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iframe_sandbox_popups_nonescaping-2.html]
|
[iframe_sandbox_popups_nonescaping-2.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -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,6 +4,3 @@
|
||||||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[realtimeanalyser-fft-scaling.html]
|
[realtimeanalyser-fft-scaling.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -425,3 +425,9 @@
|
||||||
[X SNR (-529.35563055275 dB) is not greater than or equal to 65.737. Got -529.35563055275.]
|
[X SNR (-529.35563055275 dB) is not greater than or equal to 65.737. Got -529.35563055275.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X SNR (-481.3741499669012 dB) is not greater than or equal to 65.737. Got -481.3741499669012.]
|
||||||
|
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\]\t1.7394493830210567e+26\t9.3139332532882690e-1\t1.7394493830210567e+26\t1.8675776771397270e+26\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 1.7394493830210567e+26 at index of 28696.\n\tMax RelError of 1.8675776771397270e+26 at index of 28696.\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
5
tests/wpt/metadata/webmessaging/with-ports/018.html.ini
Normal file
5
tests/wpt/metadata/webmessaging/with-ports/018.html.ini
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[018.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, javascript:]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[WorkerGlobalScope-close.html]
|
|
||||||
[Test sending a message after closing.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[Worker-constructor.html]
|
||||||
|
expected: ERROR
|
|
@ -0,0 +1,33 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="help" href="href=https://www.w3.org/TR/css-break-3/#break-decoration">
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||||
|
<!-- Tests fragmentation when a positioned node's child overflows. -->
|
||||||
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
|
<style>
|
||||||
|
#multicol {
|
||||||
|
column-count: 2;
|
||||||
|
column-fill: auto;
|
||||||
|
column-gap: 0px;
|
||||||
|
height: 100px;
|
||||||
|
width: 50px;
|
||||||
|
}
|
||||||
|
.rel {
|
||||||
|
position: relative;
|
||||||
|
width: 30px;
|
||||||
|
}
|
||||||
|
.abs {
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 5px;
|
||||||
|
height: 10px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="multicol">
|
||||||
|
<div class="rel">
|
||||||
|
<div class="abs">
|
||||||
|
<div style="background: green; width: 25px; height: 400px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="background-color: red; width: 20px; height: 140px;"></div>
|
||||||
|
</div>
|
|
@ -0,0 +1,38 @@
|
||||||
|
<!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/#transforms">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#relative-positioning">
|
||||||
|
<link rel="match" href="relpos-inline-ref.html">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 8px;
|
||||||
|
}
|
||||||
|
#target {
|
||||||
|
position: relative;
|
||||||
|
left: -100px;
|
||||||
|
top: 100px;
|
||||||
|
border: 1px solid;
|
||||||
|
background: hotpink;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div style="columns:4; column-gap:0; column-fill:auto; line-height:30px; width:600px; height:60px; orphans:1; widows:1;">
|
||||||
|
<br><br><br>
|
||||||
|
<span id="target">
|
||||||
|
line1<br>
|
||||||
|
line2<br>
|
||||||
|
line3<br>
|
||||||
|
line4<br>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="log" style="margin-top:100px;"></div>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(()=> { assert_equals(document.elementFromPoint(58, 153), target); }, "line1");
|
||||||
|
test(()=> { assert_equals(document.elementFromPoint(208, 123), target); }, "line2");
|
||||||
|
test(()=> { assert_equals(document.elementFromPoint(208, 153), target); }, "line3");
|
||||||
|
test(()=> { assert_equals(document.elementFromPoint(358, 123), target); }, "line4");
|
||||||
|
test(()=> { assert_not_equals(document.elementFromPoint(58, 123), target); }, "Above line1");
|
||||||
|
test(()=> { assert_not_equals(document.elementFromPoint(358, 153), target); }, "Below line4");
|
||||||
|
test(()=> { assert_not_equals(document.elementFromPoint(158, 48), target); }, "line1 before offsetting");
|
||||||
|
</script>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||||
|
<style>
|
||||||
|
span {
|
||||||
|
position: relative;
|
||||||
|
left: -100px;
|
||||||
|
top: 100px;
|
||||||
|
border: 1px solid;
|
||||||
|
background:hotpink;
|
||||||
|
}
|
||||||
|
.fakecol {
|
||||||
|
float: left;
|
||||||
|
width: 150px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div style="line-height:30px; height:60px;">
|
||||||
|
<div class="fakecol"></div>
|
||||||
|
<div class="fakecol">
|
||||||
|
<br>
|
||||||
|
<span style="border-right:none;">
|
||||||
|
line1<br>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="fakecol">
|
||||||
|
<span style="border-left:none; border-right:none;">
|
||||||
|
line2<br>
|
||||||
|
line3<br>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="fakecol">
|
||||||
|
<span style="border-left:none;">
|
||||||
|
line4<br>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<!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/#transforms">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#relative-positioning">
|
||||||
|
<link rel="match" href="relpos-inline-ref.html">
|
||||||
|
<div style="columns:4; column-gap:0; column-fill:auto; line-height:30px; width:600px; height:60px; orphans:1; widows:1;">
|
||||||
|
<br><br><br>
|
||||||
|
<span style="position:relative; left:-100px; top:100px; border:1px solid; background:hotpink;">
|
||||||
|
line1<br>
|
||||||
|
line2<br>
|
||||||
|
line3<br>
|
||||||
|
line4<br>
|
||||||
|
</span>
|
||||||
|
</div>
|
|
@ -0,0 +1,23 @@
|
||||||
|
<!-- quirks -->
|
||||||
|
<title>CSSOM scrollingElement reflects the propagated scroll to viewport correctly</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||||
|
<link rel="author" title="Mozilla" href="https://mozilla.org">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-overflow/#overflow-propagation">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement">
|
||||||
|
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5601">
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
overflow: clip;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
overflow: scroll;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
test(function() {
|
||||||
|
assert_equals(document.scrollingElement, null);
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!-- quirks -->
|
||||||
|
<title>CSSOM scrollingElement reflects the propagated scroll to viewport correctly</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||||
|
<link rel="author" title="Mozilla" href="https://mozilla.org">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-overflow/#overflow-propagation">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement">
|
||||||
|
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5601">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
overflow: clip;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
test(function() {
|
||||||
|
assert_equals(document.scrollingElement, document.body);
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -93,12 +93,16 @@ function nonQuirksTest(rootDisplay, bodyDisplay) {
|
||||||
nonQuirksDoc.documentElement.style.display = rootDisplay;
|
nonQuirksDoc.documentElement.style.display = rootDisplay;
|
||||||
nonQuirksDoc.body.style.display = bodyDisplay;
|
nonQuirksDoc.body.style.display = bodyDisplay;
|
||||||
|
|
||||||
// Tests for non-quirks mode document.
|
|
||||||
assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement,
|
assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement,
|
||||||
"scrollingElement in standards mode should be the document element.");
|
"scrollingElement in standards mode should be the document element.");
|
||||||
nonQuirksDoc.documentElement.style.overflow = "scroll";
|
|
||||||
nonQuirksDoc.body.style.overflow = "scroll";
|
for (let rootOverflow of ["", "clip", "scroll", "hidden", "visible"]) {
|
||||||
assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement);
|
for (let bodyOverflow of ["", "clip", "scroll", "hidden", "visible"]) {
|
||||||
|
nonQuirksDoc.documentElement.style.overflow = rootOverflow;
|
||||||
|
nonQuirksDoc.body.style.overflow = bodyOverflow;
|
||||||
|
assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nonQuirksDoc.removeChild(nonQuirksDoc.documentElement);
|
nonQuirksDoc.removeChild(nonQuirksDoc.documentElement);
|
||||||
assert_equals(nonQuirksDoc.scrollingElement, null);
|
assert_equals(nonQuirksDoc.scrollingElement, null);
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="help" href="https://crbug.com/1140595">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<div style="height:100px;">
|
||||||
|
<fieldset style="margin:0; padding:0; border:none;">
|
||||||
|
<div id="inner" style="height:59%;"></div>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
let innerDiv = document.querySelector('#inner');
|
||||||
|
assert_equals(innerDiv.clientHeight, 0);
|
||||||
|
}, 'A percentage height for an element in an auto-height fieldset should be ignored');
|
||||||
|
</script>
|
|
@ -0,0 +1,24 @@
|
||||||
|
export default [
|
||||||
|
"button",
|
||||||
|
"checkbox",
|
||||||
|
"color",
|
||||||
|
"date",
|
||||||
|
"datetime-local",
|
||||||
|
"email",
|
||||||
|
"file",
|
||||||
|
"hidden",
|
||||||
|
"image",
|
||||||
|
"month",
|
||||||
|
"number",
|
||||||
|
"password",
|
||||||
|
"radio",
|
||||||
|
"range",
|
||||||
|
"reset",
|
||||||
|
"search",
|
||||||
|
"submit",
|
||||||
|
"tel",
|
||||||
|
"text",
|
||||||
|
"time",
|
||||||
|
"url",
|
||||||
|
"week",
|
||||||
|
];
|
|
@ -0,0 +1,42 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Selecting texts across input element</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/resources/testdriver.js"></script>
|
||||||
|
<script src="/resources/testdriver-actions.js"></script>
|
||||||
|
<script src="/resources/testdriver-vendor.js"></script>
|
||||||
|
<link rel="stylesheet" href="/fonts/ahem.css" />
|
||||||
|
<style>
|
||||||
|
.test {
|
||||||
|
font: 16px/1 Ahem;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="test">
|
||||||
|
<span id="foo">foo</span><br>
|
||||||
|
<input id="input"><br>
|
||||||
|
<span id="bar">bar</span>
|
||||||
|
</div>
|
||||||
|
<script type="module">
|
||||||
|
import inputTypes from "./input-types.js";
|
||||||
|
|
||||||
|
const selection = getSelection();
|
||||||
|
const inputVisibleTypes = inputTypes.filter(t => t !== "hidden");
|
||||||
|
|
||||||
|
for (const inputType of inputVisibleTypes) {
|
||||||
|
promise_test(async () => {
|
||||||
|
input.type = inputType;
|
||||||
|
selection.collapse(foo);
|
||||||
|
await new test_driver.Actions()
|
||||||
|
.pointerMove(0, 0, {origin: foo})
|
||||||
|
.pointerDown()
|
||||||
|
.pointerMove(0, 0, {origin: input})
|
||||||
|
.pointerMove(0, 0, {origin: bar})
|
||||||
|
.pointerUp()
|
||||||
|
.send();
|
||||||
|
assert_equals(selection.anchorNode, foo.childNodes[0], "anchorNode");
|
||||||
|
assert_equals(selection.focusNode, bar.childNodes[0], "focusNode");
|
||||||
|
}, `Selecting texts across <input type=${inputType}> should not cancel selection`);
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -44,26 +44,52 @@
|
||||||
|
|
||||||
test(function() {
|
test(function() {
|
||||||
// none and mprescripts appear as scripts
|
// none and mprescripts appear as scripts
|
||||||
assert_equals(style.getPropertyValue("math-depth"), tag === "none" || tag === "mprescripts" ? 1 : 0, "no attribute");
|
assert_equals(style.getPropertyValue("math-depth"), tag === "none" || tag === "mprescripts" ? "1" : "0", "no attribute");
|
||||||
|
|
||||||
var absoluteScriptlevel = 2;
|
var absoluteScriptlevel = 2;
|
||||||
element.setAttribute("scriptlevel", absoluteScriptlevel);
|
element.setAttribute("scriptlevel", absoluteScriptlevel);
|
||||||
assert_equals(style.getPropertyValue("math-depth"), absoluteScriptlevel, "attribute specified (<U>)");
|
assert_equals(style.getPropertyValue("math-depth"), "" + absoluteScriptlevel, "attribute specified <U>");
|
||||||
|
|
||||||
var positiveScriptlevelDelta = 1;
|
var positiveScriptlevelDelta = 1;
|
||||||
element.setAttribute("scriptlevel", `+${positiveScriptlevelDelta}`);
|
element.setAttribute("scriptlevel", `+${positiveScriptlevelDelta}`);
|
||||||
assert_equals(style.getPropertyValue("math-depth"), positiveScriptlevelDelta, epsilon, "attribute specified (+<U>)");
|
assert_equals(style.getPropertyValue("math-depth"), "" + positiveScriptlevelDelta, "attribute specified +<U>");
|
||||||
|
|
||||||
var negativeScriptlevelDelta = -3;
|
var negativeScriptlevelDelta = -3;
|
||||||
element.setAttribute("scriptlevel", negativeScriptlevelDelta);
|
element.setAttribute("scriptlevel", `${negativeScriptlevelDelta}`);
|
||||||
assert_approx_equals(style.getPropertyValue("math-depth"), negativeScriptlevelDelta, "attribute specified (-<U>)");
|
assert_equals(style.getPropertyValue("math-depth"), "" + negativeScriptlevelDelta, "attribute specified -<U>");
|
||||||
|
|
||||||
element.setAttribute("scriptlevel", absoluteScriptlevel);
|
element.setAttribute("scriptlevel", absoluteScriptlevel);
|
||||||
element.setAttribute("mathsize", "42px");
|
element.setAttribute("mathsize", "42px");
|
||||||
assert_approx_equals(fontSize(style), 42, epsilon, "mathsize wins over scriptlevel");
|
assert_approx_equals(fontSize(style), 42, 1, "mathsize wins over scriptlevel");
|
||||||
|
|
||||||
}, `scriptlevel on the ${tag} element is mapped to math-depth(...)`);
|
}, `scriptlevel on the ${tag} element is mapped to math-depth(...)`);
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
// none and mprescripts appear as scripts
|
||||||
|
let expected = 0;
|
||||||
|
element.setAttribute("scriptlevel", "" + expected);
|
||||||
|
assert_equals(style.getPropertyValue("math-depth"), "" + expected, "no attribute");
|
||||||
|
|
||||||
|
element.setAttribute("scriptlevel", " +1");
|
||||||
|
assert_equals(style.getPropertyValue("math-depth"), "" + expected, "invalid scriptlevel value");
|
||||||
|
|
||||||
|
element.setAttribute("scriptlevel", " + 1");
|
||||||
|
assert_equals(style.getPropertyValue("math-depth"), "" + expected, "invalid scriptlevel value");
|
||||||
|
|
||||||
|
element.setAttribute("scriptlevel", "2.0");
|
||||||
|
assert_equals(style.getPropertyValue("math-depth"), "" + expected, "invalid scriptlevel value");
|
||||||
|
|
||||||
|
element.setAttribute("scriptlevel", "-3\"");
|
||||||
|
assert_equals(style.getPropertyValue("math-depth"), "" + expected, "invalid scriptlevel value");
|
||||||
|
|
||||||
|
element.setAttribute("scriptlevel", "200px");
|
||||||
|
assert_equals(style.getPropertyValue("math-depth"), "" + expected, "invalid scriptlevel value");
|
||||||
|
|
||||||
|
element.setAttribute("scriptlevel", "add(2)");
|
||||||
|
assert_equals(style.getPropertyValue("math-depth"), "" + expected, "invalid scriptlevel value");
|
||||||
|
|
||||||
|
}, `invalid scriptlevel values on the ${tag} element are not mapped to math-depth(...)`);
|
||||||
|
|
||||||
test(function() {
|
test(function() {
|
||||||
assert_equals(style.getPropertyValue("math-style"), "compact", "no attribute");
|
assert_equals(style.getPropertyValue("math-style"), "compact", "no attribute");
|
||||||
element.setAttribute("displaystyle", "true");
|
element.setAttribute("displaystyle", "true");
|
||||||
|
|
|
@ -198,3 +198,14 @@ promise_test(t => {
|
||||||
}
|
}
|
||||||
}), 'pipeTo should reject');
|
}), 'pipeTo should reject');
|
||||||
}, 'pipeTo() should reject if an option getter grabs a writer');
|
}, 'pipeTo() should reject if an option getter grabs a writer');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
start(controller) {
|
||||||
|
controller.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const ws = new WritableStream();
|
||||||
|
|
||||||
|
return rs.pipeTo(ws, null);
|
||||||
|
}, 'pipeTo() promise should resolve if null is passed');
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
<body>
|
<body>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<foreignObject x="0" y="0" width="200" height="200">
|
<foreignObject x="0" y="0" width="200" height="200">
|
||||||
<div style="width: 200px; height: 200px; background: red"></div>
|
<div style="width: 200px; height: 200px;"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<foreignObject x="0" y="0" width="200" height="200">
|
<foreignObject x="0" y="0" width="200" height="200">
|
||||||
<div style="width: 200px; height: 200px; background: red"></div>
|
<div style="width: 200px; height: 200px; background: green"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
|
@ -23,28 +23,28 @@
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<foreignObject x="0" y="0" width="200" height="200">
|
<foreignObject x="0" y="0" width="200" height="200">
|
||||||
<div style="width: 200px; height: 200px;"></div>
|
<div style="width: 200px; height: 200px; background: green"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
<!-- make sure masking actually works -->
|
<!-- make sure masking actually works -->
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<rect x="0" y="0" width="100" height="50" fill="red"></rect>
|
<rect x="0" y="0" width="100" height="50" fill="green"></rect>
|
||||||
<rect x="0" y="100" width="100" height="50" fill="red"></rect>
|
<rect x="0" y="100" width="100" height="50" fill="green"></rect>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<rect x="0" y="0" width="100" height="50" fill="red"></rect>
|
<rect x="0" y="0" width="100" height="50" fill="green"></rect>
|
||||||
<rect x="0" y="100" width="100" height="50" fill="red"></rect>
|
<rect x="0" y="100" width="100" height="50" fill="green"></rect>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
<!-- make sure masking works on active content -->
|
<!-- make sure masking works on active content -->
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<rect x="0" y="0" width="100" height="50" fill="red"></rect>
|
<rect x="0" y="0" width="100" height="50" fill="green"></rect>
|
||||||
<rect x="0" y="100" width="100" height="50" fill="red"></rect>
|
<rect x="0" y="100" width="100" height="50" fill="green"></rect>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<rect x="0" y="0" width="100" height="50" fill="red"></rect>
|
<rect x="0" y="0" width="100" height="50" fill="green"></rect>
|
||||||
<rect x="0" y="100" width="100" height="50" fill="red"></rect>
|
<rect x="0" y="100" width="100" height="50" fill="green"></rect>
|
||||||
</svg>
|
</svg>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -3,28 +3,39 @@
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<link rel="match" href="display-none-mask-ref.html" />
|
<title>Mask behaviour when mask image is missing or display:none</title>
|
||||||
|
<link rel="match" href="display-none-mask-ref.html">
|
||||||
|
<link name="author" title="Timothy Nikkel" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1624532">
|
||||||
|
<link name="author" title="Mike Bremford" href="http://bfo.com"> <!-- edited 202010 -->
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-mask-image">
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#MaskElement">
|
||||||
|
<link rel="help" href="https://github.com/w3c/fxtf-drafts/issues/245">
|
||||||
|
<meta name="assert" content="A missing or invalid mask image is equivalent to transparent black (i.e. nothing is displayed). A mask with display:none is disabled (which is a change to the specified behaviour as of issue 245)">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
|
<!-- missing/invalid mask is equivalent to transparent black - nothing displayed -->
|
||||||
<foreignObject x="0" y="0" width="200" height="200" style="mask: url('#notfound');">
|
<foreignObject x="0" y="0" width="200" height="200" style="mask: url('#notfound');">
|
||||||
<div style="width: 200px; height: 200px; background: red"></div>
|
<div style="width: 200px; height: 200px; background: red"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
|
<!-- display:none on mask means mask is not applied (new in https://github.com/w3c/fxtf-drafts/issues/245) -->
|
||||||
<foreignObject x="0" y="0" width="200" height="200" style="mask: url('#noneMask');">
|
<foreignObject x="0" y="0" width="200" height="200" style="mask: url('#noneMask');">
|
||||||
<div style="width: 200px; height: 200px; background: red"></div>
|
<div style="width: 200px; height: 200px; background: green"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<foreignObject x="0" y="0" width="200" height="200">
|
<foreignObject x="0" y="0" width="200" height="200">
|
||||||
|
<!-- missing/invalid mask is equivalent to transparent black - nothing displayed -->
|
||||||
<div style="width: 200px; height: 200px; background: red; mask: url('#notfound');"></div>
|
<div style="width: 200px; height: 200px; background: red; mask: url('#notfound');"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<foreignObject x="0" y="0" width="200" height="200">
|
<foreignObject x="0" y="0" width="200" height="200">
|
||||||
<div style="width: 200px; height: 200px; background: red; mask: url('#noneMask');"></div>
|
<!-- display:none on mask means mask is not applied (new in https://github.com/w3c/fxtf-drafts/issues/245) -->
|
||||||
|
<div style="width: 200px; height: 200px; background: green; mask: url('#noneMask');"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
@ -45,24 +56,24 @@
|
||||||
</mask>
|
</mask>
|
||||||
</defs>
|
</defs>
|
||||||
<foreignObject x="0" y="0" width="200" height="200" style="mask: url('#aMask');">
|
<foreignObject x="0" y="0" width="200" height="200" style="mask: url('#aMask');">
|
||||||
<div style="width: 200px; height: 200px; background: red;"></div>
|
<div style="width: 200px; height: 200px; background: green;"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<foreignObject x="0" y="0" width="200" height="200">
|
<foreignObject x="0" y="0" width="200" height="200">
|
||||||
<div style="width: 200px; height: 200px; background: red; mask: url('#aMask');"></div>
|
<div style="width: 200px; height: 200px; background: green; mask: url('#aMask');"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
<!-- make sure masking works on active content -->
|
<!-- make sure masking works on active content -->
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<foreignObject x="0" y="0" width="200" height="200" style="mask: url('#aMask');">
|
<foreignObject x="0" y="0" width="200" height="200" style="mask: url('#aMask');">
|
||||||
<div style="width: 200px; height: 200px; background: red; will-change: transform"></div>
|
<div style="width: 200px; height: 200px; background: green; will-change: transform"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
<svg width="200" height="200">
|
<svg width="200" height="200">
|
||||||
<foreignObject x="0" y="0" width="200" height="200">
|
<foreignObject x="0" y="0" width="200" height="200">
|
||||||
<div style="width: 200px; height: 200px; background: red; will-change: transform; mask: url('#aMask');"></div>
|
<div style="width: 200px; height: 200px; background: green; will-change: transform; mask: url('#aMask');"></div>
|
||||||
</foreignObject>
|
</foreignObject>
|
||||||
</svg>
|
</svg>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -3,7 +3,8 @@ mozinfo==1.2.1 # https://bugzilla.mozilla.org/show_bug.cgi?id=1621226
|
||||||
mozlog==6.1
|
mozlog==6.1
|
||||||
mozdebug==0.2
|
mozdebug==0.2
|
||||||
# Pillow 7 requires Python 3
|
# Pillow 7 requires Python 3
|
||||||
pillow==6.2.2 # pyup: <7.0
|
pillow==6.2.2; python_version <= '2.7' # pyup: <7.0
|
||||||
|
pillow==8.0.1; python_version >= '3.0'
|
||||||
urllib3[secure]==1.25.10
|
urllib3[secure]==1.25.10
|
||||||
requests==2.24.0
|
requests==2.24.0
|
||||||
six==1.15.0
|
six==1.15.0
|
||||||
|
|
|
@ -23,28 +23,14 @@ standardSetup(function() {
|
||||||
new CreateCredentialsTest("options.publicKey.extensions", "hi mom").runTest("Bad extensions: extensions is string", TypeError);
|
new CreateCredentialsTest("options.publicKey.extensions", "hi mom").runTest("Bad extensions: extensions is string", TypeError);
|
||||||
|
|
||||||
// phony extensions
|
// phony extensions
|
||||||
// TODO: not sure if this should pass or fail
|
|
||||||
// should be clarified as part of https://github.com/w3c/webauthn/pull/765
|
|
||||||
var randomExtId = {};
|
var randomExtId = {};
|
||||||
randomExtId[createRandomString(64)] = dummyExtension;
|
randomExtId[createRandomString(64)] = dummyExtension;
|
||||||
new CreateCredentialsTest("options.publicKey.extensions", {foo: JSON.stringify(randomExtId)}).runTest("extensions is a nonsensical JSON string");
|
new CreateCredentialsTest("options.publicKey.extensions", {foo: JSON.stringify(randomExtId)}).runTest("extensions is a nonsensical JSON string");
|
||||||
|
|
||||||
// Defined extensions.
|
|
||||||
|
|
||||||
// appid
|
// appid
|
||||||
new CreateCredentialsTest("options.publicKey.extensions", {appid: ""}).runTest("empty appid in create request", "NotSupportedError");
|
new CreateCredentialsTest("options.publicKey.extensions", {appid: ""}).runTest("empty appid in create request", "NotSupportedError");
|
||||||
new CreateCredentialsTest("options.publicKey.extensions", {appid: null}).runTest("null appid in create request", "NotSupportedError");
|
new CreateCredentialsTest("options.publicKey.extensions", {appid: null}).runTest("null appid in create request", "NotSupportedError");
|
||||||
new CreateCredentialsTest("options.publicKey.extensions", {appid: "anything"}).runTest("appid in create request", "NotSupportedError");
|
new CreateCredentialsTest("options.publicKey.extensions", {appid: "anything"}).runTest("appid in create request", "NotSupportedError");
|
||||||
|
|
||||||
// TODO
|
|
||||||
// defined extensions:
|
|
||||||
// * txAuthSimple
|
|
||||||
// * txAuthGeneric
|
|
||||||
// * authnSel
|
|
||||||
// * exts
|
|
||||||
// * uvi
|
|
||||||
// * loc
|
|
||||||
// * uvm
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/* JSHINT */
|
/* JSHINT */
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>navigator.credentials.create() largeBlob extension tests with no authenticator support</title>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/resources/testdriver.js"></script>
|
||||||
|
<script src="/resources/testdriver-vendor.js"></script>
|
||||||
|
<script src=helpers.js></script>
|
||||||
|
<body></body>
|
||||||
|
<script>
|
||||||
|
standardSetup(function() {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
new CreateCredentialsTest("options.publicKey.extensions", {
|
||||||
|
largeBlob: {
|
||||||
|
write: new ArrayBuffer(),
|
||||||
|
},
|
||||||
|
}).runTest("navigator.credentials.create() with largeBlob.write set", "NotSupportedError");
|
||||||
|
|
||||||
|
new CreateCredentialsTest("options.publicKey.extensions", {
|
||||||
|
largeBlob: {
|
||||||
|
read: true,
|
||||||
|
},
|
||||||
|
}).runTest("navigator.credentials.create() with largeBlob.read set", "NotSupportedError");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const credential = await createCredential({
|
||||||
|
options: {
|
||||||
|
publicKey: {
|
||||||
|
authenticatorSelection: {
|
||||||
|
requireResidentKey: true,
|
||||||
|
},
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
support: "preferred",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
assert_own_property(credential.getClientExtensionResults(), "largeBlob");
|
||||||
|
assert_false(credential.getClientExtensionResults().largeBlob.supported);
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "written");
|
||||||
|
}, "navigator.credentials.create() with largeBlob.support set to preferred and not supported by authenticator");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const credential = await createCredential({
|
||||||
|
options: {
|
||||||
|
publicKey: {
|
||||||
|
authenticatorSelection: {
|
||||||
|
requireResidentKey: true,
|
||||||
|
},
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
assert_own_property(credential.getClientExtensionResults(), "largeBlob");
|
||||||
|
assert_false(credential.getClientExtensionResults().largeBlob.supported);
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "written");
|
||||||
|
}, "navigator.credentials.create() with largeBlob.support not set and not supported by authenticator");
|
||||||
|
|
||||||
|
new CreateCredentialsTest("options.publicKey.extensions", {
|
||||||
|
largeBlob: {
|
||||||
|
support: "required"
|
||||||
|
},
|
||||||
|
}).runTest("navigator.credentials.create() with largeBlob.support set to required and not supported by authenticator", "NotAllowedError");
|
||||||
|
}, {
|
||||||
|
protocol: "ctap2",
|
||||||
|
hasResidentKey: true,
|
||||||
|
hasUserVerification: true,
|
||||||
|
isUserVerified: true,
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,82 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>navigator.credentials.create() largeBlob extension tests with authenticator support</title>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/resources/testdriver.js"></script>
|
||||||
|
<script src="/resources/testdriver-vendor.js"></script>
|
||||||
|
<script src=helpers.js></script>
|
||||||
|
<body></body>
|
||||||
|
<script>
|
||||||
|
standardSetup(function() {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const credential = await createCredential({
|
||||||
|
options: {
|
||||||
|
publicKey: {
|
||||||
|
authenticatorSelection: {
|
||||||
|
requireResidentKey: true,
|
||||||
|
},
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
support: "preferred",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
assert_own_property(credential.getClientExtensionResults(), "largeBlob");
|
||||||
|
assert_true(credential.getClientExtensionResults().largeBlob.supported);
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "written");
|
||||||
|
}, "navigator.credentials.create() with largeBlob.support set to preferred and supported by authenticator");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const credential = await createCredential({
|
||||||
|
options: {
|
||||||
|
publicKey: {
|
||||||
|
authenticatorSelection: {
|
||||||
|
requireResidentKey: true,
|
||||||
|
},
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
assert_own_property(credential.getClientExtensionResults(), "largeBlob");
|
||||||
|
assert_true(credential.getClientExtensionResults().largeBlob.supported);
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "written");
|
||||||
|
}, "navigator.credentials.create() with largeBlob.support not set and supported by authenticator");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const credential = await createCredential({
|
||||||
|
options: {
|
||||||
|
publicKey: {
|
||||||
|
authenticatorSelection: {
|
||||||
|
requireResidentKey: true,
|
||||||
|
},
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
support: "required"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
assert_own_property(credential.getClientExtensionResults(), "largeBlob");
|
||||||
|
assert_true(credential.getClientExtensionResults().largeBlob.supported);
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_not_own_property(credential.getClientExtensionResults().largeBlob, "written");
|
||||||
|
}, "navigator.credentials.create() with largeBlob.support set to required and supported by authenticator");
|
||||||
|
}, {
|
||||||
|
protocol: "ctap2",
|
||||||
|
hasResidentKey: true,
|
||||||
|
hasUserVerification: true,
|
||||||
|
isUserVerified: true,
|
||||||
|
extensions: ["largeBlob"],
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,91 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>navigator.credentials.get() largeBlob extension tests with no authenticator support</title>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/resources/testdriver.js"></script>
|
||||||
|
<script src="/resources/testdriver-vendor.js"></script>
|
||||||
|
<script src=helpers.js></script>
|
||||||
|
<body></body>
|
||||||
|
<script>
|
||||||
|
standardSetup(async function() {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const credential = createCredential();
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
return promise_rejects_dom(t, "NotSupportedError",
|
||||||
|
navigator.credentials.get({publicKey: {
|
||||||
|
challenge: new Uint8Array(),
|
||||||
|
allowCredentials: [{
|
||||||
|
id: (await credential).rawId,
|
||||||
|
type: "public-key",
|
||||||
|
}],
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
support: "preferred",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}}));
|
||||||
|
}, "navigator.credentials.get() with largeBlob.support set");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
return promise_rejects_dom(t, "NotSupportedError",
|
||||||
|
navigator.credentials.get({publicKey: {
|
||||||
|
challenge: new Uint8Array(),
|
||||||
|
allowCredentials: [{
|
||||||
|
id: (await credential).rawId,
|
||||||
|
type: "public-key",
|
||||||
|
}],
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
read: true,
|
||||||
|
write: new ArrayBuffer(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}}));
|
||||||
|
}, "navigator.credentials.get() with largeBlob.read and largeBlob.write set");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const assertion = await navigator.credentials.get({publicKey: {
|
||||||
|
challenge: new Uint8Array(),
|
||||||
|
allowCredentials: [{
|
||||||
|
id: (await credential).rawId,
|
||||||
|
type: "public-key",
|
||||||
|
}],
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
read: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}});
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "supported");
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "written");
|
||||||
|
}, "navigator.credentials.get() with largeBlob.read set without authenticator support");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const assertion = await navigator.credentials.get({publicKey: {
|
||||||
|
challenge: new Uint8Array(),
|
||||||
|
allowCredentials: [{
|
||||||
|
id: (await credential).rawId,
|
||||||
|
type: "public-key",
|
||||||
|
}],
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
write: new TextEncoder().encode("Don't call me Shirley"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}});
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "supported");
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_false(assertion.getClientExtensionResults().largeBlob.written);
|
||||||
|
}, "navigator.credentials.get() with largeBlob.write set without authenticator support");
|
||||||
|
}, {
|
||||||
|
protocol: "ctap2",
|
||||||
|
hasResidentKey: true,
|
||||||
|
hasUserVerification: true,
|
||||||
|
isUserVerified: true,
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,90 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>navigator.credentials.get() largeBlob extension tests with authenticator support</title>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/resources/testdriver.js"></script>
|
||||||
|
<script src="/resources/testdriver-vendor.js"></script>
|
||||||
|
<script src=helpers.js></script>
|
||||||
|
<body></body>
|
||||||
|
<script>
|
||||||
|
standardSetup(async function(authenticator) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const credential = createCredential({
|
||||||
|
options: {
|
||||||
|
publicKey: {
|
||||||
|
authenticatorSelection: {
|
||||||
|
requireResidentKey: true,
|
||||||
|
},
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
support: "required",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const assertion = await navigator.credentials.get({publicKey: {
|
||||||
|
challenge: new Uint8Array(),
|
||||||
|
allowCredentials: [{
|
||||||
|
id: (await credential).rawId,
|
||||||
|
type: "public-key",
|
||||||
|
}],
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
read: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}});
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "supported");
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "written");
|
||||||
|
}, "navigator.credentials.get() with largeBlob.read set with no blob on authenticator");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const blob = new TextEncoder().encode("According to all known laws of aviation, "
|
||||||
|
+ "there is no way a bee should be able to fly");
|
||||||
|
let assertion = await navigator.credentials.get({publicKey: {
|
||||||
|
challenge: new Uint8Array(),
|
||||||
|
allowCredentials: [{
|
||||||
|
id: (await credential).rawId,
|
||||||
|
type: "public-key",
|
||||||
|
}],
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
write: blob,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}});
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "blob");
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "supported");
|
||||||
|
assert_true(assertion.getClientExtensionResults().largeBlob.written);
|
||||||
|
|
||||||
|
assertion = await navigator.credentials.get({publicKey: {
|
||||||
|
challenge: new Uint8Array(),
|
||||||
|
allowCredentials: [{
|
||||||
|
id: (await credential).rawId,
|
||||||
|
type: "public-key",
|
||||||
|
}],
|
||||||
|
extensions: {
|
||||||
|
largeBlob: {
|
||||||
|
read: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}});
|
||||||
|
assert_array_equals(new Uint8Array(assertion.getClientExtensionResults().largeBlob.blob), blob);
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "supported");
|
||||||
|
assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "written");
|
||||||
|
}, "navigator.credentials.get() read and write blob");
|
||||||
|
}, {
|
||||||
|
protocol: "ctap2",
|
||||||
|
hasResidentKey: true,
|
||||||
|
hasUserVerification: true,
|
||||||
|
extensions: ["largeBlob"],
|
||||||
|
isUserVerified: true,
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -69,7 +69,7 @@ function createCredential(opts) {
|
||||||
createArgs.options.publicKey.user.id = new Uint8Array(16);
|
createArgs.options.publicKey.user.id = new Uint8Array(16);
|
||||||
|
|
||||||
// change the defaults with any options that were passed in
|
// change the defaults with any options that were passed in
|
||||||
extendObject (createArgs, opts);
|
extendObject(createArgs, opts);
|
||||||
|
|
||||||
// create the credential, return the Promise
|
// create the credential, return the Promise
|
||||||
return navigator.credentials.create(createArgs.options);
|
return navigator.credentials.create(createArgs.options);
|
||||||
|
@ -344,7 +344,8 @@ function cloneObject(o) {
|
||||||
function extendObject(dst, src) {
|
function extendObject(dst, src) {
|
||||||
Object.keys(src).forEach(function(key) {
|
Object.keys(src).forEach(function(key) {
|
||||||
if (isSimpleObject(src[key])) {
|
if (isSimpleObject(src[key])) {
|
||||||
extendObject (dst[key], src[key]);
|
dst[key] ||= {};
|
||||||
|
extendObject(dst[key], src[key]);
|
||||||
} else {
|
} else {
|
||||||
dst[key] = src[key];
|
dst[key] = src[key];
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,10 +99,7 @@ promise_test(async t => {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
error(e) {
|
error(e) {
|
||||||
t.step(() => {
|
t.step(() => { throw e; });
|
||||||
// TODO(sandersd): Change to 'throw e' once e is defined.
|
|
||||||
throw "decode error";
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -162,56 +162,6 @@ promise_test(async t => {
|
||||||
return ontrackPromise;
|
return ontrackPromise;
|
||||||
}, 'RTCRtpReceiver.createEncodedStream() throws if not requested in PC configuration');
|
}, 'RTCRtpReceiver.createEncodedStream() throws if not requested in PC configuration');
|
||||||
|
|
||||||
promise_test(async t => {
|
|
||||||
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
|
|
||||||
t.add_cleanup(() => caller.close());
|
|
||||||
const callee = new RTCPeerConnection();
|
|
||||||
t.add_cleanup(() => callee.close());
|
|
||||||
|
|
||||||
const stream = await navigator.mediaDevices.getUserMedia({audio:true});
|
|
||||||
const track = stream.getTracks()[0];
|
|
||||||
t.add_cleanup(() => track.stop());
|
|
||||||
|
|
||||||
const sender = caller.addTrack(track)
|
|
||||||
const senderStreams = sender.createEncodedStreams();
|
|
||||||
|
|
||||||
const senderWorker = new Worker('RTCPeerConnection-sender-worker-single-frame.js')
|
|
||||||
senderWorker.postMessage(
|
|
||||||
{readableStream: senderStreams.readable},
|
|
||||||
[senderStreams.readable]);
|
|
||||||
|
|
||||||
let expectedFrameData = null;
|
|
||||||
let verifiedFrameData = false;
|
|
||||||
let numVerifiedFrames = 0;
|
|
||||||
const onmessagePromise = new Promise(resolve => {
|
|
||||||
senderWorker.onmessage = t.step_func(message => {
|
|
||||||
if (!(message.data instanceof RTCEncodedAudioFrame)) {
|
|
||||||
// This is the first message sent from the Worker to the test.
|
|
||||||
// It contains an object (not an RTCEncodedAudioFrame) with the same
|
|
||||||
// fields as the RTCEncodedAudioFrame to be sent in follow-up messages.
|
|
||||||
// These serve as expected values to validate that the
|
|
||||||
// RTCEncodedAudioFrame is sent correctly back to the test in the next
|
|
||||||
// message.
|
|
||||||
expectedFrameData = message.data;
|
|
||||||
} else {
|
|
||||||
// This is the frame sent by the Worker after reading it from the
|
|
||||||
// readable stream. The Worker sends it twice after sending the
|
|
||||||
// verification message.
|
|
||||||
assert_equals(message.data.type, expectedFrameData.type);
|
|
||||||
assert_equals(message.data.timestamp, expectedFrameData.timestamp);
|
|
||||||
assert_true(areArrayBuffersEqual(message.data.data, expectedFrameData.data));
|
|
||||||
if (++numVerifiedFrames == 2)
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
exchangeIceCandidates(caller, callee);
|
|
||||||
await exchangeOfferAnswer(caller, callee);
|
|
||||||
|
|
||||||
return onmessagePromise;
|
|
||||||
}, 'RTCRtpSender readable stream transferred to a Worker and the Worker sends an RTCEncodedAudioFrame back');
|
|
||||||
|
|
||||||
promise_test(async t => {
|
promise_test(async t => {
|
||||||
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
|
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
|
||||||
t.add_cleanup(() => caller.close());
|
t.add_cleanup(() => caller.close());
|
||||||
|
|
|
@ -9,6 +9,57 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
|
promise_test(async t => {
|
||||||
|
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
|
||||||
|
t.add_cleanup(() => caller.close());
|
||||||
|
const callee = new RTCPeerConnection();
|
||||||
|
t.add_cleanup(() => callee.close());
|
||||||
|
|
||||||
|
const stream = await navigator.mediaDevices.getUserMedia({audio:true});
|
||||||
|
const track = stream.getTracks()[0];
|
||||||
|
t.add_cleanup(() => track.stop());
|
||||||
|
|
||||||
|
const sender = caller.addTrack(track)
|
||||||
|
const senderStreams = sender.createEncodedStreams();
|
||||||
|
|
||||||
|
const senderWorker = new Worker('RTCPeerConnection-sender-worker-single-frame.js')
|
||||||
|
t.add_cleanup(() => senderWorker.terminate());
|
||||||
|
senderWorker.postMessage(
|
||||||
|
{readableStream: senderStreams.readable},
|
||||||
|
[senderStreams.readable]);
|
||||||
|
|
||||||
|
let expectedFrameData = null;
|
||||||
|
let verifiedFrameData = false;
|
||||||
|
let numVerifiedFrames = 0;
|
||||||
|
const onmessagePromise = new Promise(resolve => {
|
||||||
|
senderWorker.onmessage = t.step_func(message => {
|
||||||
|
if (!(message.data instanceof RTCEncodedAudioFrame)) {
|
||||||
|
// This is the first message sent from the Worker to the test.
|
||||||
|
// It contains an object (not an RTCEncodedAudioFrame) with the same
|
||||||
|
// fields as the RTCEncodedAudioFrame to be sent in follow-up messages.
|
||||||
|
// These serve as expected values to validate that the
|
||||||
|
// RTCEncodedAudioFrame is sent correctly back to the test in the next
|
||||||
|
// message.
|
||||||
|
expectedFrameData = message.data;
|
||||||
|
} else {
|
||||||
|
// This is the frame sent by the Worker after reading it from the
|
||||||
|
// readable stream. The Worker sends it twice after sending the
|
||||||
|
// verification message.
|
||||||
|
assert_equals(message.data.type, expectedFrameData.type);
|
||||||
|
assert_equals(message.data.timestamp, expectedFrameData.timestamp);
|
||||||
|
assert_true(areArrayBuffersEqual(message.data.data, expectedFrameData.data));
|
||||||
|
if (++numVerifiedFrames == 2)
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
exchangeIceCandidates(caller, callee);
|
||||||
|
await exchangeOfferAnswer(caller, callee);
|
||||||
|
|
||||||
|
return onmessagePromise;
|
||||||
|
}, 'RTCRtpSender readable stream transferred to a Worker and the Worker sends an RTCEncodedAudioFrame back');
|
||||||
|
|
||||||
promise_test(async t => {
|
promise_test(async t => {
|
||||||
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
|
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
|
||||||
t.add_cleanup(() => caller.close());
|
t.add_cleanup(() => caller.close());
|
||||||
|
@ -23,6 +74,7 @@ promise_test(async t => {
|
||||||
const senderStreams = videoSender.createEncodedStreams();
|
const senderStreams = videoSender.createEncodedStreams();
|
||||||
|
|
||||||
const senderWorker = new Worker('RTCPeerConnection-sender-worker-single-frame.js')
|
const senderWorker = new Worker('RTCPeerConnection-sender-worker-single-frame.js')
|
||||||
|
t.add_cleanup(() => senderWorker.terminate());
|
||||||
senderWorker.postMessage(
|
senderWorker.postMessage(
|
||||||
{readableStream: senderStreams.readable},
|
{readableStream: senderStreams.readable},
|
||||||
[senderStreams.readable]);
|
[senderStreams.readable]);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue