mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Auto merge of #26393 - servo-wpt-sync:wpt_update_02-05-2020, r=jdm
Sync WPT with upstream (02-05-2020) Automated downstream sync of changes from upstream as of 02-05-2020. [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
292d6ec588
114 changed files with 878 additions and 334 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
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-003.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-004.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[mix-blend-mode-animation.html]
|
||||||
|
expected: FAIL
|
|
@ -509,3 +509,93 @@
|
||||||
[min-width length(ex) / values]
|
[min-width length(ex) / values]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(ex) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(pc) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(pt) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(pc) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right percentage(%) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(pt) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(em) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top percentage(%) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(ex) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(cm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(in) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(mm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(em) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[left length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(in) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(in) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(mm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[left length(pt) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(em) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(cm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(mm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[left length(pc) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(pc) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(ex) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(pt) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom percentage(%) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(cm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,3 @@
|
||||||
[test the top of layer]
|
[test the top of layer]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[test some point of the element: top left corner]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,3 @@
|
||||||
[elementsFromPoint on the root document for points in iframe elements]
|
[elementsFromPoint on the root document for points in iframe elements]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[elementsFromPoint on inner documents]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
[EventListener-invoke-legacy.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[Legacy listener of animationend]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Listener of animationstart]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Listener of animationend]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Legacy listener of transitionend]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Legacy listener of animationstart]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -321,9 +321,18 @@
|
||||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
[<iframe>: combined response Content-Type: text/html */*]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/plain */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -56,9 +56,6 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_1.html]
|
|
||||||
[Multiple history traversals from the same task]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_2.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_5.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[size.attributes.parse.empty.html]
|
|
||||||
[Parsing of non-negative integers]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[size.attributes.parse.empty.worker.html]
|
|
||||||
[Parsing of non-negative integers]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[size.attributes.parse.onlyspace.html]
|
|
||||||
[Parsing of non-negative integers]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[size.attributes.parse.onlyspace.worker.html]
|
|
||||||
[Parsing of non-negative integers]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
[supported-elements.html]
|
[supported-elements.html]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
[Contenteditable element should support autofocus]
|
[Contenteditable element should support autofocus]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
[Element with tabindex should support autofocus]
|
[Element with tabindex should support autofocus]
|
||||||
expected: TIMEOUT
|
expected: NOTRUN
|
||||||
|
|
||||||
[Area element should support autofocus]
|
[Area element should support autofocus]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_nonescaping-1.html]
|
[iframe_sandbox_popups_nonescaping-1.html]
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: FAIL
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_nonescaping-3.html]
|
[iframe_sandbox_popups_nonescaping-3.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
|
||||||
|
|
||||||
|
|
|
@ -3,3 +3,6 @@
|
||||||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -119,3 +119,6 @@
|
||||||
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44054 more errors.\n\tMax AbsError of 1.9961981773376465e+0 at index of 31768.\n\t[31768\]\t-9.9879217147827148e-1\t9.9740600585937500e-1\t1.9961981773376465e+0\t2.0013897706758867e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 10584.\n\t[10584\]\t-5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n]
|
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44054 more errors.\n\tMax AbsError of 1.9961981773376465e+0 at index of 31768.\n\t[31768\]\t-9.9879217147827148e-1\t9.9740600585937500e-1\t1.9961981773376465e+0\t2.0013897706758867e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 10584.\n\t[10584\]\t-5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 42291 more errors.\n\tMax AbsError of 1.9986916780471802e+0 at index of 42250.\n\t[42250\]\t9.9994289875030518e-1\t-9.9874877929687500e-1\t1.9986916780471802e+0\t2.0011956154322119e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[017.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, about:blank]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[xrInputSource_gamepad_disconnect.https.html]
|
||||||
|
[WebXR InputSource's gamepad gets disconnected when the input source is removed]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -24334,6 +24334,21 @@
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"contenteditable": {
|
||||||
|
"synthetic-height.tentative.html": [
|
||||||
|
"4d466bff412e6de924b9886ef808b49f7ff2b44d",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/contenteditable/synthetic-height-ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
"css": {
|
"css": {
|
||||||
"CSS2": {
|
"CSS2": {
|
||||||
"abspos": {
|
"abspos": {
|
||||||
|
@ -264457,6 +264472,10 @@
|
||||||
"META.yml": [
|
"META.yml": [
|
||||||
"3618b8d29d08c2315f6480c0e02578bb4784b344",
|
"3618b8d29d08c2315f6480c0e02578bb4784b344",
|
||||||
[]
|
[]
|
||||||
|
],
|
||||||
|
"synthetic-height-ref.html": [
|
||||||
|
"a64b545f03c369a900ad6fee1971b60a176c6508",
|
||||||
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"cookie-store": {
|
"cookie-store": {
|
||||||
|
@ -317728,6 +317747,10 @@
|
||||||
"0cc259b24f3829f665dc97b5d5edd98a3e0147c3",
|
"0cc259b24f3829f665dc97b5d5edd98a3e0147c3",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"feature-policy-frame-policy-allowed-for-some-override.https.sub.html.sub.headers": [
|
||||||
|
"c2493a089031aa89fc6c689e0bdc1ea717da81c3",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"feature-policy-frame-policy-allowed-for-some.https.sub.html.sub.headers": [
|
"feature-policy-frame-policy-allowed-for-some.https.sub.html.sub.headers": [
|
||||||
"c2493a089031aa89fc6c689e0bdc1ea717da81c3",
|
"c2493a089031aa89fc6c689e0bdc1ea717da81c3",
|
||||||
[]
|
[]
|
||||||
|
@ -322191,7 +322214,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"tests2d-offscreen.yaml": [
|
"tests2d-offscreen.yaml": [
|
||||||
"f4a605c0eca5a2305223da743d8c5ff8a50ca508",
|
"5fe168a66d572f2b3d8e33f3982d70702db849e3",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"tests2d.yaml": [
|
"tests2d.yaml": [
|
||||||
|
@ -331568,7 +331591,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"http2-context.sub.h2.any.js.ini": [
|
"http2-context.sub.h2.any.js.ini": [
|
||||||
"6537b7eae0705cfee6ff43145b505b2bc1880836",
|
"665258c9d94c2fc934b07fdb33d7e54eac6bc0cb",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"order-of-metas.any.js.ini": [
|
"order-of-metas.any.js.ini": [
|
||||||
|
@ -331584,7 +331607,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"wpt-server-http.sub.html.ini": [
|
"wpt-server-http.sub.html.ini": [
|
||||||
"e2f26c7e4b697c77c5ee195cad763279bd1ecde0",
|
"b1e18f8948acf097d415209d18f084da58e02fa9",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"wpt-server-websocket.sub.html.ini": [
|
"wpt-server-websocket.sub.html.ini": [
|
||||||
|
@ -332315,7 +332338,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"web-nfc.idl": [
|
"web-nfc.idl": [
|
||||||
"155bf267a206719e64e5bc505b7602f8804643bf",
|
"f2e31b7352867d39edc9c43a4f1fffb3a02cb985",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"web-share.idl": [
|
"web-share.idl": [
|
||||||
|
@ -332496,6 +332519,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"largest-contentful-paint": {
|
"largest-contentful-paint": {
|
||||||
|
"META.yml": [
|
||||||
|
"b7e2497681e98960fd00d70ced82aa9e3a48d144",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"resources": {
|
"resources": {
|
||||||
"iframe-stores-entry.html": [
|
"iframe-stores-entry.html": [
|
||||||
"cd600254805570deab8447ea843657d7f268b7c5",
|
"cd600254805570deab8447ea843657d7f268b7c5",
|
||||||
|
@ -332512,6 +332539,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"layout-instability": {
|
"layout-instability": {
|
||||||
|
"META.yml": [
|
||||||
|
"10c6aa36cecf918928298102d1934c2ff79d01f2",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"resources": {
|
"resources": {
|
||||||
"slow-image.py": [
|
"slow-image.py": [
|
||||||
"ee7988c551f6429eea2b929af083ad30cbd5c73d",
|
"ee7988c551f6429eea2b929af083ad30cbd5c73d",
|
||||||
|
@ -332563,7 +332594,7 @@
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"lint.whitelist": [
|
"lint.ignore": [
|
||||||
"5f793cb6f3ec885017eeaf4cd7b4074d93e4d605",
|
"5f793cb6f3ec885017eeaf4cd7b4074d93e4d605",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
@ -342064,7 +342095,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"ci_wptrunner_infrastructure.sh": [
|
"ci_wptrunner_infrastructure.sh": [
|
||||||
"f98385dd95d89a63eba12a4600b14dd2822816da",
|
"89267b50cb6432c495d428a180c59659b5c5a60a",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"commands.json": [
|
"commands.json": [
|
||||||
|
@ -342122,7 +342153,7 @@
|
||||||
],
|
],
|
||||||
"tasks": {
|
"tasks": {
|
||||||
"test.yml": [
|
"test.yml": [
|
||||||
"d2d76df13a753643e0e32d4237ad19b9823e1742",
|
"3157fb6f273810a6cb75278af7920d8af41022ab",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -342154,7 +342185,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"test_valid.py": [
|
"test_valid.py": [
|
||||||
"aa1ce20cd6d36191d96e2080393a70b13d8aa1df",
|
"85c015e521a6fcbe9e4050e4db7b9a191c3e113c",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -342256,7 +342287,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"lint.py": [
|
"lint.py": [
|
||||||
"fad93662a4465c7d1cb266f8ef475b26ed24f764",
|
"74b3c8cf9301a9d5ee3f0356a8a5604eea41fa3c",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"rules.py": [
|
"rules.py": [
|
||||||
|
@ -342383,7 +342414,7 @@
|
||||||
"29296f4c5876fc8c4cd052548616005c1e46f0e4",
|
"29296f4c5876fc8c4cd052548616005c1e46f0e4",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"lint.whitelist": [
|
"lint.ignore": [
|
||||||
"a763e4432e5afa2123035345e130d018710ffdd0",
|
"a763e4432e5afa2123035345e130d018710ffdd0",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
@ -342437,7 +342468,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"test_lint.py": [
|
"test_lint.py": [
|
||||||
"af2b7d3d4aa19f0c1d72a5575b5013c7897e1dc4",
|
"43da2f9ff21904868431533eaae846a403b7379a",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"test_path_lints.py": [
|
"test_path_lints.py": [
|
||||||
|
@ -348084,7 +348115,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"firefox.py": [
|
"firefox.py": [
|
||||||
"9532bd03cb7d8bd7b21543c756ba9197707947d0",
|
"f60185eb25f2e3140562dde5d96624f7081e4571",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"firefox_android.py": [
|
"firefox_android.py": [
|
||||||
|
@ -348507,7 +348538,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"wpttest.py": [
|
"wpttest.py": [
|
||||||
"8f828ff43abf72c9e3332e7e1eb0bf09f5caaf88",
|
"838a3ece325e8d58e952ea63b69508255fbb880f",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -353530,7 +353561,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"webxr_util.js": [
|
"webxr_util.js": [
|
||||||
"fcee893036799f917ed175d0444058103c4287b5",
|
"7c157518755dfef1f0ffe2e00cbb27d8a2939dcb",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -354866,7 +354897,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"access-control-preflight-denied.py": [
|
"access-control-preflight-denied.py": [
|
||||||
"889ee6b0eca6ca68e7b8345fa2a1031103a8886c",
|
"e8010cc0ef71d8d1db3c4e381df45b56d541026e",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"access-control-preflight-request-header-lowercase.py": [
|
"access-control-preflight-request-header-lowercase.py": [
|
||||||
|
@ -380924,6 +380955,13 @@
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
"viewport-user-scalable-no-wide-content.tentative.html": [
|
||||||
|
"6cf0bfa236a0cb5806c5deeeb7d45c07afb9f16f",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"css-display": {
|
"css-display": {
|
||||||
|
@ -399725,7 +399763,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"CSSStyleSheet-constructable-replace-on-regular-sheet.html": [
|
"CSSStyleSheet-constructable-replace-on-regular-sheet.html": [
|
||||||
"5ce0cbee97a2a1593018089f9252870bdb47587b",
|
"76bee452a661bb95908c66e176797dd62f918ab2",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -420303,8 +420341,17 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"feature-policy-frame-policy-allowed-for-some-override.https.sub.html": [
|
||||||
|
"17c9cc6b8dbbb67891871874a5632b3cbaa89b3a",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"feature-policy-frame-policy-allowed-for-some.https.sub.html": [
|
"feature-policy-frame-policy-allowed-for-some.https.sub.html": [
|
||||||
"9a020f9e6b5d513adaf2d36b25bd62b239789e50",
|
"d519743a4384c7242d849c011cf02e835eecd2ba",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
|
@ -444233,14 +444280,14 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"size.attributes.parse.empty.html": [
|
"size.attributes.parse.empty.html": [
|
||||||
"69e834f510ee1a4d2ded63b9e7820eb0bd89502d",
|
"382914954109d81fe79a20be1ab13907902b5724",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"size.attributes.parse.empty.worker.js": [
|
"size.attributes.parse.empty.worker.js": [
|
||||||
"1888d2ef132010d087a7379acdc75f585d6dfc88",
|
"0fb9808d36b10784a2d3a052f9e3edb06d477e84",
|
||||||
[
|
[
|
||||||
"html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.empty.worker.html",
|
"html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.empty.worker.html",
|
||||||
{}
|
{}
|
||||||
|
@ -444317,14 +444364,14 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"size.attributes.parse.onlyspace.html": [
|
"size.attributes.parse.onlyspace.html": [
|
||||||
"cbd9c1e3e3fb91a1caad7201c291eb0d5a4253a8",
|
"55d05b88c3f88508f387299ac4e75c492f96f518",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"size.attributes.parse.onlyspace.worker.js": [
|
"size.attributes.parse.onlyspace.worker.js": [
|
||||||
"21c8cfc32baa462e2c543631cbcb26cbdc15a56d",
|
"b2e5d6c6726a599ff77ae7066127dfa6d5cfad9c",
|
||||||
[
|
[
|
||||||
"html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.html",
|
"html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.html",
|
||||||
{}
|
{}
|
||||||
|
@ -447538,6 +447585,13 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"preventScroll-textarea.html": [
|
||||||
|
"446284b1863d73f03b845a121189f273b77decd1",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"preventScroll.html": [
|
"preventScroll.html": [
|
||||||
"97d341b30ec849fefc13adb8b3376307fea58b69",
|
"97d341b30ec849fefc13adb8b3376307fea58b69",
|
||||||
[
|
[
|
||||||
|
@ -485858,6 +485912,15 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"scroll-timeline-snapshotting.html": [
|
||||||
|
"f2ba23fd4dc9cb4da40b4008071a7a109e6edb37",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"testdriver": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"setting-current-time.html": [
|
"setting-current-time.html": [
|
||||||
"d46206d8257702d443e3b1e620bf9bad4f327ee3",
|
"d46206d8257702d443e3b1e620bf9bad4f327ee3",
|
||||||
[
|
[
|
||||||
|
@ -510054,7 +510117,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCPeerConnection-setRemoteDescription-offer.html": [
|
"RTCPeerConnection-setRemoteDescription-offer.html": [
|
||||||
"21ecf17fef6aa8b242b22a55e78c3bb0280a28cb",
|
"b4702446613255daec7db5325f64089a917fdee9",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -510075,7 +510138,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCPeerConnection-setRemoteDescription-rollback.html": [
|
"RTCPeerConnection-setRemoteDescription-rollback.html": [
|
||||||
"516cb57025b195552ade0e600c02f7c92c8f4aa8",
|
"a031a6015f4274d783fc3a5a1bce03a7e23dffe8",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516120,7 +516183,7 @@
|
||||||
},
|
},
|
||||||
"dom-overlay": {
|
"dom-overlay": {
|
||||||
"ar_dom_overlay.https.html": [
|
"ar_dom_overlay.https.html": [
|
||||||
"e6f7a9d455cf22d1fa070f269ee9715992e5e2c8",
|
"de0cb68744956558541b574fd88800d262d23e97",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516142,14 +516205,14 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"events_input_sources_change.https.html": [
|
"events_input_sources_change.https.html": [
|
||||||
"107cc9b544e3a395c14655d0f4356485f05d7bf5",
|
"7c784c34479842148a3310b3f48d41990fcd4c34",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"events_referenceSpace_reset_immersive.https.html": [
|
"events_referenceSpace_reset_immersive.https.html": [
|
||||||
"2da3788a39a20db3396d542f7fb0dc5d486c2aa3",
|
"9643bf61c877ed50fa70e49015828e1b58ba7870",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516163,21 +516226,21 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"events_session_select.https.html": [
|
"events_session_select.https.html": [
|
||||||
"bc501b693497ddf58ccabd4491858263c4dfbdbc",
|
"f83d3c4f85421999d2480049dc4daa62acf07666",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"events_session_select_subframe.https.html": [
|
"events_session_select_subframe.https.html": [
|
||||||
"0e2c23424c0893b6a563c2aa2fbd999e50b1cfef",
|
"96fa11713dd480b947b0c64b624dc6022cb7e8d0",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"events_session_squeeze.https.html": [
|
"events_session_squeeze.https.html": [
|
||||||
"59e4e3f72c5d63cff47b6a7e1dfbac6194203534",
|
"101f1dc7c886906a9f6bc9db8bba0e01fdcb4b73",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516210,14 +516273,14 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrInputSource_gamepad_disconnect.https.html": [
|
"xrInputSource_gamepad_disconnect.https.html": [
|
||||||
"7b8ff4a59c8e503d4f31fe33f9fa1dee6af10003",
|
"f69f943b5b58451f75a4f21ac149676066d1f799",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrInputSource_gamepad_input_registered.https.html": [
|
"xrInputSource_gamepad_input_registered.https.html": [
|
||||||
"038e28dcffbd507105da57fb1ced055ea83896c0",
|
"1ff9dcf3b40c9a9c9f41fcc756f6bab1d3add7b3",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516225,21 +516288,21 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"getInputPose_handedness.https.html": [
|
"getInputPose_handedness.https.html": [
|
||||||
"5a310c6dd77274631d0ef9e751c6f195def9c3d3",
|
"c5c13fd08f4ec43cb33155c9ea92ad2177b6035e",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"getInputPose_pointer.https.html": [
|
"getInputPose_pointer.https.html": [
|
||||||
"9c2bf5217f81fc6f345a15e79170ec7aa6b2f750",
|
"30dbe4c5304a33d2131548d8c168c85225cd4b82",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"getViewerPose_emulatedPosition.https.html": [
|
"getViewerPose_emulatedPosition.https.html": [
|
||||||
"d3f83dad26ac8280888f85a451016cefa78aa04a",
|
"acba79136a2925ef8c37ffe0a992c5a8da967976",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516247,7 +516310,7 @@
|
||||||
],
|
],
|
||||||
"hit-test": {
|
"hit-test": {
|
||||||
"ar_hittest_subscription_inputSources.https.html": [
|
"ar_hittest_subscription_inputSources.https.html": [
|
||||||
"7b609d5e3a7b0990493af37f614086b552af7945",
|
"d419055ab264276ab6c2c2f064ab11785440bdfe",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516275,7 +516338,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"ar_hittest_subscription_transientInputSources.https.html": [
|
"ar_hittest_subscription_transientInputSources.https.html": [
|
||||||
"385bb667b318cb5d043bafc74aebb59be805b826",
|
"e38e9c601b312f1207cce29bd64d588381275e3c",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516383,7 +516446,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrBoundedReferenceSpace_updates.https.html": [
|
"xrBoundedReferenceSpace_updates.https.html": [
|
||||||
"9043d59e3b2318fab182b85ab29d15ea4e2b41cb",
|
"3d5040436657d7b09b290562f1cfde086b924495",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516495,49 +516558,49 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrInputSource_add_remove.https.html": [
|
"xrInputSource_add_remove.https.html": [
|
||||||
"33264ddd68ab09e2ed6a596614116bd1225f2665",
|
"7764017910d2e5ada78febe954e9543aca89226b",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrInputSource_emulatedPosition.https.html": [
|
"xrInputSource_emulatedPosition.https.html": [
|
||||||
"7b0fda4508748c81a0865d137847fd7f13a3ff97",
|
"2bc21ffe6c395de22a1aa840cb8a97e44a81eebe",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrInputSource_profiles.https.html": [
|
"xrInputSource_profiles.https.html": [
|
||||||
"32073c631f8ecfc3b19c33ed03e6b9999553cfec",
|
"f55e682b67528c0e01406163490fa433a69d0592",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrInputSource_sameObject.https.html": [
|
"xrInputSource_sameObject.https.html": [
|
||||||
"78240de2f9019218061e45359cfad7cd28057d52",
|
"305e5f9e0fccc8ef7a7d96d9e65da130b5f54239",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrPose_transform_sameObject.https.html": [
|
"xrPose_transform_sameObject.https.html": [
|
||||||
"79eed4cdec4663b3a0a401aff80126e4dad767f9",
|
"8e2239cff167cbb88b8702c4f3f413d447b5015e",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrReferenceSpace_originOffset.https.html": [
|
"xrReferenceSpace_originOffset.https.html": [
|
||||||
"3d244b8ce29e2c74dd6f5c243dd2ab6679122c82",
|
"f6929f27af0ee73676c09be7de25afa2ed3d1fd4",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrReferenceSpace_originOffsetBounded.https.html": [
|
"xrReferenceSpace_originOffsetBounded.https.html": [
|
||||||
"c50aff2515b85ab119c3c1c43487a98c5bf8dddb",
|
"7ce4acafd35ef7ccad553cdf15ebd43a0e24d6c7",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516614,7 +516677,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrSession_input_events_end.https.html": [
|
"xrSession_input_events_end.https.html": [
|
||||||
"a932aad2fad78ceb2449928773da3ecfe237b8e7",
|
"636562dd6ec06c1d5d84d73b0b10ed38d7950ad5",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516670,7 +516733,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrSession_sameObject.https.html": [
|
"xrSession_sameObject.https.html": [
|
||||||
"837fa0a008d6cdfcbd9ee134e7ec78bce7c2b95b",
|
"66aeef81c50c36ff2fc50dcc7c45749f25605893",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -516698,7 +516761,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"xrStationaryReferenceSpace_floorlevel_updates.https.html": [
|
"xrStationaryReferenceSpace_floorlevel_updates.https.html": [
|
||||||
"3f33cf354b8d3fde3d0a2efd3d92b78037a9178a",
|
"967291609c0f05a9e457e3ffa2a77f601fa9d461",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-002.html]
|
||||||
|
[Hit test float]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-003.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-004.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[mix-blend-mode-animation.html]
|
||||||
|
expected: FAIL
|
|
@ -509,3 +509,93 @@
|
||||||
[border-left-width length(pt) / values]
|
[border-left-width length(pt) / values]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(ex) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(pc) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(pt) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(pc) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right percentage(%) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(pt) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(em) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top percentage(%) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(ex) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(cm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(in) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(mm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(em) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[left length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(in) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(in) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(mm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[left length(pt) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(em) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(cm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(mm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[left length(pc) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(pc) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[top length(ex) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[right length(pt) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom percentage(%) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[bottom length(cm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,3 @@
|
||||||
[listeners are called when <iframe> is resized]
|
[listeners are called when <iframe> is resized]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[listeners are called correct number of times]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,3 @@
|
||||||
[test the top of layer]
|
[test the top of layer]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[test some point of the element: top left corner]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,3 @@
|
||||||
[elementsFromPoint on the root document for points in iframe elements]
|
[elementsFromPoint on the root document for points in iframe elements]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[elementsFromPoint on inner documents]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Listener of animationend]
|
[Listener of animationend]
|
||||||
expected: TIMEOUT
|
expected: FAIL
|
||||||
|
|
||||||
[Legacy listener of animationend]
|
[Legacy listener of animationend]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
|
@ -312,12 +312,6 @@
|
||||||
[fetch(): separate response Content-Type: text/plain ]
|
[fetch(): separate response Content-Type: text/plain ]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -327,3 +321,18 @@
|
||||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: text/html */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/plain */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,3 @@
|
||||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_1.html]
|
|
||||||
[Multiple history traversals from the same task]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_2.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_5.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[cross-origin-objects-on-new-window.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -1,4 +0,0 @@
|
||||||
[size.attributes.parse.empty.html]
|
|
||||||
[Parsing of non-negative integers]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[size.attributes.parse.empty.worker.html]
|
|
||||||
[Parsing of non-negative integers]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[size.attributes.parse.onlyspace.html]
|
|
||||||
[Parsing of non-negative integers]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[size.attributes.parse.onlyspace.worker.html]
|
|
||||||
[Parsing of non-negative integers]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
[supported-elements.html]
|
[supported-elements.html]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
[Contenteditable element should support autofocus]
|
[Contenteditable element should support autofocus]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Element with tabindex should support autofocus]
|
[Element with tabindex should support autofocus]
|
||||||
expected: TIMEOUT
|
expected: NOTRUN
|
||||||
|
|
||||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iframe_sandbox_popups_nonescaping-1.html]
|
[iframe_sandbox_popups_nonescaping-1.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iframe_sandbox_popups_nonescaping-3.html]
|
[iframe_sandbox_popups_nonescaping-3.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
|
||||||
|
|
||||||
|
|
|
@ -4,3 +4,6 @@
|
||||||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -191,3 +191,6 @@
|
||||||
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44054 more errors.\n\tMax AbsError of 1.9961981773376465e+0 at index of 31768.\n\t[31768\]\t-9.9879217147827148e-1\t9.9740600585937500e-1\t1.9961981773376465e+0\t2.0013897706758867e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 10584.\n\t[10584\]\t-5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n]
|
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44054 more errors.\n\tMax AbsError of 1.9961981773376465e+0 at index of 31768.\n\t[31768\]\t-9.9879217147827148e-1\t9.9740600585937500e-1\t1.9961981773376465e+0\t2.0013897706758867e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 10584.\n\t[10584\]\t-5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 42291 more errors.\n\tMax AbsError of 1.9986916780471802e+0 at index of 42250.\n\t[42250\]\t9.9994289875030518e-1\t-9.9874877929687500e-1\t1.9986916780471802e+0\t2.0011956154322119e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[017.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, about:blank]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[xrInputSource_gamepad_disconnect.https.html]
|
[xrInputSource_gamepad_disconnect.https.html]
|
||||||
expected: ERROR
|
|
||||||
[WebXR InputSource's gamepad gets disconnected when the input source is removed]
|
[WebXR InputSource's gamepad gets disconnected when the input source is removed]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -10868,7 +10868,7 @@
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"lint.whitelist": [
|
"lint.ignore": [
|
||||||
"314a9e5b44443be1a4e28dd3c5047a5082a7ccab",
|
"314a9e5b44443be1a4e28dd3c5047a5082a7ccab",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>CSS test reference</title>
|
||||||
|
<style>
|
||||||
|
div { background: green; border: 1px solid; }
|
||||||
|
</style>
|
||||||
|
<div><br></div>
|
||||||
|
<div><br></div>
|
||||||
|
<div><br></div>
|
||||||
|
<div><br></div>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>contenteditable causes blocks to have a synthesized height</title>
|
||||||
|
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
|
||||||
|
<link rel="author" href="https://mozilla.org" title="Mozilla">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1098151">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1634543">
|
||||||
|
<link rel="help" href="https://github.com/w3c/editing/issues/70">
|
||||||
|
<link rel="match" href="synthetic-height-ref.html">
|
||||||
|
<style>
|
||||||
|
div { background: green; border: 1px solid; }
|
||||||
|
.pseudo::before {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
.abspos-pseudo::before {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div contenteditable></div>
|
||||||
|
<div contenteditable><span style="position: absolute"></span></div>
|
||||||
|
<div contenteditable class="pseudo"></div>
|
||||||
|
<div contenteditable class="pseudo abspos-pseudo"></div>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-device-adapt/">
|
||||||
|
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5016">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#content {
|
||||||
|
width: 10000px;
|
||||||
|
height: 10000px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="content">Content</div>
|
||||||
|
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
test(() => {
|
||||||
|
assert_equals(window.visualViewport.scale, 1.0,
|
||||||
|
'visual viewport scale should be 1.0');
|
||||||
|
}, 'Page with meta viewport "width=device-width, user-scalable=no" ' +
|
||||||
|
'should scale document with very wide content to 1.0.');
|
||||||
|
</script>
|
|
@ -4,29 +4,39 @@
|
||||||
<link rel="help" href="https://wicg.github.io/construct-stylesheets/">
|
<link rel="help" href="https://wicg.github.io/construct-stylesheets/">
|
||||||
<script src = '/resources/testharness.js'></script>
|
<script src = '/resources/testharness.js'></script>
|
||||||
<script src = '/resources/testharnessreport.js'></script>
|
<script src = '/resources/testharnessreport.js'></script>
|
||||||
<style id="style">:root { background-color: lime }</style>
|
<style id="style">
|
||||||
|
@import url("support/constructable-import.css");
|
||||||
|
:root { background-color: lime }
|
||||||
|
</style>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
test(() => {
|
promise_test(async () => {
|
||||||
|
await new Promise(resolve => window.addEventListener("load", resolve));
|
||||||
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
|
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
|
||||||
let sheet = document.styleSheets[0];
|
let sheet = document.styleSheets[0];
|
||||||
|
let childSheet = sheet.cssRules[0].styleSheet;
|
||||||
assert_throws_dom("NotAllowedError", () => sheet.replaceSync(":root { background-color: red }"), "replaceSync on non-constructed sheet should throw");
|
assert_throws_dom("NotAllowedError", () => sheet.replaceSync(":root { background-color: red }"), "replaceSync on non-constructed sheet should throw");
|
||||||
|
assert_throws_dom("NotAllowedError", () => childSheet.replaceSync(":root { background-color: red }"), "replaceSync on non-constructed sheet should throw");
|
||||||
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
|
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
|
||||||
}, "CSSStyleSheet.replaceSync throws NotAllowedError for non-constructed sheets")
|
}, "CSSStyleSheet.replaceSync throws NotAllowedError for non-constructed sheets")
|
||||||
|
|
||||||
promise_test(async function(t) {
|
promise_test(async function(t) {
|
||||||
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
|
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
|
||||||
let sheet = document.styleSheets[0];
|
let sheet = document.styleSheets[0];
|
||||||
|
let childSheet = sheet.cssRules[0].styleSheet;
|
||||||
await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
|
await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
|
||||||
|
await promise_rejects_dom(t, "NotAllowedError", childSheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
|
||||||
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
|
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
|
||||||
}, "CSSStyleSheet.replace returns a rejected promise for non-constructed sheets")
|
}, "CSSStyleSheet.replace returns a rejected promise for non-constructed sheets")
|
||||||
|
|
||||||
promise_test(async function(t) {
|
promise_test(async function(t) {
|
||||||
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
|
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
|
||||||
let sheet = document.styleSheets[0];
|
let sheet = document.styleSheets[0];
|
||||||
|
let childSheet = sheet.cssRules[0].styleSheet;
|
||||||
style.remove() // sheet's associated document becomes null.
|
style.remove() // sheet's associated document becomes null.
|
||||||
await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
|
await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
|
||||||
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
|
await promise_rejects_dom(t, "NotAllowedError", childSheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
|
||||||
|
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgba(0, 0, 0, 0)", "old sheet was removed, so the default color should apply");
|
||||||
}, "CSSStyleSheet.replace returns a rejected promise for non-constructed sheets that have no associated document")
|
}, "CSSStyleSheet.replace returns a rejected promise for non-constructed sheets that have no associated document")
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src=/feature-policy/resources/featurepolicy.js></script>
|
||||||
|
<!-- Feature-Policy: fullscreen 'self' cross_origin https://www.example.com; -->
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}';
|
||||||
|
var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}';
|
||||||
|
var cross_origin1 = 'https://{{domains[www1]}}:{{ports[https][0]}}';
|
||||||
|
var same_origin_src = '/feature-policy/resources/feature-policy-allowedfeatures.html';
|
||||||
|
var cross_origin_src = cross_origin + same_origin_src;
|
||||||
|
var cross_origin_src1 = cross_origin1 + same_origin_src;
|
||||||
|
var data_src = 'data:text/html,<h1>data: URL</h1>';
|
||||||
|
// Test feature policy with same_origin_src and cross_origin_src.
|
||||||
|
var policies = [
|
||||||
|
{allow: "*", sameOriginTestExpect: true, crossOriginTestExpect: true, crossOrigin1TestExpect: true, dataOriginTestExpect: false},
|
||||||
|
{allow: "'self'", sameOriginTestExpect: true, crossOriginTestExpect: false, crossOrigin1TestExpect: false, dataOriginTestExpect: false},
|
||||||
|
{allow: "'none'", sameOriginTestExpect: false, crossOriginTestExpect: false, crossOrigin1TestExpect: false, dataOriginTestExpect: false},
|
||||||
|
{allow: "'self' " + cross_origin + " https://www.example.com", sameOriginTestExpect: true, crossOriginTestExpect: true, crossOrigin1TestExpect: false, dataOriginTestExpect: false}];
|
||||||
|
|
||||||
|
// Test that the allow attribute overrides allowfullscreen.
|
||||||
|
for (var i = 0; i < policies.length; i++) {
|
||||||
|
test(function() {
|
||||||
|
test_frame_policy(
|
||||||
|
'fullscreen', same_origin_src, undefined,
|
||||||
|
policies[i].sameOriginTestExpect,
|
||||||
|
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
||||||
|
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow +
|
||||||
|
'" and allowfullscreen.');
|
||||||
|
test(function() {
|
||||||
|
test_frame_policy(
|
||||||
|
'fullscreen', cross_origin_src, undefined,
|
||||||
|
policies[i].crossOriginTestExpect,
|
||||||
|
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
||||||
|
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow +
|
||||||
|
'" and allowfullscreen.');
|
||||||
|
test(function() {
|
||||||
|
test_frame_policy(
|
||||||
|
'fullscreen', cross_origin_src1, undefined,
|
||||||
|
policies[i].crossOrigin1TestExpect,
|
||||||
|
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
||||||
|
}, 'Test frame policy on another cross origin iframe with allow = "' + policies[i].allow +
|
||||||
|
'" and allowfullscreen.');
|
||||||
|
test(function() {
|
||||||
|
test_frame_policy(
|
||||||
|
'fullscreen', undefined, true, policies[i].sameOriginTestExpect,
|
||||||
|
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
||||||
|
}, 'Test frame policy on srcdoc iframe with allow = "' + policies[i].allow +
|
||||||
|
'" and allowfullscreen.');
|
||||||
|
test(function() {
|
||||||
|
test_frame_policy(
|
||||||
|
'fullscreen', same_origin_src, true, policies[i].sameOriginTestExpect,
|
||||||
|
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
||||||
|
}, 'Test frame policy on srcdoc + same origin iframe with allow = "' + policies[i].allow +
|
||||||
|
'" and allowfullscreen.');
|
||||||
|
test(function() {
|
||||||
|
test_frame_policy(
|
||||||
|
'fullscreen', cross_origin_src, true, policies[i].sameOriginTestExpect,
|
||||||
|
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
||||||
|
}, 'Test frame policy on srcdoc + cross origin iframe with allow = "' + policies[i].allow +
|
||||||
|
'" and allowfullscreen.');
|
||||||
|
test(function() {
|
||||||
|
test_frame_policy(
|
||||||
|
'fullscreen', cross_origin_src1, true, policies[i].sameOriginTestExpect,
|
||||||
|
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
||||||
|
}, 'Test frame policy on srcdoc + another cross origin iframe with allow = "' + policies[i].allow +
|
||||||
|
'" and allowfullscreen.');
|
||||||
|
test(function() {
|
||||||
|
test_frame_policy(
|
||||||
|
'fullscreen', data_src, undefined, policies[i].dataOriginTestExpect,
|
||||||
|
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
||||||
|
}, 'Test frame policy on data: URL cross origin iframe with allow = "' + policies[i].allow +
|
||||||
|
'" and allowfullscreen.');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1 @@
|
||||||
|
Feature-Policy: fullscreen 'self' https://{{domains[www]}}:{{ports[https][0]}} https://www.example.com;
|
|
@ -131,61 +131,6 @@
|
||||||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".');
|
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test that the allow attribute overrides allowfullscreen.
|
|
||||||
for (var i = 0; i < policies.length; i++) {
|
|
||||||
test(function() {
|
|
||||||
test_frame_policy(
|
|
||||||
'fullscreen', same_origin_src, undefined,
|
|
||||||
policies[i].sameOriginTestExpect,
|
|
||||||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
|
||||||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow +
|
|
||||||
'" and allowfullscreen.');
|
|
||||||
test(function() {
|
|
||||||
test_frame_policy(
|
|
||||||
'fullscreen', cross_origin_src, undefined,
|
|
||||||
policies[i].crossOriginTestExpect,
|
|
||||||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
|
||||||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow +
|
|
||||||
'" and allowfullscreen.');
|
|
||||||
test(function() {
|
|
||||||
test_frame_policy(
|
|
||||||
'fullscreen', cross_origin_src1, undefined,
|
|
||||||
policies[i].crossOrigin1TestExpect,
|
|
||||||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
|
||||||
}, 'Test frame policy on another cross origin iframe with allow = "' + policies[i].allow +
|
|
||||||
'" and allowfullscreen.');
|
|
||||||
test(function() {
|
|
||||||
test_frame_policy(
|
|
||||||
'fullscreen', undefined, true, policies[i].sameOriginTestExpect,
|
|
||||||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
|
||||||
}, 'Test frame policy on srcdoc iframe with allow = "' + policies[i].allow +
|
|
||||||
'" and allowfullscreen.');
|
|
||||||
test(function() {
|
|
||||||
test_frame_policy(
|
|
||||||
'fullscreen', same_origin_src, true, policies[i].sameOriginTestExpect,
|
|
||||||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
|
||||||
}, 'Test frame policy on srcdoc + same origin iframe with allow = "' + policies[i].allow +
|
|
||||||
'" and allowfullscreen.');
|
|
||||||
test(function() {
|
|
||||||
test_frame_policy(
|
|
||||||
'fullscreen', cross_origin_src, true, policies[i].sameOriginTestExpect,
|
|
||||||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
|
||||||
}, 'Test frame policy on srcdoc + cross origin iframe with allow = "' + policies[i].allow +
|
|
||||||
'" and allowfullscreen.');
|
|
||||||
test(function() {
|
|
||||||
test_frame_policy(
|
|
||||||
'fullscreen', cross_origin_src1, true, policies[i].sameOriginTestExpect,
|
|
||||||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
|
||||||
}, 'Test frame policy on srcdoc + another cross origin iframe with allow = "' + policies[i].allow +
|
|
||||||
'" and allowfullscreen.');
|
|
||||||
test(function() {
|
|
||||||
test_frame_policy(
|
|
||||||
'fullscreen', data_src, undefined, policies[i].dataOriginTestExpect,
|
|
||||||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true);
|
|
||||||
}, 'Test frame policy on data: URL cross origin iframe with allow = "' + policies[i].allow +
|
|
||||||
'" and allowfullscreen.');
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -22,8 +22,8 @@ var ctx = offscreenCanvas.getContext('2d');
|
||||||
|
|
||||||
offscreenCanvas.width = '';
|
offscreenCanvas.width = '';
|
||||||
offscreenCanvas.height = '';
|
offscreenCanvas.height = '';
|
||||||
_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
|
_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
|
||||||
_assertSame(offscreenCanvas.height, 50, "offscreenCanvas.height", "50");
|
_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
|
||||||
t.done();
|
t.done();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -18,8 +18,8 @@ var ctx = offscreenCanvas.getContext('2d');
|
||||||
|
|
||||||
offscreenCanvas.width = '';
|
offscreenCanvas.width = '';
|
||||||
offscreenCanvas.height = '';
|
offscreenCanvas.height = '';
|
||||||
_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
|
_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
|
||||||
_assertSame(offscreenCanvas.height, 50, "offscreenCanvas.height", "50");
|
_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
|
||||||
t.done();
|
t.done();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -22,8 +22,8 @@ var ctx = offscreenCanvas.getContext('2d');
|
||||||
|
|
||||||
offscreenCanvas.width = ' ';
|
offscreenCanvas.width = ' ';
|
||||||
offscreenCanvas.height = ' ';
|
offscreenCanvas.height = ' ';
|
||||||
_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
|
_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
|
||||||
_assertSame(offscreenCanvas.height, 50, "offscreenCanvas.height", "50");
|
_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
|
||||||
t.done();
|
t.done();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -18,8 +18,8 @@ var ctx = offscreenCanvas.getContext('2d');
|
||||||
|
|
||||||
offscreenCanvas.width = ' ';
|
offscreenCanvas.width = ' ';
|
||||||
offscreenCanvas.height = ' ';
|
offscreenCanvas.height = ' ';
|
||||||
_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
|
_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
|
||||||
_assertSame(offscreenCanvas.height, 50, "offscreenCanvas.height", "50");
|
_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
|
||||||
t.done();
|
t.done();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -9778,8 +9778,8 @@
|
||||||
- meta: |
|
- meta: |
|
||||||
cases = [
|
cases = [
|
||||||
("zero", "0", 0),
|
("zero", "0", 0),
|
||||||
("empty", "", None),
|
("empty", "", 0),
|
||||||
("onlyspace", " ", None),
|
("onlyspace", " ", 0),
|
||||||
("space", " 100", 100),
|
("space", " 100", 100),
|
||||||
("whitespace", "\t\f100", 100),
|
("whitespace", "\t\f100", 100),
|
||||||
("plus", "+100", 100),
|
("plus", "+100", 100),
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>focus(options) - preventScroll on textarea element</title>
|
||||||
|
<link rel="author" href="https://mozilla.org" title="Mozilla">
|
||||||
|
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1634153">
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
<div style="height: 200vh"></div>
|
||||||
|
<textarea>ABCD</textarea>
|
||||||
|
<input value="EFGH">
|
||||||
|
<button></button>
|
||||||
|
<div style="height: 200vh"></div>
|
||||||
|
<script>
|
||||||
|
promise_test(async function(t) {
|
||||||
|
await new Promise(resolve => window.addEventListener("load", resolve));
|
||||||
|
let elements = document.querySelectorAll("textarea, input, button");
|
||||||
|
assert_equals(elements.length, 3, `Precondition`);
|
||||||
|
for (let element of elements) {
|
||||||
|
let name = element.nodeName;
|
||||||
|
assert_equals(window.scrollY, 0, `${name}: Precondition`);
|
||||||
|
element.focus({ preventScroll: true });
|
||||||
|
assert_equals(window.scrollY, 0, `${name}: Should not have scrolled`);
|
||||||
|
assert_equals(document.activeElement, element, `${name}: Should have been focused`);
|
||||||
|
|
||||||
|
// Wait a couple event loop turns because the original bug was triggered off
|
||||||
|
// an async event.
|
||||||
|
await new Promise(resolve => t.step_timeout(resolve, 0));
|
||||||
|
await new Promise(resolve => t.step_timeout(resolve, 0));
|
||||||
|
assert_equals(window.scrollY, 0, `${name}: Should not have scrolled after a couple event loop ticks`);
|
||||||
|
assert_equals(document.activeElement, element, `${name}: Should remain focused`);
|
||||||
|
|
||||||
|
// Also wait for rendering, just out of paranoia.
|
||||||
|
await new Promise(resolve => requestAnimationFrame(resolve));
|
||||||
|
await new Promise(resolve => requestAnimationFrame(resolve));
|
||||||
|
|
||||||
|
assert_equals(window.scrollY, 0, `${name}: Should not have scrolled after rendering`);
|
||||||
|
assert_equals(document.activeElement, element, `${name}: Should remain focused after rendering`);
|
||||||
|
}
|
||||||
|
}, "preventScroll: true on a textarea element");
|
||||||
|
</script>
|
|
@ -1,4 +1,17 @@
|
||||||
[http2-context.sub.h2.any.sharedworker.html]
|
[http2-context.sub.h2.any.sharedworker.html]
|
||||||
bug: https://bugs.webkit.org/show_bug.cgi?id=149850
|
bug: https://bugs.webkit.org/show_bug.cgi?id=149850
|
||||||
expected:
|
expected:
|
||||||
if product == "safari" or product == "epiphany" or product == "webkit": ERROR
|
if product == "safari" or product == "epiphany" or product == "webkit" or python_version == 3: ERROR
|
||||||
|
|
||||||
|
[http2-context.sub.h2.any.serviceworker.html]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: ERROR
|
||||||
|
|
||||||
|
[http2-context.sub.h2.any.html]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: ERROR
|
||||||
|
|
||||||
|
[http2-context.sub.h2.any.worker.html]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: ERROR
|
||||||
|
|
||||||
|
|
|
@ -18,3 +18,28 @@
|
||||||
[HTTPS protocol, punycode subdomain #2]
|
[HTTPS protocol, punycode subdomain #2]
|
||||||
expected:
|
expected:
|
||||||
if product == "epiphany" or product == "webkit": FAIL
|
if product == "epiphany" or product == "webkit": FAIL
|
||||||
|
|
||||||
|
[H2 protocol, no subdomain]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: FAIL
|
||||||
|
|
||||||
|
[H2 protocol, www subdomain #1]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: FAIL
|
||||||
|
|
||||||
|
[H2 protocol, www subdomain #2]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: FAIL
|
||||||
|
|
||||||
|
[H2 protocol, www subdomain #3]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: FAIL
|
||||||
|
|
||||||
|
[H2 protocol, punycode subdomain #1]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: FAIL
|
||||||
|
|
||||||
|
[H2 protocol, punycode subdomain #2]
|
||||||
|
expected:
|
||||||
|
if python_version == 3: FAIL
|
||||||
|
|
||||||
|
|
|
@ -80,5 +80,8 @@ dictionary NDEFWriteOptions {
|
||||||
};
|
};
|
||||||
|
|
||||||
dictionary NDEFScanOptions {
|
dictionary NDEFScanOptions {
|
||||||
|
USVString id;
|
||||||
|
USVString recordType;
|
||||||
|
USVString mediaType;
|
||||||
AbortSignal? signal;
|
AbortSignal? signal;
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
spec: https://wicg.github.io/largest-contentful-paint/
|
||||||
|
suggested_reviewers:
|
||||||
|
- npm1
|
||||||
|
- yoavweiss
|
4
tests/wpt/web-platform-tests/layout-instability/META.yml
Normal file
4
tests/wpt/web-platform-tests/layout-instability/META.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
spec: https://wicg.github.io/layout-instability/
|
||||||
|
suggested_reviewers:
|
||||||
|
- skobes
|
||||||
|
- npm1
|
|
@ -0,0 +1,41 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>ScrollTimeline snapshotting</title>
|
||||||
|
<link rel="help" href="https://wicg.github.io/scroll-animations/#avoiding-cycles">
|
||||||
|
<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="/resources/testdriver-actions.js"></script>
|
||||||
|
<script src="/web-animations/testcommon.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
height: 800px;
|
||||||
|
width: 800px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="log"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const scroller = document.scrollingElement;
|
||||||
|
const maxScroll = scroller.scrollHeight - scroller.clientHeight;
|
||||||
|
const timeline = new ScrollTimeline(
|
||||||
|
{scrollSource: scroller, timeRange: maxScroll});
|
||||||
|
scroller.scrollTo(0, 0);
|
||||||
|
assert_equals(scroller.scrollTop, 0, "verify test pre-condition");
|
||||||
|
|
||||||
|
scroller.scrollBy({top:100, behavior:'smooth'})
|
||||||
|
// Wait for the scroll to change.
|
||||||
|
const startScroll = scroller.scrollTop;
|
||||||
|
do {
|
||||||
|
await waitForNextFrame();
|
||||||
|
} while(scroller.scrollTop == startScroll);
|
||||||
|
assert_times_equal(timeline.currentTime, scroller.scrollTop,
|
||||||
|
'Scroll timeline current time corresponds to the scroll position.');
|
||||||
|
}, 'ScrollTimeline current time is updated after programmatic animated scroll.');
|
||||||
|
|
||||||
|
</script>
|
|
@ -6,19 +6,24 @@ WPT_ROOT=$SCRIPT_DIR/../..
|
||||||
cd $WPT_ROOT
|
cd $WPT_ROOT
|
||||||
|
|
||||||
test_infrastructure() {
|
test_infrastructure() {
|
||||||
TERM=dumb ./wpt run --log-mach - --yes --manifest ~/meta/MANIFEST.json --metadata infrastructure/metadata/ --install-fonts $1 $PRODUCT infrastructure/
|
PY3_FLAG="$2"
|
||||||
|
TERM=dumb ./wpt $PY3_FLAG run --log-mach - --yes --manifest ~/meta/MANIFEST.json --metadata infrastructure/metadata/ --install-fonts $1 $PRODUCT infrastructure/
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
PRODUCTS=( "firefox" "chrome" )
|
if [[ $# -eq 1 && "$1" = "--py3" ]]; then
|
||||||
|
PRODUCTS=( "chrome" )
|
||||||
|
else
|
||||||
|
PRODUCTS=( "firefox" "chrome" )
|
||||||
|
fi
|
||||||
./wpt manifest --rebuild -p ~/meta/MANIFEST.json
|
./wpt manifest --rebuild -p ~/meta/MANIFEST.json
|
||||||
for PRODUCT in "${PRODUCTS[@]}"; do
|
for PRODUCT in "${PRODUCTS[@]}"; do
|
||||||
if [[ "$PRODUCT" == "chrome" ]]; then
|
if [[ "$PRODUCT" == "chrome" ]]; then
|
||||||
test_infrastructure "--binary=$(which google-chrome-unstable) --channel dev"
|
test_infrastructure "--binary=$(which google-chrome-unstable) --channel dev" "$1"
|
||||||
else
|
else
|
||||||
test_infrastructure "--binary=~/build/firefox/firefox"
|
test_infrastructure "--binary=~/build/firefox/firefox"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
main
|
main $1
|
||||||
|
|
|
@ -454,3 +454,28 @@ tasks:
|
||||||
schedule-if:
|
schedule-if:
|
||||||
run-job:
|
run-job:
|
||||||
- wptrunner_infrastructure
|
- wptrunner_infrastructure
|
||||||
|
|
||||||
|
- infrastructure/ tests (Python 3):
|
||||||
|
description: >-
|
||||||
|
Smoketests for wptrunner
|
||||||
|
vars:
|
||||||
|
channel: nightly
|
||||||
|
use:
|
||||||
|
- wpt-base
|
||||||
|
- trigger-pr
|
||||||
|
command: ./tools/ci/ci_wptrunner_infrastructure.sh --py3
|
||||||
|
install:
|
||||||
|
- python3-pip
|
||||||
|
- libnss3-tools
|
||||||
|
- libappindicator1
|
||||||
|
- fonts-liberation
|
||||||
|
options:
|
||||||
|
oom-killer: true
|
||||||
|
browser:
|
||||||
|
- chrome
|
||||||
|
channel: experimental
|
||||||
|
xvfb: true
|
||||||
|
hosts: false
|
||||||
|
schedule-if:
|
||||||
|
run-job:
|
||||||
|
- wptrunner_infrastructure
|
||||||
|
|
|
@ -132,7 +132,8 @@ def test_verify_payload():
|
||||||
'tools/wpt/ tests (Python 3.6)',
|
'tools/wpt/ tests (Python 3.6)',
|
||||||
'tools/wpt/ tests (Python 3.8)',
|
'tools/wpt/ tests (Python 3.8)',
|
||||||
'resources/ tests',
|
'resources/ tests',
|
||||||
'infrastructure/ tests'}),
|
'infrastructure/ tests',
|
||||||
|
'infrastructure/ tests (Python 3)'}),
|
||||||
# More tests are affected in the actual PR but it shouldn't affect the scheduled tasks
|
# More tests are affected in the actual PR but it shouldn't affect the scheduled tasks
|
||||||
("pr_event_tests_affected.json", True, {"layout-instability/clip-negative-bottom-margin.html",
|
("pr_event_tests_affected.json", True, {"layout-instability/clip-negative-bottom-margin.html",
|
||||||
"layout-instability/composited-element-movement.html"},
|
"layout-instability/composited-element-movement.html"},
|
||||||
|
|
|
@ -41,7 +41,12 @@ if MYPY:
|
||||||
from typing import Type
|
from typing import Type
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
Whitelist = Dict[Text, Dict[Text, Set[Optional[int]]]]
|
# The Ignorelist is a two level dictionary. The top level is indexed by
|
||||||
|
# error names (e.g. 'TRAILING WHITESPACE'). Each of those then has a map of
|
||||||
|
# file patterns (e.g. 'foo/*') to a set of specific line numbers for the
|
||||||
|
# exception. The line numbers are optional; if missing the entire file
|
||||||
|
# ignores the error.
|
||||||
|
Ignorelist = Dict[Text, Dict[Text, Set[Optional[int]]]]
|
||||||
|
|
||||||
|
|
||||||
logger = None # type: Optional[logging.Logger]
|
logger = None # type: Optional[logging.Logger]
|
||||||
|
@ -75,12 +80,12 @@ ERROR_MSG = """You must fix all errors; for details on how to fix them, see
|
||||||
https://web-platform-tests.org/writing-tests/lint-tool.html
|
https://web-platform-tests.org/writing-tests/lint-tool.html
|
||||||
|
|
||||||
However, instead of fixing a particular error, it's sometimes
|
However, instead of fixing a particular error, it's sometimes
|
||||||
OK to add a line to the lint.whitelist file in the root of the
|
OK to add a line to the lint.ignore file in the root of the
|
||||||
web-platform-tests directory to make the lint tool ignore it.
|
web-platform-tests directory to make the lint tool ignore it.
|
||||||
|
|
||||||
For example, to make the lint tool ignore all '%s'
|
For example, to make the lint tool ignore all '%s'
|
||||||
errors in the %s file,
|
errors in the %s file,
|
||||||
you could add the following line to the lint.whitelist file.
|
you could add the following line to the lint.ignore file.
|
||||||
|
|
||||||
%s: %s"""
|
%s: %s"""
|
||||||
|
|
||||||
|
@ -318,14 +323,17 @@ def check_css_globally_unique(repo_root, paths):
|
||||||
return errors
|
return errors
|
||||||
|
|
||||||
|
|
||||||
def parse_whitelist(f):
|
def parse_ignorelist(f):
|
||||||
# type: (IO[bytes]) -> Tuple[Whitelist, Set[Text]]
|
# type: (IO[bytes]) -> Tuple[Ignorelist, Set[Text]]
|
||||||
"""
|
"""
|
||||||
Parse the whitelist file given by `f`, and return the parsed structure.
|
Parse the ignorelist file given by `f`, and return the parsed structure.
|
||||||
|
|
||||||
|
:returns: a tuple of an Ignorelist and a set of files that are completely
|
||||||
|
skipped by the linter (i.e. have a '*' entry).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
data = defaultdict(lambda:defaultdict(set)) # type: Whitelist
|
data = defaultdict(lambda:defaultdict(set)) # type: Ignorelist
|
||||||
ignored_files = set() # type: Set[Text]
|
skipped_files = set() # type: Set[Text]
|
||||||
|
|
||||||
for line in f:
|
for line in f:
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
|
@ -344,37 +352,37 @@ def parse_whitelist(f):
|
||||||
file_match = os.path.normcase(file_match)
|
file_match = os.path.normcase(file_match)
|
||||||
|
|
||||||
if "*" in error_types:
|
if "*" in error_types:
|
||||||
ignored_files.add(file_match)
|
skipped_files.add(file_match)
|
||||||
else:
|
else:
|
||||||
for error_type in error_types:
|
for error_type in error_types:
|
||||||
data[error_type][file_match].add(line_number)
|
data[error_type][file_match].add(line_number)
|
||||||
|
|
||||||
return data, ignored_files
|
return data, skipped_files
|
||||||
|
|
||||||
|
|
||||||
def filter_whitelist_errors(data, errors):
|
def filter_ignorelist_errors(data, errors):
|
||||||
# type: (Whitelist, Sequence[rules.Error]) -> List[rules.Error]
|
# type: (Ignorelist, Sequence[rules.Error]) -> List[rules.Error]
|
||||||
"""
|
"""
|
||||||
Filter out those errors that are whitelisted in `data`.
|
Filter out those errors that are ignored in `data`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not errors:
|
if not errors:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
whitelisted = [False for item in range(len(errors))]
|
skipped = [False for item in range(len(errors))]
|
||||||
|
|
||||||
for i, (error_type, msg, path, line) in enumerate(errors):
|
for i, (error_type, msg, path, line) in enumerate(errors):
|
||||||
normpath = os.path.normcase(path)
|
normpath = os.path.normcase(path)
|
||||||
# Allow whitelisting all lint errors except the IGNORED PATH lint,
|
# Allow skipping all lint errors except the IGNORED PATH lint,
|
||||||
# which explains how to fix it correctly and shouldn't be ignored.
|
# which explains how to fix it correctly and shouldn't be skipped.
|
||||||
if error_type in data and error_type != "IGNORED PATH":
|
if error_type in data and error_type != "IGNORED PATH":
|
||||||
wl_files = data[error_type]
|
wl_files = data[error_type]
|
||||||
for file_match, allowed_lines in iteritems(wl_files):
|
for file_match, allowed_lines in iteritems(wl_files):
|
||||||
if None in allowed_lines or line in allowed_lines:
|
if None in allowed_lines or line in allowed_lines:
|
||||||
if fnmatch.fnmatchcase(normpath, file_match):
|
if fnmatch.fnmatchcase(normpath, file_match):
|
||||||
whitelisted[i] = True
|
skipped[i] = True
|
||||||
|
|
||||||
return [item for i, item in enumerate(errors) if not whitelisted[i]]
|
return [item for i, item in enumerate(errors) if not skipped[i]]
|
||||||
|
|
||||||
|
|
||||||
regexps = [item() for item in # type: ignore
|
regexps = [item() for item in # type: ignore
|
||||||
|
@ -805,7 +813,7 @@ def lint_paths(kwargs, wpt_root):
|
||||||
force_all = False
|
force_all = False
|
||||||
for path in changed_paths:
|
for path in changed_paths:
|
||||||
path = path.replace(os.path.sep, "/")
|
path = path.replace(os.path.sep, "/")
|
||||||
if path == "lint.whitelist" or path.startswith("tools/lint/"):
|
if path == "lint.ignore" or path.startswith("tools/lint/"):
|
||||||
force_all = True
|
force_all = True
|
||||||
break
|
break
|
||||||
paths = (list(changed_paths) if not force_all # type: ignore
|
paths = (list(changed_paths) if not force_all # type: ignore
|
||||||
|
@ -859,11 +867,11 @@ def lint(repo_root, paths, output_format, ignore_glob=str()):
|
||||||
error_count = defaultdict(int) # type: Dict[Text, int]
|
error_count = defaultdict(int) # type: Dict[Text, int]
|
||||||
last = None
|
last = None
|
||||||
|
|
||||||
with open(os.path.join(repo_root, "lint.whitelist")) as f:
|
with open(os.path.join(repo_root, "lint.ignore")) as f:
|
||||||
whitelist, ignored_files = parse_whitelist(f)
|
ignorelist, skipped_files = parse_ignorelist(f)
|
||||||
|
|
||||||
if ignore_glob:
|
if ignore_glob:
|
||||||
ignored_files.add(ignore_glob)
|
skipped_files.add(ignore_glob)
|
||||||
|
|
||||||
output_errors = {"json": output_errors_json,
|
output_errors = {"json": output_errors_json,
|
||||||
"markdown": output_errors_markdown,
|
"markdown": output_errors_markdown,
|
||||||
|
@ -879,7 +887,7 @@ def lint(repo_root, paths, output_format, ignore_glob=str()):
|
||||||
a tuple of the error type and the path otherwise
|
a tuple of the error type and the path otherwise
|
||||||
"""
|
"""
|
||||||
|
|
||||||
errors = filter_whitelist_errors(whitelist, errors)
|
errors = filter_ignorelist_errors(ignorelist, errors)
|
||||||
|
|
||||||
if not errors:
|
if not errors:
|
||||||
return None
|
return None
|
||||||
|
@ -896,7 +904,7 @@ def lint(repo_root, paths, output_format, ignore_glob=str()):
|
||||||
paths.remove(path)
|
paths.remove(path)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if any(fnmatch.fnmatch(path, file_match) for file_match in ignored_files):
|
if any(fnmatch.fnmatch(path, file_match) for file_match in skipped_files):
|
||||||
paths.remove(path)
|
paths.remove(path)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import six
|
||||||
|
|
||||||
from ...localpaths import repo_root
|
from ...localpaths import repo_root
|
||||||
from .. import lint as lint_mod
|
from .. import lint as lint_mod
|
||||||
from ..lint import filter_whitelist_errors, parse_whitelist, lint, create_parser
|
from ..lint import filter_ignorelist_errors, parse_ignorelist, lint, create_parser
|
||||||
|
|
||||||
_dummy_repo = os.path.join(os.path.dirname(__file__), "dummy")
|
_dummy_repo = os.path.join(os.path.dirname(__file__), "dummy")
|
||||||
|
|
||||||
|
@ -17,8 +17,8 @@ def _mock_lint(name, **kwargs):
|
||||||
return mock.patch(lint_mod.__name__ + "." + name, wraps=wrapped, **kwargs)
|
return mock.patch(lint_mod.__name__ + "." + name, wraps=wrapped, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def test_filter_whitelist_errors():
|
def test_filter_ignorelist_errors():
|
||||||
whitelist = {
|
ignorelist = {
|
||||||
'CONSOLE': {
|
'CONSOLE': {
|
||||||
'svg/*': {12}
|
'svg/*': {12}
|
||||||
},
|
},
|
||||||
|
@ -26,34 +26,34 @@ def test_filter_whitelist_errors():
|
||||||
'svg/*': {None}
|
'svg/*': {None}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# parse_whitelist normalises the case/path of the match string so need to do the same
|
# parse_ignorelist normalises the case/path of the match string so need to do the same
|
||||||
whitelist = {e: {os.path.normcase(k): v for k, v in p.items()}
|
ignorelist = {e: {os.path.normcase(k): v for k, v in p.items()}
|
||||||
for e, p in whitelist.items()}
|
for e, p in ignorelist.items()}
|
||||||
# paths passed into filter_whitelist_errors are always Unix style
|
# paths passed into filter_ignorelist_errors are always Unix style
|
||||||
filteredfile = 'svg/test.html'
|
filteredfile = 'svg/test.html'
|
||||||
unfilteredfile = 'html/test.html'
|
unfilteredfile = 'html/test.html'
|
||||||
# Tests for passing no errors
|
# Tests for passing no errors
|
||||||
filtered = filter_whitelist_errors(whitelist, [])
|
filtered = filter_ignorelist_errors(ignorelist, [])
|
||||||
assert filtered == []
|
assert filtered == []
|
||||||
filtered = filter_whitelist_errors(whitelist, [])
|
filtered = filter_ignorelist_errors(ignorelist, [])
|
||||||
assert filtered == []
|
assert filtered == []
|
||||||
# Tests for filtering on file and line number
|
# Tests for filtering on file and line number
|
||||||
filtered = filter_whitelist_errors(whitelist, [['CONSOLE', '', filteredfile, 12]])
|
filtered = filter_ignorelist_errors(ignorelist, [['CONSOLE', '', filteredfile, 12]])
|
||||||
assert filtered == []
|
assert filtered == []
|
||||||
filtered = filter_whitelist_errors(whitelist, [['CONSOLE', '', unfilteredfile, 12]])
|
filtered = filter_ignorelist_errors(ignorelist, [['CONSOLE', '', unfilteredfile, 12]])
|
||||||
assert filtered == [['CONSOLE', '', unfilteredfile, 12]]
|
assert filtered == [['CONSOLE', '', unfilteredfile, 12]]
|
||||||
filtered = filter_whitelist_errors(whitelist, [['CONSOLE', '', filteredfile, 11]])
|
filtered = filter_ignorelist_errors(ignorelist, [['CONSOLE', '', filteredfile, 11]])
|
||||||
assert filtered == [['CONSOLE', '', filteredfile, 11]]
|
assert filtered == [['CONSOLE', '', filteredfile, 11]]
|
||||||
# Tests for filtering on just file
|
# Tests for filtering on just file
|
||||||
filtered = filter_whitelist_errors(whitelist, [['INDENT TABS', '', filteredfile, 12]])
|
filtered = filter_ignorelist_errors(ignorelist, [['INDENT TABS', '', filteredfile, 12]])
|
||||||
assert filtered == []
|
assert filtered == []
|
||||||
filtered = filter_whitelist_errors(whitelist, [['INDENT TABS', '', filteredfile, 11]])
|
filtered = filter_ignorelist_errors(ignorelist, [['INDENT TABS', '', filteredfile, 11]])
|
||||||
assert filtered == []
|
assert filtered == []
|
||||||
filtered = filter_whitelist_errors(whitelist, [['INDENT TABS', '', unfilteredfile, 11]])
|
filtered = filter_ignorelist_errors(ignorelist, [['INDENT TABS', '', unfilteredfile, 11]])
|
||||||
assert filtered == [['INDENT TABS', '', unfilteredfile, 11]]
|
assert filtered == [['INDENT TABS', '', unfilteredfile, 11]]
|
||||||
|
|
||||||
|
|
||||||
def test_parse_whitelist():
|
def test_parse_ignorelist():
|
||||||
input_buffer = six.StringIO("""
|
input_buffer = six.StringIO("""
|
||||||
# Comment
|
# Comment
|
||||||
CR AT EOL: svg/import/*
|
CR AT EOL: svg/import/*
|
||||||
|
@ -100,10 +100,10 @@ CR AT EOL, INDENT TABS: html/test2.js: 42
|
||||||
}
|
}
|
||||||
expected_data = {e: {os.path.normcase(k): v for k, v in p.items()}
|
expected_data = {e: {os.path.normcase(k): v for k, v in p.items()}
|
||||||
for e, p in expected_data.items()}
|
for e, p in expected_data.items()}
|
||||||
expected_ignored = {os.path.normcase(x) for x in {"*.pdf", "resources/*", "*.png"}}
|
expected_skipped = {os.path.normcase(x) for x in {"*.pdf", "resources/*", "*.png"}}
|
||||||
data, ignored = parse_whitelist(input_buffer)
|
data, skipped_files = parse_ignorelist(input_buffer)
|
||||||
assert data == expected_data
|
assert data == expected_data
|
||||||
assert ignored == expected_ignored
|
assert skipped_files == expected_skipped
|
||||||
|
|
||||||
|
|
||||||
def test_lint_no_files(caplog):
|
def test_lint_no_files(caplog):
|
||||||
|
|
|
@ -272,9 +272,6 @@ class FirefoxInstanceManager(object):
|
||||||
if self.enable_webrender:
|
if self.enable_webrender:
|
||||||
env["MOZ_WEBRENDER"] = "1"
|
env["MOZ_WEBRENDER"] = "1"
|
||||||
env["MOZ_ACCELERATED"] = "1"
|
env["MOZ_ACCELERATED"] = "1"
|
||||||
# Set MOZ_X_SYNC and GDK_SYNCHRONIZE for investigation; bug 1625250.
|
|
||||||
env["MOZ_X_SYNC"] = "1"
|
|
||||||
env["GDK_SYNCHRONIZE"] = "1"
|
|
||||||
else:
|
else:
|
||||||
env["MOZ_WEBRENDER"] = "0"
|
env["MOZ_WEBRENDER"] = "0"
|
||||||
|
|
||||||
|
@ -428,8 +425,11 @@ class OutputHandler(object):
|
||||||
|
|
||||||
self.symbols_path = symbols_path
|
self.symbols_path = symbols_path
|
||||||
if stackfix_dir:
|
if stackfix_dir:
|
||||||
|
# We hide errors because they cause disconcerting `CRITICAL`
|
||||||
|
# warnings in web platform test output.
|
||||||
self.stack_fixer = get_stack_fixer_function(stackfix_dir,
|
self.stack_fixer = get_stack_fixer_function(stackfix_dir,
|
||||||
self.symbols_path)
|
self.symbols_path,
|
||||||
|
hideErrors=True)
|
||||||
else:
|
else:
|
||||||
self.stack_fixer = None
|
self.stack_fixer = None
|
||||||
self.asan = asan
|
self.asan = asan
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
from six.moves.urllib.parse import urljoin
|
from six.moves.urllib.parse import urljoin
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from six import iteritems, string_types
|
from six import iteritems, string_types
|
||||||
|
@ -102,6 +103,7 @@ class RunInfo(dict):
|
||||||
if rev:
|
if rev:
|
||||||
self["revision"] = rev
|
self["revision"] = rev
|
||||||
|
|
||||||
|
self["python_version"] = sys.version_info.major
|
||||||
self["product"] = product
|
self["product"] = product
|
||||||
if debug is not None:
|
if debug is not None:
|
||||||
self["debug"] = debug
|
self["debug"] = debug
|
||||||
|
|
|
@ -307,4 +307,22 @@
|
||||||
assert_equals(pc1.pendingRemoteDescription, null);
|
assert_equals(pc1.pendingRemoteDescription, null);
|
||||||
await promise_rejects_dom(t, 'RTCError', p);
|
await promise_rejects_dom(t, 'RTCError', p);
|
||||||
}, 'setRemoteDescription(invalidOffer) from have-local-offer does not undo rollback');
|
}, 'setRemoteDescription(invalidOffer) from have-local-offer does not undo rollback');
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const pc1 = new RTCPeerConnection();
|
||||||
|
t.add_cleanup(() => pc1.close());
|
||||||
|
const pc2 = new RTCPeerConnection();
|
||||||
|
t.add_cleanup(() => pc2.close());
|
||||||
|
pc1.addTransceiver('video');
|
||||||
|
const offer = await pc1.createOffer();
|
||||||
|
await pc2.setRemoteDescription(offer);
|
||||||
|
assert_equals(pc2.getTransceivers().length, 1);
|
||||||
|
await pc2.setRemoteDescription(offer);
|
||||||
|
assert_equals(pc2.getTransceivers().length, 1);
|
||||||
|
await pc1.setLocalDescription(offer);
|
||||||
|
const answer = await pc2.createAnswer();
|
||||||
|
await pc2.setLocalDescription(answer);
|
||||||
|
await pc1.setRemoteDescription(answer);
|
||||||
|
}, 'repeated sRD(offer) works');
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -282,7 +282,7 @@
|
||||||
const offer = await pc.createOffer();
|
const offer = await pc.createOffer();
|
||||||
await pc.setLocalDescription(offer);
|
await pc.setLocalDescription(offer);
|
||||||
assert_not_equals(pc.getTransceivers()[0].sender.transport, null);
|
assert_not_equals(pc.getTransceivers()[0].sender.transport, null);
|
||||||
await pc.setRemoteDescription({type: "rollback"});
|
await pc.setLocalDescription({type: "rollback"});
|
||||||
assert_equals(pc.getTransceivers().length, 1);
|
assert_equals(pc.getTransceivers().length, 1);
|
||||||
assert_equals(pc.getTransceivers()[0].mid, null)
|
assert_equals(pc.getTransceivers()[0].mid, null)
|
||||||
assert_equals(pc.getTransceivers()[0].sender.transport, null);
|
assert_equals(pc.getTransceivers()[0].sender.transport, null);
|
||||||
|
@ -292,6 +292,35 @@
|
||||||
assert_array_equals(states, ['have-local-offer', 'stable', 'have-local-offer']);
|
assert_array_equals(states, ['have-local-offer', 'stable', 'have-local-offer']);
|
||||||
}, "explicit rollback of local offer should remove transceivers and transport");
|
}, "explicit rollback of local offer should remove transceivers and transport");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const pc1 = new RTCPeerConnection();
|
||||||
|
t.add_cleanup(() => pc1.close());
|
||||||
|
const pc2 = new RTCPeerConnection();
|
||||||
|
t.add_cleanup(() => pc2.close());
|
||||||
|
|
||||||
|
const states = [];
|
||||||
|
const signalingstatechangeResolver = new Resolver();
|
||||||
|
pc1.onsignalingstatechange = () => {
|
||||||
|
states.push(pc1.signalingState);
|
||||||
|
signalingstatechangeResolver.resolve();
|
||||||
|
};
|
||||||
|
const stream1 = await getNoiseStream({audio: true});
|
||||||
|
t.add_cleanup(() => stream1.getTracks().forEach(track => track.stop()));
|
||||||
|
pc1.addTransceiver(stream1.getTracks()[0], stream1);
|
||||||
|
|
||||||
|
const stream2 = await getNoiseStream({audio: true});
|
||||||
|
t.add_cleanup(() => stream2.getTracks().forEach(track => track.stop()));
|
||||||
|
pc2.addTransceiver(stream2.getTracks()[0], stream2);
|
||||||
|
|
||||||
|
await pc1.setLocalDescription(await pc1.createOffer());
|
||||||
|
pc1.onnegotiationneeded = t.step_func(() => assert_true(false, "There should be no negotiationneeded event right now"));
|
||||||
|
await pc1.setRemoteDescription(await pc2.createOffer());
|
||||||
|
await pc1.setLocalDescription(await pc1.createAnswer());
|
||||||
|
await signalingstatechangeResolver.promise;
|
||||||
|
assert_array_equals(states, ['have-local-offer', 'stable', 'have-remote-offer', 'stable']);
|
||||||
|
await new Promise(r => pc1.onnegotiationneeded = r);
|
||||||
|
}, "when using addTransceiver, implicit rollback of a local offer should visit stable state, but not fire negotiationneeded until we settle in stable");
|
||||||
|
|
||||||
promise_test(async t => {
|
promise_test(async t => {
|
||||||
const pc1 = new RTCPeerConnection();
|
const pc1 = new RTCPeerConnection();
|
||||||
t.add_cleanup(() => pc1.close());
|
t.add_cleanup(() => pc1.close());
|
||||||
|
@ -308,24 +337,17 @@
|
||||||
t.add_cleanup(() => stream1.getTracks().forEach(track => track.stop()));
|
t.add_cleanup(() => stream1.getTracks().forEach(track => track.stop()));
|
||||||
pc1.addTrack(stream1.getTracks()[0], stream1);
|
pc1.addTrack(stream1.getTracks()[0], stream1);
|
||||||
|
|
||||||
const stream2 = await getNoiseStream({video: true});
|
const stream2 = await getNoiseStream({audio: true});
|
||||||
t.add_cleanup(() => stream2.getTracks().forEach(track => track.stop()));
|
t.add_cleanup(() => stream2.getTracks().forEach(track => track.stop()));
|
||||||
pc2.addTrack(stream2.getTracks()[0], stream2);
|
pc2.addTrack(stream2.getTracks()[0], stream2);
|
||||||
|
|
||||||
await pc1.setLocalDescription(await pc1.createOffer());
|
await pc1.setLocalDescription(await pc1.createOffer());
|
||||||
var onnegotiationneededCount = 0;
|
pc1.onnegotiationneeded = t.step_func(() => assert_true(false, "There should be no negotiationneeded event in this test"));
|
||||||
const negotiationneededResolver = new Resolver();
|
|
||||||
pc1.onnegotiationneeded = () => {
|
|
||||||
onnegotiationneededCount += 1;
|
|
||||||
negotiationneededResolver.resolve();
|
|
||||||
};
|
|
||||||
await pc1.setRemoteDescription(await pc2.createOffer());
|
await pc1.setRemoteDescription(await pc2.createOffer());
|
||||||
await pc1.setLocalDescription(await pc1.createAnswer());
|
await pc1.setLocalDescription(await pc1.createAnswer());
|
||||||
await negotiationneededResolver.promise;
|
|
||||||
assert_equals(onnegotiationneededCount, 1);
|
|
||||||
await signalingstatechangeResolver.promise;
|
|
||||||
assert_array_equals(states, ['have-local-offer', 'stable', 'have-remote-offer', 'stable']);
|
assert_array_equals(states, ['have-local-offer', 'stable', 'have-remote-offer', 'stable']);
|
||||||
}, "implicit rollback of a local offer should visit stable state and fire negotiationneeded");
|
await new Promise(r => t.step_timeout(r, 0));
|
||||||
|
}, "when using addTrack, implicit rollback of a local offer should visit stable state, but not fire negotiationneeded");
|
||||||
|
|
||||||
promise_test(async t => {
|
promise_test(async t => {
|
||||||
const pc1 = new RTCPeerConnection();
|
const pc1 = new RTCPeerConnection();
|
||||||
|
@ -385,7 +407,7 @@
|
||||||
await pc2.setLocalDescription(await pc2.createOffer());
|
await pc2.setLocalDescription(await pc2.createOffer());
|
||||||
assert_equals(pc2.getTransceivers().length, 2);
|
assert_equals(pc2.getTransceivers().length, 2);
|
||||||
assert_not_equals(pc2.getTransceivers()[1].sender.transport, null);
|
assert_not_equals(pc2.getTransceivers()[1].sender.transport, null);
|
||||||
await pc2.setRemoteDescription({type: "rollback"});
|
await pc2.setLocalDescription({type: "rollback"});
|
||||||
assert_equals(pc2.getTransceivers().length, 2);
|
assert_equals(pc2.getTransceivers().length, 2);
|
||||||
// Rollback didn't touch audio transceiver and transport is intact.
|
// Rollback didn't touch audio transceiver and transport is intact.
|
||||||
assert_not_equals(pc2.getTransceivers()[0].sender.transport, null);
|
assert_not_equals(pc2.getTransceivers()[0].sender.transport, null);
|
||||||
|
@ -423,7 +445,7 @@
|
||||||
assert_equals(pc2.getTransceivers()[0].direction, "sendrecv");
|
assert_equals(pc2.getTransceivers()[0].direction, "sendrecv");
|
||||||
await pc2.setLocalDescription(await pc2.createOffer());
|
await pc2.setLocalDescription(await pc2.createOffer());
|
||||||
assert_equals(pc2.getTransceivers()[0].direction, "sendrecv");
|
assert_equals(pc2.getTransceivers()[0].direction, "sendrecv");
|
||||||
await pc2.setRemoteDescription({type: "rollback"});
|
await pc2.setLocalDescription({type: "rollback"});
|
||||||
assert_equals(pc2.getTransceivers().length, 1);
|
assert_equals(pc2.getTransceivers().length, 1);
|
||||||
// setLocalDescription didn't change direction. So direction remains "sendrecv"
|
// setLocalDescription didn't change direction. So direction remains "sendrecv"
|
||||||
assert_equals(pc2.getTransceivers()[0].direction, "sendrecv");
|
assert_equals(pc2.getTransceivers()[0].direction, "sendrecv");
|
||||||
|
|
|
@ -137,7 +137,7 @@ let testInput = function(overlayElement, session, fakeDeviceController, t) {
|
||||||
session.requestReferenceSpace('viewer').then(function(viewerSpace) {
|
session.requestReferenceSpace('viewer').then(function(viewerSpace) {
|
||||||
// Press the primary input button and then release it a short time later.
|
// Press the primary input button and then release it a short time later.
|
||||||
debug('got viewerSpace');
|
debug('got viewerSpace');
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
requestSkipAnimationFrame(session, (time, xrFrame) => {
|
||||||
debug('got rAF 1');
|
debug('got rAF 1');
|
||||||
input_source.setOverlayPointerPosition(inner_a.offsetLeft + 1,
|
input_source.setOverlayPointerPosition(inner_a.offsetLeft + 1,
|
||||||
inner_a.offsetTop + 1);
|
inner_a.offsetTop + 1);
|
||||||
|
@ -202,7 +202,7 @@ let testCrossOriginContent = function(overlayElement, session, fakeDeviceControl
|
||||||
fakeDeviceController.simulateInputSourceConnection(SCREEN_CONTROLLER);
|
fakeDeviceController.simulateInputSourceConnection(SCREEN_CONTROLLER);
|
||||||
session.requestReferenceSpace('viewer').then(function(viewerSpace) {
|
session.requestReferenceSpace('viewer').then(function(viewerSpace) {
|
||||||
// Press the primary input button and then release it a short time later.
|
// Press the primary input button and then release it a short time later.
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
requestSkipAnimationFrame(session, (time, xrFrame) => {
|
||||||
debug('got rAF 1');
|
debug('got rAF 1');
|
||||||
input_source.setOverlayPointerPosition(iframe.offsetLeft + 1,
|
input_source.setOverlayPointerPosition(iframe.offsetLeft + 1,
|
||||||
iframe.offsetTop + 1);
|
iframe.offsetTop + 1);
|
||||||
|
|
|
@ -101,7 +101,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
||||||
|
|
||||||
// Make our input source disappear after one frame, and wait an additional
|
// Make our input source disappear after one frame, and wait an additional
|
||||||
// frame for that disappearance to propogate.
|
// frame for that disappearance to propogate.
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
requestSkipAnimationFrame(session, (time, xrFrame) => {
|
||||||
input_source.disconnect();
|
input_source.disconnect();
|
||||||
session.requestAnimationFrame((time, xrFrame) => {});
|
session.requestAnimationFrame((time, xrFrame) => {});
|
||||||
});
|
});
|
||||||
|
|
|
@ -40,7 +40,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
||||||
fakeDeviceController.simulateResetPose();
|
fakeDeviceController.simulateResetPose();
|
||||||
|
|
||||||
// The triggered resetPose event should arrive after the next Animation Frame
|
// The triggered resetPose event should arrive after the next Animation Frame
|
||||||
session.requestAnimationFrame(() => {});
|
requestSkipAnimationFrame(session, () => {});
|
||||||
|
|
||||||
return resetPromise;
|
return resetPromise;
|
||||||
};
|
};
|
||||||
|
|
|
@ -92,7 +92,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
||||||
currentReferenceSpace = referenceSpace;
|
currentReferenceSpace = referenceSpace;
|
||||||
|
|
||||||
// Press the primary input button and then release it a short time later.
|
// Press the primary input button and then release it a short time later.
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
requestSkipAnimationFrame(session, (time, xrFrame) => {
|
||||||
input_source.startSelection();
|
input_source.startSelection();
|
||||||
|
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
session.requestAnimationFrame((time, xrFrame) => {
|
||||||
|
|
|
@ -51,7 +51,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
||||||
let input_source = fakeDeviceController.simulateInputSourceConnection(VALID_CONTROLLER);
|
let input_source = fakeDeviceController.simulateInputSourceConnection(VALID_CONTROLLER);
|
||||||
|
|
||||||
// Press the primary input button and then release it a short time later.
|
// Press the primary input button and then release it a short time later.
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
requestSkipAnimationFrame(session, (time, xrFrame) => {
|
||||||
input_source.simulateSelect();
|
input_source.simulateSelect();
|
||||||
|
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
session.requestAnimationFrame((time, xrFrame) => {
|
||||||
|
|
|
@ -114,7 +114,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
||||||
currentReferenceSpace = referenceSpace;
|
currentReferenceSpace = referenceSpace;
|
||||||
|
|
||||||
//Simulate a grip starting then release it a short time later.
|
//Simulate a grip starting then release it a short time later.
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
requestSkipAnimationFrame(session, (time, xrFrame) => {
|
||||||
input_source.updateButtonState(pressed_grip_button);
|
input_source.updateButtonState(pressed_grip_button);
|
||||||
|
|
||||||
session.requestAnimationFrame((time, xrFrame) => {
|
session.requestAnimationFrame((time, xrFrame) => {
|
||||||
|
|
|
@ -132,7 +132,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
||||||
// 5. Waits for all of the input events to finish propagating, then ends the
|
// 5. Waits for all of the input events to finish propagating, then ends the
|
||||||
// session, at which point the controller should be disconnected.
|
// session, at which point the controller should be disconnected.
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
session.requestAnimationFrame(() => {
|
requestSkipAnimationFrame(session, () => {
|
||||||
input_source.setSupportedButtons([]);
|
input_source.setSupportedButtons([]);
|
||||||
session.requestAnimationFrame(() => {
|
session.requestAnimationFrame(() => {
|
||||||
input_source.setSupportedButtons(gamepadButtons);
|
input_source.setSupportedButtons(gamepadButtons);
|
||||||
|
|
|
@ -69,7 +69,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
||||||
// updated values make their way to the WebXR gamepad and that it does not
|
// updated values make their way to the WebXR gamepad and that it does not
|
||||||
// fire an inputsourceschange event).
|
// fire an inputsourceschange event).
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
session.requestAnimationFrame(() => {
|
requestSkipAnimationFrame(session, () => {
|
||||||
// Make sure the exposed gamepad has the number of buttons and axes we
|
// Make sure the exposed gamepad has the number of buttons and axes we
|
||||||
// requested.
|
// requested.
|
||||||
// 3 Buttons: trigger, grip, touchpad
|
// 3 Buttons: trigger, grip, touchpad
|
||||||
|
|
|
@ -75,7 +75,7 @@ let testFunction =
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handedness only updates during an XR frame.
|
// Handedness only updates during an XR frame.
|
||||||
session.requestAnimationFrame(CheckNone);
|
requestSkipAnimationFrame(session, CheckNone);
|
||||||
});
|
});
|
||||||
|
|
||||||
xr_session_promise_test(
|
xr_session_promise_test(
|
||||||
|
|
|
@ -87,7 +87,7 @@ let testFunction =
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can only request input poses in an xr frame.
|
// Can only request input poses in an xr frame.
|
||||||
session.requestAnimationFrame(CheckInvalidGrip);
|
requestSkipAnimationFrame(session, CheckInvalidGrip);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
resolve();
|
resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
session.requestAnimationFrame(CheckPositionNotEmulated);
|
requestSkipAnimationFrame(session, CheckPositionNotEmulated);
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ let testFunctionGenerator = function(ray, expectedPoses, inputFromPointer, nextF
|
||||||
|
|
||||||
const input_source_controller = fakeDeviceController.simulateInputSourceConnection(screen_controller_init);
|
const input_source_controller = fakeDeviceController.simulateInputSourceConnection(screen_controller_init);
|
||||||
|
|
||||||
session.requestAnimationFrame((time, frame) => {
|
requestSkipAnimationFrame(session, (time, frame) => {
|
||||||
t.step(() => {
|
t.step(() => {
|
||||||
assert_equals(session.inputSources.length, 1);
|
assert_equals(session.inputSources.length, 1);
|
||||||
});
|
});
|
||||||
|
|
|
@ -56,7 +56,7 @@ let testFunctionGenerator = function(ray, expectedPoses, inputFromPointer, nextF
|
||||||
|
|
||||||
const input_source_controller = fakeDeviceController.simulateInputSourceConnection(screen_controller_init);
|
const input_source_controller = fakeDeviceController.simulateInputSourceConnection(screen_controller_init);
|
||||||
|
|
||||||
session.requestAnimationFrame((time, frame) => {
|
requestSkipAnimationFrame(session, (time, frame) => {
|
||||||
debug('rAF 1');
|
debug('rAF 1');
|
||||||
t.step(() => {
|
t.step(() => {
|
||||||
assert_equals(session.inputSources.length, 1);
|
assert_equals(session.inputSources.length, 1);
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue