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:
bors-servo 2020-05-02 11:27:48 -04:00 committed by GitHub
commit 292d6ec588
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
114 changed files with 878 additions and 334 deletions

View file

@ -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

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[mix-blend-mode-animation.html]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,4 +0,0 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[size.attributes.parse.empty.html]
[Parsing of non-negative integers]
expected: FAIL

View file

@ -1,4 +0,0 @@
[size.attributes.parse.empty.worker.html]
[Parsing of non-negative integers]
expected: FAIL

View file

@ -1,4 +0,0 @@
[size.attributes.parse.onlyspace.html]
[Parsing of non-negative integers]
expected: FAIL

View file

@ -1,4 +0,0 @@
[size.attributes.parse.onlyspace.worker.html]
[Parsing of non-negative integers]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

@ -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

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[xrInputSource_gamepad_disconnect.https.html]
[WebXR InputSource's gamepad gets disconnected when the input source is removed]
expected: FAIL

View file

@ -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

View file

@ -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,
{} {}

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[mix-blend-mode-animation.html]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,4 +0,0 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[size.attributes.parse.empty.html]
[Parsing of non-negative integers]
expected: FAIL

View file

@ -1,4 +0,0 @@
[size.attributes.parse.empty.worker.html]
[Parsing of non-negative integers]
expected: FAIL

View file

@ -1,4 +0,0 @@
[size.attributes.parse.onlyspace.html]
[Parsing of non-negative integers]
expected: FAIL

View file

@ -1,4 +0,0 @@
[size.attributes.parse.onlyspace.worker.html]
[Parsing of non-negative integers]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

@ -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

View file

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

View file

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

View file

@ -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

View file

@ -10868,7 +10868,7 @@
[] []
] ]
}, },
"lint.whitelist": [ "lint.ignore": [
"314a9e5b44443be1a4e28dd3c5047a5082a7ccab", "314a9e5b44443be1a4e28dd3c5047a5082a7ccab",
[] []
], ],

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -0,0 +1 @@
Feature-Policy: fullscreen 'self' https://{{domains[www]}}:{{ports[https][0]}} https://www.example.com;

View file

@ -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>

View file

@ -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();
}); });

View file

@ -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();
}); });

View file

@ -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();
}); });

View file

@ -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();
}); });

View file

@ -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),

View file

@ -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>

View file

@ -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

View file

@ -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

View file

@ -80,5 +80,8 @@ dictionary NDEFWriteOptions {
}; };
dictionary NDEFScanOptions { dictionary NDEFScanOptions {
USVString id;
USVString recordType;
USVString mediaType;
AbortSignal? signal; AbortSignal? signal;
}; };

View file

@ -0,0 +1,4 @@
spec: https://wicg.github.io/largest-contentful-paint/
suggested_reviewers:
- npm1
- yoavweiss

View file

@ -0,0 +1,4 @@
spec: https://wicg.github.io/layout-instability/
suggested_reviewers:
- skobes
- npm1

View file

@ -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>

View file

@ -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

View file

@ -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

View file

@ -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"},

View file

@ -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

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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>

View file

@ -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");

View file

@ -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);

View file

@ -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) => {});
}); });

View file

@ -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;
}; };

View file

@ -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) => {

View file

@ -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) => {

View file

@ -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) => {

View file

@ -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);

View file

@ -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

View file

@ -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(

View file

@ -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);
}); });
}); });

View file

@ -45,7 +45,7 @@
resolve(); resolve();
} }
session.requestAnimationFrame(CheckPositionNotEmulated); requestSkipAnimationFrame(session, CheckPositionNotEmulated);
})); }));
}; };

View file

@ -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);
}); });

View file

@ -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