mirror of
https://github.com/servo/servo.git
synced 2025-06-28 11:03:39 +01:00
Update web-platform-tests to revision 5254eba7f17d10211b56c0d1958649bca29e8985
This commit is contained in:
parent
2eb7c8c080
commit
7da408021a
94 changed files with 1172 additions and 444 deletions
|
@ -0,0 +1,2 @@
|
|||
[nested-orthogonal-flexbox-relayout.html]
|
||||
expected: FAIL
|
|
@ -2,3 +2,6 @@
|
|||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -17,3 +17,6 @@
|
|||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementsFromPoint-invalid-cases.html]
|
||||
[The root element is the last element returned for otherwise empty queries within the viewport]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[effect-reference-add-hw-001.html]
|
||||
expected: FAIL
|
|
@ -312,24 +312,24 @@
|
|||
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -59,6 +59,6 @@
|
|||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript error]
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,3 +11,9 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%22nosniFF%22]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
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_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -11,6 +11,6 @@
|
|||
[Set HTTP URL frame location.protocol to ftp]
|
||||
expected: FAIL
|
||||
|
||||
[Set data URL frame location.protocol to file]
|
||||
[Set data URL frame location.protocol to data]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
[tabindex-focus-flag.html]
|
||||
[text with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[A with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[#svg-a should not be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[input[type="hidden"\] should not be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[text with tabindex=0 should be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[IMG with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[a with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[#summary-first should be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[a with tabindex=0 should be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[a with tabindex=-1 should be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[#svg-text should not be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[a should not be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[[contenteditable\] should be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[DIV with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[SUMMARY#summary-out-tabindex-invalid with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[a#with-href with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[text with tabindex=-1 should be focusable.]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,8 @@
|
|||
[skip-document-with-fragment.html]
|
||||
expected: TIMEOUT
|
||||
[Autofocus elements in iframed documents with URL fragments should be skipped.]
|
||||
expected: FAIL
|
||||
|
||||
[Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,20 +1,16 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
[Element with tabindex should support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: NOTRUN
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -53,3 +53,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 44061 more errors.\n\tMax AbsError of 1.9999794363975525e+0 at index of 28452.\n\t[28452\]\t9.9997943639755249e-1\t-1.0000000000000000e+0\t1.9999794363975525e+0\t1.9999794363975525e+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
|
||||
|
||||
[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 44052 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 39026.\n\t[39026\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 14112.\n\t[14112\]\t-9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -86,3 +86,6 @@
|
|||
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-3.3433449219311302e-17\t5.6332010030746460e-1\t5.6332010030746460e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5672520847738763e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000000e+0 at index of 31080.\n]
|
||||
expected: FAIL
|
||||
|
||||
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-4.6400068104817376e-34\t5.6332010030746460e-1\t5.6332010030746460e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5571627358307376e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000000e+0 at index of 31080.\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -136815,6 +136815,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"nested-orthogonal-flexbox-relayout.html": [
|
||||
"ef158c6a4884b8ee2840bafe27e605e618aa8be5",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-flexbox/reference/nested-orthogonal-flexbox-relayout-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"order": {
|
||||
"order-with-column-reverse.html": [
|
||||
"5083d6843649bbbb2bf9d417ae4022042c87e0aa",
|
||||
|
@ -202804,6 +202817,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"background-image-blur-repaint.html": [
|
||||
"7b3df263081ecceb6517e056e60cfaa35b9981a0",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/filter-effects/reference/background-image-blur-repaint-expected.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"blur-clip-stacking-context-001.html": [
|
||||
"a96994a8afe126e474f9ee015338749f0015dc1f",
|
||||
[
|
||||
|
@ -203129,8 +203155,21 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"effect-reference-add-hw-001.html": [
|
||||
"78f30c35f47926b63d417c29fc063c96b9171c96",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/filter-effects/reference/effect-reference-add-hw-001-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"effect-reference-after-001.html": [
|
||||
"e8bbc787df5ddd047df3e393d8e07b17c2f95fc9",
|
||||
"a6de2465027e99ff6239dd45524862465dde847f",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -238363,7 +238402,7 @@
|
|||
},
|
||||
"support": {
|
||||
".azure-pipelines.yml": [
|
||||
"fb78944998e33edde5ea614af1a0cf1adc4f02ca",
|
||||
"0bf63f7a374f69063654169e0b74169fce8dc5fd",
|
||||
[]
|
||||
],
|
||||
".codecov.yml": [
|
||||
|
@ -285751,6 +285790,10 @@
|
|||
"186c5d130c5ea7facc55ff2ac88b1f1f9edf63af",
|
||||
[]
|
||||
],
|
||||
"nested-orthogonal-flexbox-relayout-ref.html": [
|
||||
"124ecf843c848a71918559c0b853032184a5e5b1",
|
||||
[]
|
||||
],
|
||||
"order-painting-ref.html": [
|
||||
"bf7bc30d017dd4066193b7ed18bdd94dbfeb8de3",
|
||||
[]
|
||||
|
@ -307227,12 +307270,20 @@
|
|||
"9ce975c1ef631dc4e8e59c35fcacf6d9c7483b58",
|
||||
[]
|
||||
],
|
||||
"background-image-blur-repaint-expected.html": [
|
||||
"bf16d1fa2890af8d1bdb7b95b44af5bfff4dccaa",
|
||||
[]
|
||||
],
|
||||
"dynamic-filter-changes-001-ref.html": [
|
||||
"699d57c2a8c087c25079232a443a6e2b72c1e79e",
|
||||
[]
|
||||
],
|
||||
"effect-reference-add-hw-001-ref.html": [
|
||||
"79a15223610df684732b9d6d6f5b59810f79403e",
|
||||
[]
|
||||
],
|
||||
"effect-reference-after-001-ref.html": [
|
||||
"cbcff3fa444c580acc67640ce330edcf898aeeb2",
|
||||
"45192b13451fdfe2f00c17dbc84d30a770426e86",
|
||||
[]
|
||||
],
|
||||
"effect-reference-convolve-error-001-ref.html": [
|
||||
|
@ -307345,6 +307396,10 @@
|
|||
"85dd7324815b8f8ef1a1d0496224c1a0661db9d8",
|
||||
[]
|
||||
],
|
||||
"color-palette.png": [
|
||||
"68641b76771abf086dc213b353ac2088fffb931a",
|
||||
[]
|
||||
],
|
||||
"div-with-filter.html": [
|
||||
"9a4d4105a8d50b55297783871e144a5858d7a33e",
|
||||
[]
|
||||
|
@ -307385,10 +307440,6 @@
|
|||
"8b4b25364e0ffbe09e563e13b567fa57330e48d5",
|
||||
[]
|
||||
],
|
||||
"reference.png": [
|
||||
"68641b76771abf086dc213b353ac2088fffb931a",
|
||||
[]
|
||||
],
|
||||
"ruler-h-50%.png": [
|
||||
"cf2eea6b438a11503a89414cbb2f9f1fde55df0c",
|
||||
[]
|
||||
|
@ -312420,7 +312471,27 @@
|
|||
[]
|
||||
],
|
||||
"experimental-features": {
|
||||
"layout-animations-disabled-tentative.html.headers": [
|
||||
"bebb5d054826ce19d4a0d4f1381deeb5e72f7270",
|
||||
[]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-js-tentative.html.headers": [
|
||||
"bebb5d054826ce19d4a0d4f1381deeb5e72f7270",
|
||||
[]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-keyframes-tentative.html.headers": [
|
||||
"bebb5d054826ce19d4a0d4f1381deeb5e72f7270",
|
||||
[]
|
||||
],
|
||||
"resources": {
|
||||
"animation-property-height.js": [
|
||||
"79316cb488fade6e877c690f90c74961ff944f52",
|
||||
[]
|
||||
],
|
||||
"common.js": [
|
||||
"639847abf36d636e537c081a6afd06a3a8fb7f9f",
|
||||
[]
|
||||
],
|
||||
"document-policy-image.html": [
|
||||
"4e5b919bd112f044cc3ec9e57afe05ae20f22ece",
|
||||
[]
|
||||
|
@ -314690,18 +314761,6 @@
|
|||
[]
|
||||
],
|
||||
"experimental-features": {
|
||||
"layout-animations-disabled-tentative.html.headers": [
|
||||
"7c441bbba555d9da8c2cfc34de2ddaf2a52074f4",
|
||||
[]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-js-tentative.html.headers": [
|
||||
"7c441bbba555d9da8c2cfc34de2ddaf2a52074f4",
|
||||
[]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-keyframes-tentative.html.headers": [
|
||||
"7c441bbba555d9da8c2cfc34de2ddaf2a52074f4",
|
||||
[]
|
||||
],
|
||||
"lazyload": {
|
||||
"lazyload-disabled-image-tentative.sub.html.headers": [
|
||||
"7974815fc9cc069a3890cec9d09d1c6b3e3f9908",
|
||||
|
@ -314721,10 +314780,6 @@
|
|||
]
|
||||
},
|
||||
"resources": {
|
||||
"animation-property-height.js": [
|
||||
"79316cb488fade6e877c690f90c74961ff944f52",
|
||||
[]
|
||||
],
|
||||
"async-script.js": [
|
||||
"3c0ee6d02343891b0234f31c0fb229929ae1b24b",
|
||||
[]
|
||||
|
@ -315071,7 +315126,7 @@
|
|||
[]
|
||||
],
|
||||
"feature-policy-screen-wakelock.html": [
|
||||
"7d3dab45af1d57c805f14cfdbed142ddb2415eba",
|
||||
"6feed51d498651c6565517df3afb49076bcb7c57",
|
||||
[]
|
||||
],
|
||||
"feature-policy-serial-worker.html": [
|
||||
|
@ -338401,7 +338456,7 @@
|
|||
[]
|
||||
],
|
||||
"serve.py": [
|
||||
"e4f0d5efaee37170a9c03a208924e483b2a4608a",
|
||||
"45bfd4766ebcd278ab068f9632471c5c23a3c3f1",
|
||||
[]
|
||||
],
|
||||
"test_functional.py": [
|
||||
|
@ -343424,7 +343479,7 @@
|
|||
[]
|
||||
],
|
||||
"environment.py": [
|
||||
"2ed4a0f5f93e17c1aad2c6fb9d5de5b48a07aebe",
|
||||
"cbbee8213266bf2f914a4066437dbfa63c774701",
|
||||
[]
|
||||
],
|
||||
"executors": {
|
||||
|
@ -344122,7 +344177,7 @@
|
|||
[]
|
||||
],
|
||||
"server.py": [
|
||||
"9e842802fc0f1b273cd78313275e0bf78dbcaf64",
|
||||
"c2498c4ee1e8f45de604f71394c3d6feef82aef1",
|
||||
[]
|
||||
],
|
||||
"sslutils": {
|
||||
|
@ -346412,7 +346467,7 @@
|
|||
[]
|
||||
],
|
||||
"RTCRtpParameters-helper.js": [
|
||||
"d61d8e14932963e9f17c47b99f2998d7ef0e9ff4",
|
||||
"17ecfbaf99e8ff133373f1487a282dbaab7562f6",
|
||||
[]
|
||||
],
|
||||
"RTCStats-helper.js": [
|
||||
|
@ -381968,13 +382023,6 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"flex-flow-percentage-margins-no-available-space-assert.html": [
|
||||
"086c4f5dd711fb45b2739dbf74794f81d8e88d95",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flex-item-contains-strict.html": [
|
||||
"25849cc64b2f10cf2d319e1a2f750f32d64359b5",
|
||||
[
|
||||
|
@ -383080,6 +383128,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"fontfaceset-load-css-wide-keywords.html": [
|
||||
"b85b92bd15e387db3dacd93b325f7f7b4d8d80db",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"fontfacesetloadevent-constructor.html": [
|
||||
"d5038ce690c6df5f8eb6f2d0266df052f7200fc5",
|
||||
[
|
||||
|
@ -390196,6 +390251,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"host-part-001.html": [
|
||||
"9004141534f134d85590df3372f83838668a72e7",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"host-stylesheet.html": [
|
||||
"2e65c4b1b57bd9959c68e85e11b442c67f2c5a42",
|
||||
[
|
||||
|
@ -399859,7 +399921,7 @@
|
|||
]
|
||||
],
|
||||
"CSSStyleSheet-constructable.html": [
|
||||
"fbee4298c1411937f8c45a2f6001ee78dccadbb5",
|
||||
"e6293909c2178966a942abb7e544ff437e6d51d3",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -403539,6 +403601,34 @@
|
|||
},
|
||||
"document-policy": {
|
||||
"experimental-features": {
|
||||
"layout-animations-disabled-tentative.html": [
|
||||
"0190eaa84f75e3097b95f70adde89296d47cc1f3",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-js-tentative.html": [
|
||||
"ee7c295156f26733358d62a4046a097450a6b8e2",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-keyframes-tentative.html": [
|
||||
"cd9210cc1382ee1f6dc892783bd275c1de7ab669",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-animations-enabled-tentative.html": [
|
||||
"19e405496eef72d176d007c93f7262e6a12b3806",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"unsized-media.tentative.https.sub.html": [
|
||||
"d7bb72524902cbd519d892b8206569d7607a120b",
|
||||
[
|
||||
|
@ -419901,34 +419991,6 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"layout-animations-disabled-tentative.html": [
|
||||
"0190eaa84f75e3097b95f70adde89296d47cc1f3",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-js-tentative.html": [
|
||||
"e7150a91e8749473962884727fb59bb3b978bf68",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-keyframes-tentative.html": [
|
||||
"163ccae812f129e6cc338eb548e7ace92dd65b17",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-animations-enabled-tentative.html": [
|
||||
"19e405496eef72d176d007c93f7262e6a12b3806",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"lazyload": {
|
||||
"lazyload-disabled-image-tentative.sub.html": [
|
||||
"5bd9fca2a868197bdcc81486e0a33ce4e3a0659b",
|
||||
|
@ -430350,7 +430412,7 @@
|
|||
]
|
||||
},
|
||||
"tabindex-focus-flag.html": [
|
||||
"341162f09e79e9aad17769b709f94aeadb8771cc",
|
||||
"93fdb19a592ff632405c338256082043ae608002",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -438061,7 +438123,7 @@
|
|||
]
|
||||
],
|
||||
"import-css-module-basic.html": [
|
||||
"902430d0779e3b9e34f95db1da4d4b96c2b24bbb",
|
||||
"1cb290de3feb584bf9dc63e8090f6b31dd10eeb9",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -447531,7 +447593,7 @@
|
|||
},
|
||||
"media-capabilities": {
|
||||
"decodingInfo.any.js": [
|
||||
"2d74d30eeb623992f629b6932304c3ee2b89e84f",
|
||||
"772d47e87295775f207fedd6f3f68681ca32ad79",
|
||||
[
|
||||
"media-capabilities/decodingInfo.any.html",
|
||||
{
|
||||
|
@ -450435,6 +450497,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"RTCRtpSendParameters-degradationPreference.html": [
|
||||
"3573bb58760210611cd13f0d7d0fbd2aa6682bd7",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"idlharness.window.js": [
|
||||
"0d9137dc6fb91b1499d922e01d6ad96049f5757b",
|
||||
[
|
||||
|
@ -494861,7 +494930,7 @@
|
|||
},
|
||||
"wake-lock": {
|
||||
"idlharness-worker.https.window.js": [
|
||||
"c747ad6872a91a5ca81fb1e7ca73f72e4e987097",
|
||||
"76f5352721dfdadca5093b6f08bb648d8b17f93e",
|
||||
[
|
||||
"wake-lock/idlharness-worker.https.window.html",
|
||||
{
|
||||
|
@ -494879,7 +494948,7 @@
|
|||
]
|
||||
],
|
||||
"idlharness.https.window.js": [
|
||||
"f9e3c02175d519f454c15109b30fa567709cee2d",
|
||||
"60c25f3386ea8bd2ce8a5955745f9d1ede580f46",
|
||||
[
|
||||
"wake-lock/idlharness.https.window.html",
|
||||
{
|
||||
|
@ -494933,7 +495002,7 @@
|
|||
]
|
||||
],
|
||||
"wakelock-enabled-by-feature-policy.https.sub.html": [
|
||||
"376359e888d6191b9eb1241373b3d411bb5bd2d0",
|
||||
"f908717ff410d736ccb42e89c3e95c4852e82696",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -494942,7 +495011,7 @@
|
|||
]
|
||||
],
|
||||
"wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html": [
|
||||
"a2d3725857be76f33b33257c0c3373edb68396be",
|
||||
"b15289beff4853765fdc30dfd0a3b35d48fd8619",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -494976,7 +495045,7 @@
|
|||
]
|
||||
],
|
||||
"wakelock-onrelease.https.html": [
|
||||
"3506c8ae82b91178468a7158b9fca6d099a498f6",
|
||||
"88c0cdb654c8e700195c430aa74fb2238ce9db10",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -494985,7 +495054,7 @@
|
|||
]
|
||||
],
|
||||
"wakelock-request-denied.https.html": [
|
||||
"8dbe523ed2c5653932a3f6f246d34ada1e4b113f",
|
||||
"b222ef342a6566a9d424044713b1acf2666679eb",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -495008,7 +495077,7 @@
|
|||
]
|
||||
],
|
||||
"wakelock-supported-by-feature-policy.html": [
|
||||
"e7f9c8cb283c20d72c6d936398b9c352a2a0b88a",
|
||||
"a55eb54ba1c48ae7d5330ed1281029d71f0a23e9",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -495040,7 +495109,7 @@
|
|||
]
|
||||
],
|
||||
"wakelockpermissiondescriptor.https.html": [
|
||||
"fd7a08a34ba7dfe203c42f4d4f78ae626fbea235",
|
||||
"88c95987f1ead6d0e194e3d1dcff6d4b5e852778",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -502662,42 +502731,35 @@
|
|||
]
|
||||
],
|
||||
"RTCRtpParameters-codecs.html": [
|
||||
"fdb584460f862825f2c695ec3cff678c14503fb4",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"RTCRtpParameters-degradationPreference.html": [
|
||||
"e2c92bc1c0814f294e1b9153febc76886cf2fdb9",
|
||||
"f5fa65e2ac9be706a72feb49c09b37def65986e8",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"RTCRtpParameters-encodings.html": [
|
||||
"2f94186fe1e76980f77f5da7fdb516ba411b036f",
|
||||
"00e80885cff30c7bae8c94ebf8fd3ac37e26603a",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"RTCRtpParameters-headerExtensions.html": [
|
||||
"85c3338dd62b0a8a4aad1e217673f01dd80d50fa",
|
||||
"7de2b75f4ee85b338d6b36ff7c12c5b17bb61779",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"RTCRtpParameters-rtcp.html": [
|
||||
"82fb49be7dea91b0be43ddbbf1d259d3d80b7d99",
|
||||
"79653045200e667f405a749ae6f51a083dc1f99d",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"RTCRtpParameters-transactionId.html": [
|
||||
"ae56fb401f44bad254edfbfd670776c5ffe96211",
|
||||
"a7b7865532b877e17bf17edab0ab44ec3ca288d4",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -502718,7 +502780,7 @@
|
|||
]
|
||||
],
|
||||
"RTCRtpReceiver-getParameters.html": [
|
||||
"7f8ac673a60c73681122df5243f6054b82f31fff",
|
||||
"4be0e3b95ec45bd9693a4da38b146c58b37810f8",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[flex-flow-percentage-margins-no-available-space-assert.html]
|
||||
expected: CRASH
|
|
@ -0,0 +1,2 @@
|
|||
[nested-orthogonal-flexbox-relayout.html]
|
||||
expected: FAIL
|
|
@ -2,3 +2,6 @@
|
|||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -21,3 +21,6 @@
|
|||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementsFromPoint-invalid-cases.html]
|
||||
[The root element is the last element returned for otherwise empty queries within the viewport]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[effect-reference-add-hw-001.html]
|
||||
expected: FAIL
|
|
@ -312,24 +312,24 @@
|
|||
[fetch(): separate response Content-Type: text/plain ]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -59,6 +59,6 @@
|
|||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript error]
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,3 +11,9 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%22nosniFF%22]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
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_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -18,6 +18,6 @@
|
|||
[Set HTTP URL frame location.protocol to ftp]
|
||||
expected: FAIL
|
||||
|
||||
[Set data URL frame location.protocol to file]
|
||||
[Set data URL frame location.protocol to data]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
|
|
@ -11,3 +11,42 @@
|
|||
[[contenteditable\] should be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[text with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[A with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[#svg-a should not be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[text with tabindex=0 should be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[IMG with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[a with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[a with tabindex=0 should be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[a with tabindex=-1 should be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[#svg-text should not be focusable by default.]
|
||||
expected: FAIL
|
||||
|
||||
[DIV with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[SUMMARY#summary-out-tabindex-invalid with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[a#with-href with tabindex=invalid should not be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
[text with tabindex=-1 should be focusable.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
[skip-document-with-fragment.html]
|
||||
expected: TIMEOUT
|
||||
[Autofocus elements in iframed documents with URL fragments should be skipped.]
|
||||
expected: FAIL
|
||||
|
||||
[Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,20 +1,16 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Element with tabindex should support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: NOTRUN
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -122,3 +122,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 44061 more errors.\n\tMax AbsError of 1.9999794363975525e+0 at index of 28452.\n\t[28452\]\t9.9997943639755249e-1\t-1.0000000000000000e+0\t1.9999794363975525e+0\t1.9999794363975525e+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
|
||||
|
||||
[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 44052 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 39026.\n\t[39026\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 14112.\n\t[14112\]\t-9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -317,3 +317,6 @@
|
|||
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-3.3433449219311302e-17\t5.6332010030746460e-1\t5.6332010030746460e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5672520847738763e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000000e+0 at index of 31080.\n]
|
||||
expected: FAIL
|
||||
|
||||
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-4.6400068104817376e-34\t5.6332010030746460e-1\t5.6332010030746460e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5571627358307376e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000000e+0 at index of 31080.\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
5
tests/wpt/metadata/webmessaging/with-ports/018.html.ini
Normal file
5
tests/wpt/metadata/webmessaging/with-ports/018.html.ini
Normal file
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -630,7 +630,7 @@ jobs:
|
|||
- template: tools/ci/azure/update_hosts.yml
|
||||
- template: tools/ci/azure/update_manifest.yml
|
||||
# --exclude is a workaround for https://github.com/web-platform-tests/wpt/issues/18634 + https://github.com/web-platform-tests/wpt/issues/22175
|
||||
- script: no_proxy='*' ./wpt run --no-manifest-update --no-restart-on-unexpected --no-fail-on-unexpected --this-chunk=$(System.JobPositionInPhase) --total-chunks=$(System.TotalJobsInPhase) --chunk-type hash --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_$(System.JobPositionInPhase).json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot_$(System.JobPositionInPhase).txt --log-mach - --log-mach-level info safari --exclude /inert/inert-retargeting.tentative.html --exclude /inert/inert-retargeting-iframe.tentative.html --exclude /pointerevents/pointerevent_pointercapture-not-lost-in-chorded-buttons.html
|
||||
- script: no_proxy='*' ./wpt run --no-manifest-update --no-restart-on-unexpected --no-fail-on-unexpected --this-chunk=$(System.JobPositionInPhase) --total-chunks=$(System.TotalJobsInPhase) --chunk-type hash --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_$(System.JobPositionInPhase).json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot_$(System.JobPositionInPhase).txt --log-mach - --log-mach-level info safari --exclude /inert/inert-retargeting.tentative.html --exclude /inert/inert-retargeting-iframe.tentative.html --exclude /pointerevents/pointerevent_pointercapture-not-lost-in-chorded-buttons.html --exclude /pointerevents/pointerevent_pointercapture_in_frame.html --exclude /web-share/share-sharePromise-internal-slot.https.html
|
||||
displayName: 'Run tests'
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: 'Publish results'
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<title>CSS Flexbox: flex-flow percentage margin with no available space</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#flex-shrink-property">
|
||||
<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=380201">
|
||||
<meta name="assert" content="This test checks that a flexbox doesn't shrink below border/padding
|
||||
when stretching children with no available space.">
|
||||
<style>
|
||||
* {
|
||||
display: flex;
|
||||
padding-bottom: 20pt;
|
||||
min-height: 0.7%;
|
||||
margin-top: 6000%;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 7000%;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/check-layout-th.js"></script>
|
||||
<abbr data-expected-height=30210272>
|
||||
<input></input>
|
||||
</abbr>
|
||||
<script>
|
||||
window.checkLayout('abbr');
|
||||
</script>
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<title>CSS Flexbox: nested orthogonal children on relayout.</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#flex-direction-property">
|
||||
<link rel="match" href="reference/nested-orthogonal-flexbox-relayout-ref.html">
|
||||
<meta name="assert" content="This test ensures nested orthogonal flex items get properly relaid out when flexbox changes dimensions."/>
|
||||
<style>
|
||||
#column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: 5px solid yellow;
|
||||
}
|
||||
|
||||
#row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
border: 5px solid blue;
|
||||
}
|
||||
|
||||
.item {
|
||||
border: 5px solid green;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="column">
|
||||
<div id="row">
|
||||
<div class="item">This text should not overflow its box</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var columnBox = document.getElementById("column");
|
||||
columnBox.offsetHeight;
|
||||
columnBox.style.width = "200px";
|
||||
</script>
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<style>
|
||||
#column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: 5px solid yellow;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
#row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
border: 5px solid blue;
|
||||
}
|
||||
|
||||
.item {
|
||||
border: 5px solid green;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="column">
|
||||
<div id="row">
|
||||
<div class="item">This text should not overflow its box</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,60 @@
|
|||
<!DOCTYPE html>
|
||||
<title>SyntaxError thrown when matching CSS-wide keyword</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#font-face-set-load">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#find-the-matching-font-faces">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
|
||||
function load_on_worker(keyword) {
|
||||
return new Promise((resolve, reject) =>{
|
||||
var blob = new Blob([`
|
||||
self.fonts.load('${keyword}').then(
|
||||
()=>{ self.postMessage('success') },
|
||||
(e)=>{ self.postMessage(e) }
|
||||
);
|
||||
`]);
|
||||
var blob_url = window.URL.createObjectURL(blob);
|
||||
let worker = new Worker(blob_url);
|
||||
worker.onmessage = msg => {
|
||||
if (msg === 'success')
|
||||
resolve(msg.data)
|
||||
else
|
||||
reject(msg.data)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
promise_test(test => {
|
||||
return promise_rejects_dom(test, 'SyntaxError', document.fonts.load('initial'));
|
||||
}, 'Loading CSS-wide keyword "initial" causes SyntaxError (document)')
|
||||
|
||||
promise_test(test => {
|
||||
return promise_rejects_dom(test, 'SyntaxError', document.fonts.load('inherit'));
|
||||
}, 'Loading CSS-wide keyword "inherit" causes SyntaxError (document)')
|
||||
|
||||
promise_test(test => {
|
||||
return promise_rejects_dom(test, 'SyntaxError', document.fonts.load('unset'));
|
||||
}, 'Loading CSS-wide keyword "unset" causes SyntaxError (document)')
|
||||
|
||||
promise_test(test => {
|
||||
return promise_rejects_dom(test, 'SyntaxError', document.fonts.load('revert'));
|
||||
}, 'Loading CSS-wide keyword "revert" causes SyntaxError (document)')
|
||||
|
||||
promise_test(test => {
|
||||
return promise_rejects_dom(test, 'SyntaxError', load_on_worker('initial'));
|
||||
}, 'Loading CSS-wide keyword "initial" causes SyntaxError (worker)')
|
||||
|
||||
promise_test(test => {
|
||||
return promise_rejects_dom(test, 'SyntaxError', load_on_worker('inherit'));
|
||||
}, 'Loading CSS-wide keyword "inherit" causes SyntaxError (worker)')
|
||||
|
||||
promise_test(test => {
|
||||
return promise_rejects_dom(test, 'SyntaxError', load_on_worker('unset'));
|
||||
}, 'Loading CSS-wide keyword "unset" causes SyntaxError (worker)')
|
||||
|
||||
promise_test(test => {
|
||||
return promise_rejects_dom(test, 'SyntaxError', load_on_worker('revert'));
|
||||
}, 'Loading CSS-wide keyword "revert" causes SyntaxError (worker)')
|
||||
|
||||
</script>
|
|
@ -0,0 +1,43 @@
|
|||
<!doctype html>
|
||||
<title>CSS Shadow Parts - :host::part()</title>
|
||||
<link rel="author" title="Mozilla" href="https://mozilla.org">
|
||||
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-shadow-parts/#part">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1624968">
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=980506">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="host"></div>
|
||||
<script>
|
||||
test(function() {
|
||||
let host = document.getElementById("host");
|
||||
host.attachShadow({ mode: "open" }).innerHTML = `
|
||||
<style>
|
||||
:host::part(mypart) {
|
||||
color: lime;
|
||||
}
|
||||
:host(.tweak)::part(mypart) {
|
||||
color: blue;
|
||||
}
|
||||
</style>
|
||||
<div part="mypart"></div>
|
||||
`;
|
||||
|
||||
let part = host.shadowRoot.querySelector("[part]");
|
||||
|
||||
assert_equals(
|
||||
window.getComputedStyle(part).color,
|
||||
"rgb(0, 255, 0)",
|
||||
":host::part() works",
|
||||
);
|
||||
|
||||
host.classList.add("tweak");
|
||||
|
||||
assert_equals(
|
||||
window.getComputedStyle(part).color,
|
||||
"rgb(0, 0, 255)",
|
||||
":host::part() invalidation works properly",
|
||||
);
|
||||
}, ":host::part works");
|
||||
</script>
|
|
@ -48,7 +48,7 @@ test(() => {
|
|||
|
||||
test(() => {
|
||||
const sheet = new CSSStyleSheet({disabled: true, media: "screen, print"});
|
||||
assert_equals(sheet.title, null);
|
||||
assert_equals(sheet.title, null, "The title attribute must return the title or null if title is the empty string");
|
||||
assert_equals(sheet.ownerNode, null);
|
||||
assert_equals(sheet.ownerRule, null);
|
||||
assert_equals(sheet.media.length, 2);
|
||||
|
@ -66,7 +66,7 @@ test(() => {
|
|||
assert_equals(sheet.cssRules[0].cssText, redStyleTexts[1]);
|
||||
|
||||
const sheet2 = new CSSStyleSheet({});
|
||||
assert_equals(sheet2.title, null);
|
||||
assert_equals(sheet2.title, null, "The title attribute must return the title or null if title is the empty string");
|
||||
assert_equals(sheet2.ownerNode, null);
|
||||
assert_equals(sheet2.ownerRule, null);
|
||||
assert_equals(sheet2.media.length, 0);
|
||||
|
@ -81,7 +81,7 @@ test(() => {
|
|||
assert_equals(sheet2.cssRules.length, 0);
|
||||
|
||||
const sheet3 = new CSSStyleSheet();
|
||||
assert_equals(sheet3.title, null);
|
||||
assert_equals(sheet3.title, null, "The title attribute must return the title or null if title is the empty string");
|
||||
assert_equals(sheet3.ownerNode, null);
|
||||
assert_equals(sheet3.ownerRule, null);
|
||||
assert_equals(sheet3.media.length, 0);
|
||||
|
@ -98,14 +98,14 @@ test(() => {
|
|||
|
||||
test(() => {
|
||||
const sheet = new CSSStyleSheet({title: "something"});
|
||||
assert_equals(sheet.title, null);
|
||||
}, "title cannot be set in the CSSStyleSheet constructor");
|
||||
assert_equals(sheet.title, null, "title and alternate are not supported by the constructor. https://github.com/WICG/construct-stylesheets/issues/105");
|
||||
}, "title can be set in the CSSStyleSheet constructor");
|
||||
|
||||
promise_test(() => {
|
||||
const sheet = new CSSStyleSheet({disabled: true, media: "screen, print"});
|
||||
const promise_sheet = sheet.replace(redStyleTexts[0]);
|
||||
return promise_sheet.then(function(sheet) {
|
||||
assert_equals(sheet.title, null);
|
||||
assert_equals(sheet.title, null, "The title attribute must return the title or null if title is the empty string");
|
||||
assert_equals(sheet.ownerNode, null);
|
||||
assert_equals(sheet.ownerRule, null);
|
||||
assert_equals(sheet.media.length, 2);
|
||||
|
@ -535,24 +535,19 @@ test(() => {
|
|||
const style = document.createElement("style");
|
||||
style.textContent = ".target { color: white; }";
|
||||
span.shadowRoot.appendChild(style)
|
||||
// non-adopted styles should be ordered before adopted styles
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)");
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)", "non-adopted styles should be ordered before adopted styles");
|
||||
|
||||
span.shadowRoot.adoptedStyleSheets = [];
|
||||
// with no adopted styles in conflict, the non-adopted style should take effect
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 255, 255)");
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 255, 255)", "with no adopted styles in conflict, the non-adopted style should take effect");
|
||||
|
||||
span.shadowRoot.adoptedStyleSheets = [sheet];
|
||||
// the adopted style should be ordered after the non-adopted style
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)");
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)", "the adopted style should be ordered after the non-adopted style");
|
||||
|
||||
sheet.disabled = true;
|
||||
// with the adopted sheet disabled, the non-adopted style should take effect
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 255, 255)");
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 255, 255)", "with the adopted sheet disabled, the non-adopted style should take effect");
|
||||
|
||||
sheet.disabled = false;
|
||||
// the adopted sheet re-enabled, it should take effect again.
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)");
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)", "the adopted sheet re-enabled, it should take effect again");
|
||||
}, 'Adopted sheets are ordered after non-adopted sheets in the shadow root')
|
||||
|
||||
test(() => {
|
||||
|
@ -574,41 +569,32 @@ test(() => {
|
|||
const style = document.createElement("style");
|
||||
style.textContent = ".target { color: white; }";
|
||||
span.appendChild(style)
|
||||
// non-adopted styles should be ordered before adopted styles
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 0, 0)");
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 0, 0)", "non-adopted styles should be ordered before adopted styles");
|
||||
|
||||
document.adoptedStyleSheets = [];
|
||||
// with no adopted styles in conflict, the non-adopted style should take effect
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 255, 255)");
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 255, 255)", "with no adopted styles in conflict, the non-adopted style should take effect");
|
||||
|
||||
document.adoptedStyleSheets = [sheet];
|
||||
// the adopted style should be ordered after the non-adopted style
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 0, 0)");
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 0, 0)", "the adopted style should be ordered after the non-adopted style");
|
||||
|
||||
sheet.disabled = true;
|
||||
// with the adopted sheet disabled, the non-adopted style should take effect
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 255, 255)");
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 255, 255)", "with the adopted sheet disabled, the non-adopted style should take effect");
|
||||
|
||||
sheet.disabled = false;
|
||||
// the adopted sheet re-enabled, it should take effect again.
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 0, 0)")
|
||||
assert_equals(getComputedStyle(span).color, "rgb(255, 0, 0)", "the adopted sheet re-enabled, it should take effect again")
|
||||
}, 'Adopted sheets are ordered after non-adopted sheets in the document')
|
||||
|
||||
const import_text = '@import url("support/constructable-import.css");';
|
||||
|
||||
test(() => {
|
||||
assert_throws_dom("NotAllowedError", () => { (new CSSStyleSheet).replaceSync(import_text) });
|
||||
}, 'CSSStyleSheet.replaceSync throws exception when there is import rule inside');
|
||||
|
||||
test(() => {
|
||||
assert_throws_dom("NotAllowedError", () => { (new CSSStyleSheet).insertRule(import_text) });
|
||||
assert_throws_dom("SyntaxError", () => { (new CSSStyleSheet).insertRule(import_text) });
|
||||
}, 'Inserting an @import rule through insertRule on a constructed stylesheet throws an exception');
|
||||
|
||||
async_test(t => {
|
||||
const importUrl = "support/constructable-import.css";
|
||||
const sheet = new CSSStyleSheet();
|
||||
|
||||
assert_throws_dom("NotAllowedError", () => { sheet.replaceSync(`@import url("${importUrl}");`) });
|
||||
sheet.replaceSync(`@import url("${importUrl}");`);
|
||||
|
||||
const timeAfterReplaceSync = performance.now();
|
||||
let link = document.createElement("link");
|
||||
|
@ -632,27 +618,68 @@ promise_test(() => {
|
|||
const sheet = new CSSStyleSheet();
|
||||
span.shadowRoot.adoptedStyleSheets = [sheet];
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
|
||||
// Replace and assert that the imported rule is applied.
|
||||
// Replace and assert that the imported rule is NOT applied.
|
||||
const sheet_promise = sheet.replace(import_text);
|
||||
return sheet_promise.then((sheet) => {
|
||||
assert_equals(sheet.cssRules.length, 1);
|
||||
assert_equals(sheet.cssRules[0].cssText, import_text);
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)");
|
||||
// replace() ignores @import rules:
|
||||
assert_equals(sheet.cssRules.length, 0);
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
|
||||
}).catch((reason) => {
|
||||
assert_unreached(`Promise was rejected (${reason}) when it should have been resolved`);
|
||||
});
|
||||
}, 'CSSStyleSheet.replace allows import rule inside');
|
||||
}, 'CSSStyleSheet.replace allows, but ignores, import rule inside');
|
||||
|
||||
promise_test(() => {
|
||||
const span = document.createElement("span");
|
||||
thirdSection.appendChild(span);
|
||||
const shadowDiv = attachShadowDiv(span);
|
||||
const targetSpan = document.createElement("span");
|
||||
targetSpan.classList.add("target");
|
||||
shadowDiv.appendChild(targetSpan);
|
||||
const sheet = new CSSStyleSheet();
|
||||
span.shadowRoot.adoptedStyleSheets = [sheet];
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
|
||||
// Replace and assert that the imported rule is NOT applied, but regular rule does apply.
|
||||
const sheet_promise = sheet.replace(import_text + ".target { color: blue; }");
|
||||
return sheet_promise.then((sheet) => {
|
||||
assert_equals(sheet.cssRules.length, 1);
|
||||
// @import not applied:
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
|
||||
// regular rule applied:
|
||||
assert_equals(getComputedStyle(targetSpan).color, "rgb(0, 0, 255)");
|
||||
}).catch((reason) => {
|
||||
assert_unreached(`Promise was rejected (${reason}) when it should have been resolved`);
|
||||
});
|
||||
}, 'CSSStyleSheet.replace ignores @import rule but still loads other rules');
|
||||
|
||||
test(() => {
|
||||
const span = document.createElement("span");
|
||||
thirdSection.appendChild(span);
|
||||
const shadowDiv = attachShadowDiv(span);
|
||||
const sheet = new CSSStyleSheet();
|
||||
span.shadowRoot.adoptedStyleSheets = [sheet];
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
|
||||
// Replace and assert that the imported rule is NOT applied.
|
||||
try {
|
||||
sheet.replaceSync(import_text);
|
||||
// replaceSync() ignores @import rules:
|
||||
assert_equals(sheet.cssRules.length, 0);
|
||||
assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
|
||||
} catch(reason) {
|
||||
assert_unreached(`replaceSync threw an exception (${reason}) when it shouldn't have`);
|
||||
}
|
||||
}, 'CSSStyleSheet.replaceSync allows, but ignores, import rule inside');
|
||||
|
||||
promise_test(() => {
|
||||
const sheet = new CSSStyleSheet();
|
||||
const sheet_promise = sheet.replace("@import url('not-there.css');");
|
||||
|
||||
return sheet_promise.then((sheet) => {
|
||||
assert_unreached("Promise was resolved when it should have been rejected");
|
||||
// No exception here
|
||||
}).catch((reason) => {
|
||||
assert_equals(reason.name, "NetworkError");
|
||||
assert_unreached("Promise was rejected");
|
||||
});
|
||||
}, 'CSSStyleSheet.replace returns rejected promise on failed imports');
|
||||
}, 'CSSStyleSheet.replace does not reject on failed imports');
|
||||
|
||||
test(() => {
|
||||
const span = document.createElement("span");
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="reftest-wait">
|
||||
<head>
|
||||
<title>CSS Filters: Repaint of element with background-image and blur filter</title>
|
||||
<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org">
|
||||
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#background-image">
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=415106">
|
||||
<link rel="match" href="reference/background-image-blur-repaint-expected.html">
|
||||
<meta name="assert" content="An element with background-image and a filter should be rendered correctly after other elements on the page change size. You should see a 50x50 green box over a blurred background."/>
|
||||
|
||||
<script src="/common/reftest-wait.js"></script>
|
||||
<script>
|
||||
function runTest() {
|
||||
function shrinkBox() {
|
||||
var box = document.getElementsByClassName("box")[0];
|
||||
box.style.width = "50px";
|
||||
box.style.height = "50px";
|
||||
}
|
||||
|
||||
// Wait for two requestAnimationFrame() calls to make sure that at least one
|
||||
// frame has been rendered before shrinking the box and taking the screenshot.
|
||||
requestAnimationFrame(function() {
|
||||
requestAnimationFrame(function() {
|
||||
shrinkBox();
|
||||
takeScreenshot();
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.bg {
|
||||
position: absolute;
|
||||
left: 200px;
|
||||
top: 0px;
|
||||
width: 400px;
|
||||
height: 300px;
|
||||
background-image: url(support/color-palette.png);
|
||||
filter: blur(8px);
|
||||
}
|
||||
.box {
|
||||
position: absolute;
|
||||
left: 300px;
|
||||
top: 50px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: green;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body onload="runTest()">
|
||||
<div class="bg"></div>
|
||||
<div class="box"></div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,19 @@
|
|||
<!doctype html>
|
||||
<title>SVG Filters: feColorMatrix filter</title>
|
||||
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
|
||||
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feColorMatrixElement">
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=227025">
|
||||
<link rel="match" href="reference/effect-reference-add-hw-001-ref.html">
|
||||
<meta name="assert" content="Check that a reference filter can be dynamically set on elements with will-change: transform."/>
|
||||
<div style="width: 100px; height: 100px; background-color: rgb(255, 0, 0); will-change: transform" id="div1"></div>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1">
|
||||
<defs>
|
||||
<filter id="colormatrix">
|
||||
<feColorMatrix type="matrix" values="0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
<script>
|
||||
var div = document.getElementById("div1");
|
||||
div.style.filter = "url(#colormatrix)";
|
||||
</script>
|
|
@ -6,7 +6,7 @@
|
|||
<link rel="match" href="reference/effect-reference-after-001-ref.html">
|
||||
<meta name="assert" content="Check that a reference filter with forward references work"/>
|
||||
<body>
|
||||
<img style="filter: url(#MyFilter);" src="support/reference.png">
|
||||
<img style="filter: url(#MyFilter);" src="support/color-palette.png">
|
||||
<svg width="0px" height="0px">
|
||||
<defs>
|
||||
<filter id="MyFilter">
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
.bg {
|
||||
position: absolute;
|
||||
left: 200px;
|
||||
top: 0px;
|
||||
width: 400px;
|
||||
height: 300px;
|
||||
background-image: url(../support/color-palette.png);
|
||||
filter: blur(8px);
|
||||
}
|
||||
.box {
|
||||
position: absolute;
|
||||
left: 300px;
|
||||
top: 50px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background-color: green;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="bg"></div>
|
||||
<div class="box"></div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,2 @@
|
|||
<!doctype html>
|
||||
<div style="width: 100px; height: 100px; background-color: rgb(0, 255, 0); will-change: transform"></div>
|
|
@ -7,6 +7,6 @@
|
|||
<feColorMatrix type="hueRotate" values="180"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg><img style="filter: url(#MyFilter);" src="../support/reference.png">
|
||||
</svg><img style="filter: url(#MyFilter);" src="../support/color-palette.png">
|
||||
</body>
|
||||
</html>
|
||||
|
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
@ -0,0 +1 @@
|
|||
Document-Policy: no-layout-animations
|
|
@ -1,24 +1,17 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/feature-policy/experimental-features/resources/common.js"></script>
|
||||
<script src="/document-policy/experimental-features/resources/common.js"></script>
|
||||
<title> 'layout-animations' Policy : violation reports from javascript
|
||||
</title>
|
||||
<body>
|
||||
<script>
|
||||
test(() => {
|
||||
document.featurePolicy.allowedFeatures().forEach((enabled_feature) => {
|
||||
assert_not_equals(enabled_feature, "layout-animations");
|
||||
});
|
||||
},
|
||||
"Verify 'layout-animations' is not in document's feature list.");
|
||||
|
||||
promise_test(async () => {
|
||||
let promise = wait_for_violation_in_file(
|
||||
"layout-animations",
|
||||
"animation-property-height.js");
|
||||
let script = document.createElement("script");
|
||||
script.src = "/feature-policy/experimental-features/resources/" +
|
||||
script.src = "/document-policy/experimental-features/resources/" +
|
||||
"animation-property-height.js";
|
||||
document.body.appendChild(script);
|
||||
await promise;
|
|
@ -0,0 +1 @@
|
|||
Document-Policy: no-layout-animations
|
|
@ -1,18 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/feature-policy/experimental-features/resources/common.js"></script>
|
||||
<script src="/document-policy/experimental-features/resources/common.js"></script>
|
||||
<title> 'layout-animations' Policy : violation reports from CSS keyframes
|
||||
</title>
|
||||
<body>
|
||||
<script>
|
||||
test(() => {
|
||||
document.featurePolicy.allowedFeatures().forEach((enabled_feature) => {
|
||||
assert_not_equals(enabled_feature, "layout-animations");
|
||||
});
|
||||
},
|
||||
"Sanity-check: 'layout-animations' is not in document's feature list.");
|
||||
|
||||
promise_test(async () => {
|
||||
let promise = wait_for_violation_in_file(
|
||||
"layout-animations", null /* source not specified */);
|
|
@ -0,0 +1 @@
|
|||
Document-Policy: no-layout-animations
|
|
@ -0,0 +1,90 @@
|
|||
const url_base = "/document-policy/experimental-features/resources/";
|
||||
window.messageResponseCallback = null;
|
||||
|
||||
// Returns a promise which is resolved when the <iframe> is navigated to |url|
|
||||
// and "load" handler has been called.
|
||||
function loadUrlInIframe(iframe, url) {
|
||||
return new Promise((resolve) => {
|
||||
iframe.addEventListener("load", resolve);
|
||||
iframe.src = url;
|
||||
});
|
||||
}
|
||||
|
||||
// Posts |message| to |target| and resolves the promise with the response coming
|
||||
// back from |target|.
|
||||
function sendMessageAndGetResponse(target, message) {
|
||||
return new Promise((resolve) => {
|
||||
window.messageResponseCallback = resolve;
|
||||
target.postMessage(message, "*");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function onMessage(e) {
|
||||
if (window.messageResponseCallback) {
|
||||
window.messageResponseCallback(e.data);
|
||||
window.messageResponseCallback = null;
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("message", onMessage);
|
||||
|
||||
// Waits for |load_timeout| before resolving the promise. It will resolve the
|
||||
// promise sooner if a message event with |e.data.id| of |id| is received.
|
||||
// In such a case the response is the contents of the message |e.data.contents|.
|
||||
// Otherwise, returns false (when timeout occurs).
|
||||
function waitForMessageOrTimeout(t, id, load_timeout) {
|
||||
return new Promise((resolve) => {
|
||||
window.addEventListener(
|
||||
"message",
|
||||
(e) => {
|
||||
if (!e.data || e.data.id !== id)
|
||||
return;
|
||||
resolve(e.data.contents);
|
||||
}
|
||||
);
|
||||
t.step_timeout(() => { resolve(false); }, load_timeout);
|
||||
});
|
||||
}
|
||||
|
||||
function createIframe(container, attributes) {
|
||||
var new_iframe = document.createElement("iframe");
|
||||
for (attr_name in attributes)
|
||||
new_iframe.setAttribute(attr_name, attributes[attr_name]);
|
||||
container.appendChild(new_iframe);
|
||||
return new_iframe;
|
||||
}
|
||||
|
||||
// Returns a promise which is resolved when |load| event is dispatched for |e|.
|
||||
function wait_for_load(e) {
|
||||
return new Promise((resolve) => {
|
||||
e.addEventListener("load", resolve);
|
||||
});
|
||||
}
|
||||
|
||||
setup(() => {
|
||||
window.reporting_observer_instance = new ReportingObserver((reports, observer) => {
|
||||
if (window.reporting_observer_callback) {
|
||||
reports.forEach(window.reporting_observer_callback);
|
||||
}
|
||||
}, {types: ["document-policy-violation"]});
|
||||
window.reporting_observer_instance.observe();
|
||||
window.reporting_observer_callback = null;
|
||||
});
|
||||
|
||||
// Waits for a violation in |feature| and source file containing |file_name|.
|
||||
function wait_for_violation_in_file(feature, file_name) {
|
||||
return new Promise( (resolve) => {
|
||||
assert_equals(null, window.reporting_observer_callback);
|
||||
window.reporting_observer_callback = (report) => {
|
||||
var feature_match = (feature === report.body.featureId);
|
||||
var file_name_match =
|
||||
!file_name ||
|
||||
(report.body.sourceFile.indexOf(file_name) !== -1);
|
||||
if (feature_match && file_name_match) {
|
||||
window.reporting_observer_callback = null;
|
||||
resolve(report);
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
Feature-Policy: layout-animations 'none'
|
|
@ -1 +0,0 @@
|
|||
Feature-Policy: layout-animations 'none'
|
|
@ -1 +0,0 @@
|
|||
Feature-Policy: layout-animations 'none'
|
|
@ -6,7 +6,7 @@
|
|||
Promise.resolve().then(async () => {
|
||||
try {
|
||||
await test_driver.set_permission(
|
||||
{ name: 'wake-lock', type: 'screen' }, 'granted', false);
|
||||
{ name: 'screen-wake-lock' }, 'granted', false);
|
||||
|
||||
const wakeLock = await navigator.wakeLock.request("screen");
|
||||
await wakeLock.release();
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
<details open><summary id="summary-first"></summary><summary id="summary-second"></summary></details>
|
||||
<div contenteditable="true"></div>
|
||||
<iframe></iframe>
|
||||
<svg><a id="svg-a"></a></svg>
|
||||
<svg><text id="svg-text"></text></svg>
|
||||
<img>
|
||||
</div>
|
||||
<script>
|
||||
setup({ explicit_done: true });
|
||||
|
@ -34,6 +37,9 @@ function runTests() {
|
|||
['#summary-second', false],
|
||||
['[contenteditable]', true],
|
||||
['iframe', true],
|
||||
['#svg-a', false],
|
||||
['#svg-text', false],
|
||||
['img', false],
|
||||
];
|
||||
for (entry of defaultList) {
|
||||
test(() => {
|
||||
|
@ -52,8 +58,11 @@ function runTests() {
|
|||
|
||||
<div id="tabindex-0">
|
||||
<a tabindex="0"></a>
|
||||
<svg><a tabindex="0"></a></svg>
|
||||
<svg><text tabindex="0"></text></svg>
|
||||
<summary tabindex="0" id="summary-out-tabindex0"></summary>
|
||||
<details open><summary id="summary-first"></summary><summary tabindex="0" id="summary-second-tabindex0"></summary></details>
|
||||
<img tabindex="0">
|
||||
</div>
|
||||
<script>
|
||||
function runTests_tabindex0() {
|
||||
|
@ -67,6 +76,58 @@ function runTests_tabindex0() {
|
|||
}, elementDesc + ' with tabindex=0 should be focusable.');
|
||||
}
|
||||
|
||||
runTests_tabindex_negative();
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="tabindex-negative">
|
||||
<a tabindex="-1"></a>
|
||||
<svg><a tabindex="-1"></a></svg>
|
||||
<svg><text tabindex="-1"></text></svg>
|
||||
<summary tabindex="-1" id="summary-out-tabindex-negative"></summary>
|
||||
<details open><summary id="summary-first"></summary><summary tabindex="0" id="summary-second-tabindex-negative"></summary></details>
|
||||
<img tabindex="-1">
|
||||
</div>
|
||||
<script>
|
||||
function runTests_tabindex_negative() {
|
||||
for (element of document.querySelectorAll('#tabindex-negative [tabindex]')) {
|
||||
var elementDesc = element.tagName;
|
||||
if (element.id)
|
||||
elementDesc += '#' + element.id;
|
||||
test(() => {
|
||||
element.focus();
|
||||
assert_equals(document.activeElement, element);
|
||||
}, elementDesc + ' with tabindex=-1 should be focusable.');
|
||||
}
|
||||
|
||||
runTests_tabindex_invalid();
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="tabindex-invalid">
|
||||
<a tabindex="invalid"></a>
|
||||
<a href="#" tabindex="invalid" id="with-href" data-focusable=true></a>
|
||||
<svg><a tabindex="invalid"></a></svg>
|
||||
<svg><a href="#" tabindex="invalid" id="with-href" data-focusable=true></a></svg>
|
||||
<svg><text tabindex="invalid"></text></svg>
|
||||
<div tabindex="invalid"></div>
|
||||
<summary tabindex="invalid" id="summary-out-tabindex-invalid"></summary>
|
||||
<img tabindex="invalid">
|
||||
</div>
|
||||
<script>
|
||||
function runTests_tabindex_invalid() {
|
||||
for (element of document.querySelectorAll('#tabindex-invalid [tabindex]')) {
|
||||
var focusable = element.dataset && element.dataset.focusable;
|
||||
var elementDesc = element.tagName;
|
||||
if (element.id)
|
||||
elementDesc += '#' + element.id;
|
||||
test(() => {
|
||||
element.focus();
|
||||
focusable ? assert_equals(document.activeElement, element)
|
||||
: assert_not_equals(document.activeElement, element);
|
||||
}, `${elementDesc} with tabindex=invalid should ${focusable ? "be" : "not be"} focusable.`);
|
||||
}
|
||||
|
||||
done();
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -22,13 +22,13 @@
|
|||
const iframe = document.createElement("iframe");
|
||||
iframe.src = "resources/css-module-at-import-iframe.html";
|
||||
iframe.onload = test.step_func_done(function () {
|
||||
assert_equals(iframe.contentDocument.load_error, "NotAllowedError");
|
||||
assert_equals(iframe.contentDocument.load_error, undefined);
|
||||
assert_not_equals(getComputedStyle(iframe.contentDocument.querySelector('#test'))
|
||||
.backgroundColor, "rgb(255, 0, 0)",
|
||||
"CSS module @import should not succeed");
|
||||
});
|
||||
document.body.appendChild(iframe);
|
||||
}, "An @import CSS Module should not load");
|
||||
}, "An @import CSS Module should not load, but should not throw an exception");
|
||||
|
||||
async_test(function (test) {
|
||||
const iframe = document.createElement("iframe");
|
||||
|
|
|
@ -23,6 +23,19 @@ var audioConfigurationWithSpatialRendering = {
|
|||
spatialRendering: true,
|
||||
};
|
||||
|
||||
// VideoConfiguration with optional hdrMetadataType, colorGamut, and
|
||||
// transferFunction properties.
|
||||
var videoConfigurationWithDynamicRange = {
|
||||
contentType: 'video/webm; codecs="vp09.00.10.08"',
|
||||
width: 800,
|
||||
height: 600,
|
||||
bitrate: 3000,
|
||||
framerate: 24,
|
||||
hdrMetadataType: "smpteSt2086",
|
||||
colorGamut: "srgb",
|
||||
transferFunction: "srgb",
|
||||
}
|
||||
|
||||
promise_test(t => {
|
||||
return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo());
|
||||
}, "Test that decodingInfo rejects if it doesn't get a configuration");
|
||||
|
@ -314,3 +327,57 @@ promise_test(t => {
|
|||
assert_equals(typeof ability.keySystemAccess, "object");
|
||||
});
|
||||
}, "Test that decodingInfo with spatialRendering set returns a valid MediaCapabilitiesInfo objects");
|
||||
|
||||
promise_test(t => {
|
||||
return navigator.mediaCapabilities.decodingInfo({
|
||||
type: 'file',
|
||||
video: videoConfigurationWithDynamicRange,
|
||||
}).then(ability => {
|
||||
assert_equals(typeof ability.supported, "boolean");
|
||||
assert_equals(typeof ability.smooth, "boolean");
|
||||
assert_equals(typeof ability.powerEfficient, "boolean");
|
||||
assert_equals(typeof ability.keySystemAccess, "object");
|
||||
});
|
||||
}, "Test that decodingInfo with hdrMetadataType, colorGamut, and transferFunction set returns a valid MediaCapabilitiesInfo objects");
|
||||
|
||||
promise_test(t => {
|
||||
return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({
|
||||
type: 'file',
|
||||
video: {
|
||||
contentType: 'video/webm; codecs="vp09.00.10.08"',
|
||||
width: 800,
|
||||
height: 600,
|
||||
bitrate: 3000,
|
||||
framerate: 24,
|
||||
hdrMetadataType: ""
|
||||
},
|
||||
}));
|
||||
}, "Test that decodingInfo rejects if the video configuration has an empty hdrMetadataType");
|
||||
|
||||
promise_test(t => {
|
||||
return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({
|
||||
type: 'file',
|
||||
video: {
|
||||
contentType: 'video/webm; codecs="vp09.00.10.08"',
|
||||
width: 800,
|
||||
height: 600,
|
||||
bitrate: 3000,
|
||||
framerate: 24,
|
||||
colorGamut: true
|
||||
},
|
||||
}));
|
||||
}, "Test that decodingInfo rejects if the video configuration has a colorGamut set to true");
|
||||
|
||||
promise_test(t => {
|
||||
return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({
|
||||
type: 'file',
|
||||
video: {
|
||||
contentType: 'video/webm; codecs="vp09.00.10.08"',
|
||||
width: 800,
|
||||
height: 600,
|
||||
bitrate: 3000,
|
||||
framerate: 24,
|
||||
transferFunction: 3
|
||||
},
|
||||
}));
|
||||
}, "Test that decodingInfo rejects if the video configuration has a transferFunction set to 3");
|
||||
|
|
|
@ -0,0 +1,129 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>RTCRtpSendParameters degradationPreference</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('video');
|
||||
|
||||
let param = sender.getParameters();
|
||||
|
||||
assert_equals(param.degradationPreference, undefined,
|
||||
'Expect initial param.degradationPreference to be undefined');
|
||||
|
||||
param.degradationPreference = 'maintain-framerate';
|
||||
await sender.setParameters(param);
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, 'maintain-framerate');
|
||||
|
||||
param.degradationPreference = 'maintain-resolution';
|
||||
await sender.setParameters(param);
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, 'maintain-resolution');
|
||||
|
||||
param.degradationPreference = 'balanced';
|
||||
await sender.setParameters(param);
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, 'balanced');
|
||||
|
||||
param.degradationPreference = undefined;
|
||||
await sender.setParameters(param);
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, undefined);
|
||||
}, 'setParameters with degradationPreference set should succeed on video transceiver');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('video');
|
||||
|
||||
let param = sender.getParameters();
|
||||
|
||||
assert_equals(param.degradationPreference, undefined,
|
||||
'Expect initial param.degradationPreference to be undefined');
|
||||
|
||||
param.degradationPreference = undefined;
|
||||
|
||||
await sender.setParameters(param);
|
||||
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, undefined);
|
||||
}, 'setParameters with degradationPreference unset should succeed on video transceiver');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('video');
|
||||
|
||||
let param = sender.getParameters();
|
||||
param.degradationPreference = 'invalid';
|
||||
|
||||
return promise_rejects_js(t, TypeError, sender.setParameters(param));
|
||||
}, 'setParameters with invalid degradationPreference should throw TypeError on video transceiver');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
|
||||
let param = sender.getParameters();
|
||||
|
||||
assert_equals(param.degradationPreference, undefined,
|
||||
'Expect initial param.degradationPreference to be undefined');
|
||||
|
||||
param.degradationPreference = 'maintain-framerate';
|
||||
await sender.setParameters(param);
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, 'maintain-framerate');
|
||||
|
||||
param.degradationPreference = 'maintain-resolution';
|
||||
await sender.setParameters(param);
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, 'maintain-resolution');
|
||||
|
||||
param.degradationPreference = 'balanced';
|
||||
await sender.setParameters(param);
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, 'balanced');
|
||||
|
||||
param.degradationPreference = undefined;
|
||||
await sender.setParameters(param);
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, undefined);
|
||||
}, 'setParameters with degradationPreference set should succeed on audio transceiver');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
|
||||
let param = sender.getParameters();
|
||||
|
||||
assert_equals(param.degradationPreference, undefined,
|
||||
'Expect initial param.degradationPreference to be undefined');
|
||||
|
||||
param.degradationPreference = undefined;
|
||||
|
||||
await sender.setParameters(param);
|
||||
|
||||
param = sender.getParameters();
|
||||
assert_equals(param.degradationPreference, undefined);
|
||||
}, 'setParameters with degradationPreference unset should succeed on audio transceiver');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
|
||||
let param = sender.getParameters();
|
||||
param.degradationPreference = 'invalid';
|
||||
|
||||
return promise_rejects_js(t, TypeError, sender.setParameters(param));
|
||||
}, 'setParameters with invalid degradationPreference should throw TypeError on audio transceiver');
|
||||
|
||||
</script>
|
|
@ -34,7 +34,7 @@ from mod_pywebsocket import standalone as pywebsocket
|
|||
|
||||
|
||||
EDIT_HOSTS_HELP = ("Please ensure all the necessary WPT subdomains "
|
||||
"are mapped to a loopback device in /etc/hosts. "
|
||||
"are mapped to a loopback device in /etc/hosts.\n"
|
||||
"See https://web-platform-tests.org/running-tests/from-local-system.html#system-setup "
|
||||
"for instructions.")
|
||||
|
||||
|
@ -419,10 +419,10 @@ class ServerProc(object):
|
|||
try:
|
||||
self.daemon = init_func(host, port, paths, routes, bind_address, config, **kwargs)
|
||||
except socket.error:
|
||||
print("Socket error on port %s" % port, file=sys.stderr)
|
||||
logger.critical("Socket error on port %s" % port, file=sys.stderr)
|
||||
raise
|
||||
except Exception:
|
||||
print(traceback.format_exc(), file=sys.stderr)
|
||||
logger.critical(traceback.format_exc())
|
||||
raise
|
||||
|
||||
if self.daemon:
|
||||
|
@ -538,7 +538,17 @@ def start_servers(host, ports, paths, routes, bind_address, config, **kwargs):
|
|||
return servers
|
||||
|
||||
|
||||
def startup_failed(log=True):
|
||||
# Log=False is a workaround for https://github.com/web-platform-tests/wpt/issues/22719
|
||||
if log:
|
||||
logger.critical(EDIT_HOSTS_HELP)
|
||||
else:
|
||||
print("CRITICAL %s" % EDIT_HOSTS_HELP, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def start_http_server(host, port, paths, routes, bind_address, config, **kwargs):
|
||||
try:
|
||||
return wptserve.WebTestHttpd(host=host,
|
||||
port=port,
|
||||
doc_root=paths["doc_root"],
|
||||
|
@ -550,9 +560,12 @@ def start_http_server(host, port, paths, routes, bind_address, config, **kwargs)
|
|||
key_file=None,
|
||||
certificate=None,
|
||||
latency=kwargs.get("latency"))
|
||||
except Exception:
|
||||
startup_failed()
|
||||
|
||||
|
||||
def start_https_server(host, port, paths, routes, bind_address, config, **kwargs):
|
||||
try:
|
||||
return wptserve.WebTestHttpd(host=host,
|
||||
port=port,
|
||||
doc_root=paths["doc_root"],
|
||||
|
@ -565,9 +578,12 @@ def start_https_server(host, port, paths, routes, bind_address, config, **kwargs
|
|||
certificate=config.ssl_config["cert_path"],
|
||||
encrypt_after_connect=config.ssl_config["encrypt_after_connect"],
|
||||
latency=kwargs.get("latency"))
|
||||
except Exception:
|
||||
startup_failed()
|
||||
|
||||
|
||||
def start_http2_server(host, port, paths, routes, bind_address, config, **kwargs):
|
||||
try:
|
||||
return wptserve.WebTestHttpd(host=host,
|
||||
port=port,
|
||||
handler_cls=wptserve.Http2WebTestRequestHandler,
|
||||
|
@ -582,6 +598,8 @@ def start_http2_server(host, port, paths, routes, bind_address, config, **kwargs
|
|||
encrypt_after_connect=config.ssl_config["encrypt_after_connect"],
|
||||
latency=kwargs.get("latency"),
|
||||
http2=True)
|
||||
except Exception:
|
||||
startup_failed()
|
||||
|
||||
|
||||
class WebSocketDaemon(object):
|
||||
|
@ -603,6 +621,12 @@ class WebSocketDaemon(object):
|
|||
opts.is_executable_method = None
|
||||
self.server = pywebsocket.WebSocketServer(opts)
|
||||
ports = [item[0].getsockname()[1] for item in self.server._sockets]
|
||||
if not ports:
|
||||
# TODO: Fix the logging configuration in WebSockets processes
|
||||
# see https://github.com/web-platform-tests/wpt/issues/22719
|
||||
print("Failed to start websocket server on port %s, "
|
||||
"is something already using that port?" % port, file=sys.stderr)
|
||||
raise OSError()
|
||||
assert all(item == ports[0] for item in ports)
|
||||
self.port = ports[0]
|
||||
self.started = False
|
||||
|
@ -651,12 +675,15 @@ def start_ws_server(host, port, paths, routes, bind_address, config, **kwargs):
|
|||
# in the logging module unlocked
|
||||
reload_module(logging)
|
||||
release_mozlog_lock()
|
||||
try:
|
||||
return WebSocketDaemon(host,
|
||||
str(port),
|
||||
repo_root,
|
||||
config.paths["ws_doc_root"],
|
||||
bind_address,
|
||||
ssl_config=None)
|
||||
except Exception:
|
||||
startup_failed(log=False)
|
||||
|
||||
|
||||
def start_wss_server(host, port, paths, routes, bind_address, config, **kwargs):
|
||||
|
@ -664,12 +691,15 @@ def start_wss_server(host, port, paths, routes, bind_address, config, **kwargs):
|
|||
# in the logging module unlocked
|
||||
reload_module(logging)
|
||||
release_mozlog_lock()
|
||||
try:
|
||||
return WebSocketDaemon(host,
|
||||
str(port),
|
||||
repo_root,
|
||||
config.paths["ws_doc_root"],
|
||||
bind_address,
|
||||
config.ssl_config)
|
||||
except Exception:
|
||||
startup_failed(log=False)
|
||||
|
||||
|
||||
def start(config, routes, **kwargs):
|
||||
|
@ -892,7 +922,8 @@ def run(**kwargs):
|
|||
signal.signal(signal.SIGTERM, handle_signal)
|
||||
signal.signal(signal.SIGINT, handle_signal)
|
||||
|
||||
while all(item.is_alive() for item in iter_procs(servers)) and not received_signal.is_set():
|
||||
while (all(item.is_alive() for item in iter_procs(servers)) and
|
||||
not received_signal.is_set()):
|
||||
for item in iter_procs(servers):
|
||||
item.join(1)
|
||||
exited = [item for item in iter_procs(servers) if not item.is_alive()]
|
||||
|
|
|
@ -92,6 +92,7 @@ class TestEnvironment(object):
|
|||
|
||||
self.servers = serve.start(self.config,
|
||||
self.get_routes())
|
||||
|
||||
if self.options.get("supports_debugger") and self.debug_info and self.debug_info.interactive:
|
||||
self.ignore_interrupts()
|
||||
return self
|
||||
|
@ -212,8 +213,10 @@ class TestEnvironment(object):
|
|||
each_sleep_secs = 0.5
|
||||
end_time = time.time() + total_sleep_secs
|
||||
while time.time() < end_time:
|
||||
failed = self.test_servers()
|
||||
if not failed:
|
||||
failed, pending = self.test_servers()
|
||||
if failed:
|
||||
break
|
||||
if not pending:
|
||||
return
|
||||
time.sleep(each_sleep_secs)
|
||||
raise EnvironmentError("Servers failed to start: %s" %
|
||||
|
@ -221,19 +224,23 @@ class TestEnvironment(object):
|
|||
|
||||
def test_servers(self):
|
||||
failed = []
|
||||
pending = []
|
||||
host = self.config["server_host"]
|
||||
for scheme, servers in iteritems(self.servers):
|
||||
for port, server in servers:
|
||||
if self.test_server_port:
|
||||
if not server.is_alive():
|
||||
failed.append((scheme, port))
|
||||
|
||||
if not failed and self.test_server_port:
|
||||
for scheme, servers in iteritems(self.servers):
|
||||
for port, server in servers:
|
||||
s = socket.socket()
|
||||
s.settimeout(0.1)
|
||||
try:
|
||||
s.connect((host, port))
|
||||
except socket.error:
|
||||
failed.append((host, port))
|
||||
pending.append((host, port))
|
||||
finally:
|
||||
s.close()
|
||||
|
||||
if not server.is_alive():
|
||||
failed.append((scheme, port))
|
||||
return failed
|
||||
return failed, pending
|
||||
|
|
|
@ -64,12 +64,6 @@ handler returns, or for directly writing to the output stream.
|
|||
"""
|
||||
|
||||
|
||||
EDIT_HOSTS_HELP = ("Please ensure all the necessary WPT subdomains "
|
||||
"are mapped to a loopback device in /etc/hosts. "
|
||||
"See https://web-platform-tests.org/running-tests/from-local-system.html#system-setup "
|
||||
"for instructions.")
|
||||
|
||||
|
||||
class RequestRewriter(object):
|
||||
def __init__(self, rules):
|
||||
"""Object for rewriting the request path.
|
||||
|
@ -676,7 +670,8 @@ class WebTestHttpd(object):
|
|||
|
||||
_host, self.port = self.httpd.socket.getsockname()
|
||||
except Exception:
|
||||
self.logger.critical("Failed to start HTTP server. {}".format(EDIT_HOSTS_HELP))
|
||||
self.logger.critical("Failed to start HTTP server on port %s; "
|
||||
"is something already using that port?" % port)
|
||||
raise
|
||||
|
||||
def start(self, block=False):
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
promise_test(async t => {
|
||||
await test_driver.set_permission(
|
||||
{ name: 'wake-lock', type: 'system' }, 'granted', false);
|
||||
{ name: 'system-wake-lock' }, 'granted', false);
|
||||
|
||||
await fetch_tests_from_worker(new Worker('resources/idlharness-worker.js'));
|
||||
}, 'Run idlharness tests in a worker.');
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// META: script=/resources/testdriver.js
|
||||
// META: script=/resources/testdriver-vendor.js
|
||||
|
||||
// https://w3c.github.io/wake-lock/
|
||||
// https://w3c.github.io/screen-wake-lock/
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -19,7 +19,7 @@ idl_test(
|
|||
});
|
||||
|
||||
await test_driver.set_permission(
|
||||
{ name: 'wake-lock', type: 'screen' }, 'granted', false);
|
||||
{ name: 'screen-wake-lock' }, 'granted', false);
|
||||
self.sentinel = await navigator.wakeLock.request('screen');
|
||||
self.sentinel.release();
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
promise_test(async t => {
|
||||
await test_driver.set_permission(
|
||||
{ name: 'wake-lock', type: 'screen' }, 'granted', false);
|
||||
{ name: 'screen-wake-lock' }, 'granted', false);
|
||||
await navigator.wakeLock.request('screen').then(lock => lock.release());
|
||||
}, 'Feature-Policy header {"screen-wake-lock" : ["*"]} allows the top-level document.');
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
promise_test(async t => {
|
||||
await test_driver.set_permission(
|
||||
{ name: 'wake-lock', type: 'screen' }, 'granted', false);
|
||||
{ name: 'screen-wake-lock' }, 'granted', false);
|
||||
await navigator.wakeLock.request('screen').then(lock => lock.release());
|
||||
}, 'Feature-Policy header screen-wake-lock "self" allows the top-level document.');
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://w3c.github.io/wake-lock/#the-onrelease-attribute">
|
||||
<link rel="help" href="https://w3c.github.io/screen-wake-lock/#the-onrelease-attribute">
|
||||
<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>
|
||||
async_test(async t => {
|
||||
await test_driver.set_permission({name: 'wake-lock', type: 'screen'}, 'granted', false);
|
||||
await test_driver.set_permission({name: 'screen-wake-lock'}, 'granted', false);
|
||||
|
||||
const lock = await navigator.wakeLock.request("screen");
|
||||
lock.onrelease = t.step_func_done((ev) => {
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
'use strict';
|
||||
|
||||
promise_test(async t => {
|
||||
await test_driver.set_permission({name: 'wake-lock', type: 'screen'}, 'denied', false);
|
||||
await test_driver.set_permission({name: 'screen-wake-lock'}, 'denied', false);
|
||||
return promise_rejects_dom(t, "NotAllowedError", navigator.wakeLock.request('screen'));
|
||||
}, 'Denied requests should abort with NotAllowedError');
|
||||
</script>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Test that wake-lock is advertised in the feature list</title>
|
||||
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||
<link rel="help" href="https://w3c.github.io/wake-lock/#dfn-wake-lock-feature">
|
||||
<link rel="help" href="https://w3c.github.io/screen-wake-lock/#dfn-wake-lock-feature">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
|
|
|
@ -5,29 +5,21 @@
|
|||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<script>
|
||||
promise_test(t => {
|
||||
return promise_rejects_js(t, TypeError, navigator.permissions.query({ name:'wake-lock' }));
|
||||
}, "WakeLockPermissionDescriptor's type attribute is required");
|
||||
|
||||
promise_test(t => {
|
||||
return promise_rejects_js(t, TypeError, navigator.permissions.query({ name: 'wake-lock', type: 'foo' }));
|
||||
}, "WakeLockPermissionDescriptor's type attribute must be a WakeLockType");
|
||||
|
||||
promise_test(async t => {
|
||||
await test_driver.set_permission({name: 'wake-lock', type: 'screen'}, 'denied', false);
|
||||
await test_driver.set_permission({name: 'screen-wake-lock'}, 'denied', false);
|
||||
|
||||
return navigator.permissions.query({name:'wake-lock', type: 'screen'}).then(status => {
|
||||
return navigator.permissions.query({name:'screen-wake-lock'}).then(status => {
|
||||
assert_class_string(status, "PermissionStatus");
|
||||
assert_equals(status.state, "denied");
|
||||
});
|
||||
}, "WakeLockPermissionDescriptor with type=screen works");
|
||||
}, "PermissionDescriptor with name='screen-wake-lock' works");
|
||||
|
||||
promise_test(async t => {
|
||||
await test_driver.set_permission({name: 'wake-lock', type: 'system'}, 'denied', false);
|
||||
await test_driver.set_permission({name: 'system-wake-lock'}, 'denied', false);
|
||||
|
||||
return navigator.permissions.query({ name: 'wake-lock', type: 'system' }).then(status => {
|
||||
return navigator.permissions.query({ name: 'system-wake-lock' }).then(status => {
|
||||
assert_class_string(status, "PermissionStatus");
|
||||
assert_equals(status.state, "denied");
|
||||
});
|
||||
}, "WakeLockPermissionDescriptor with type=system works");
|
||||
}, "PermissionDescriptor with name='system-wake-lock' works");
|
||||
</script>
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
|
||||
RTCRtcpParameters rtcp;
|
||||
sequence<RTCRtpCodecParameters> codecs;
|
||||
RTCDegradationPreference degradationPreference;
|
||||
};
|
||||
|
||||
dictionary RTCRtpCodecParameters {
|
||||
|
|
|
@ -1,87 +0,0 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>RTCRtpParameters degradationPreference</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="dictionary-helper.js"></script>
|
||||
<script src="RTCRtpParameters-helper.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
// Test is based on the following editor draft:
|
||||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCRtpParameters-helper.js:
|
||||
// validateSenderRtpParameters
|
||||
|
||||
/*
|
||||
5.2. RTCRtpSender Interface
|
||||
interface RTCRtpSender {
|
||||
Promise<void> setParameters(optional RTCRtpParameters parameters);
|
||||
RTCRtpParameters getParameters();
|
||||
};
|
||||
|
||||
dictionary RTCRtpParameters {
|
||||
DOMString transactionId;
|
||||
sequence<RTCRtpEncodingParameters> encodings;
|
||||
sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
|
||||
RTCRtcpParameters rtcp;
|
||||
sequence<RTCRtpCodecParameters> codecs;
|
||||
RTCDegradationPreference degradationPreference;
|
||||
};
|
||||
|
||||
enum RTCDegradationPreference {
|
||||
"maintain-framerate",
|
||||
"maintain-resolution",
|
||||
"balanced"
|
||||
};
|
||||
|
||||
- degradationPreference is set to the last value passed into setParameters,
|
||||
or the default value of "balanced" if setParameters hasn't been called.
|
||||
*/
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
assert_equals(param.degradationPreference, 'balanced',
|
||||
'Expect initial param.degradationPreference to be balanced');
|
||||
|
||||
param.degradationPreference = 'maintain-framerate';
|
||||
|
||||
return pc.setParameters(param)
|
||||
.then(() => {
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
assert_equals(param.degradationPreference, 'maintain-framerate');
|
||||
});
|
||||
}, 'setParameters with degradationPreference set should succeed');
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
assert_equals(param.degradationPreference, 'balanced',
|
||||
'Expect initial param.degradationPreference to be balanced');
|
||||
|
||||
param.degradationPreference = undefined;
|
||||
|
||||
return pc.setParameters(param)
|
||||
.then(() => {
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
assert_equals(param.degradationPreference, undefined);
|
||||
});
|
||||
}, 'setParameters with degradationPreference unset should succeed');
|
||||
|
||||
</script>
|
|
@ -41,7 +41,6 @@
|
|||
sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
|
||||
RTCRtcpParameters rtcp;
|
||||
sequence<RTCRtpCodecParameters> codecs;
|
||||
RTCDegradationPreference degradationPreference;
|
||||
};
|
||||
|
||||
dictionary RTCRtpEncodingParameters {
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
|
||||
RTCRtcpParameters rtcp;
|
||||
sequence<RTCRtpCodecParameters> codecs;
|
||||
RTCDegradationPreference degradationPreference;
|
||||
};
|
||||
|
||||
dictionary RTCRtpHeaderExtensionParameters {
|
||||
|
|
|
@ -46,9 +46,6 @@ async function doOfferAnswerExchange(t, caller) {
|
|||
|
||||
- rtcp.cname is set to the CNAME of the associated RTCPeerConnection. rtcp.reducedSize
|
||||
is set to true if reduced-size RTCP has been negotiated for sending, and false otherwise.
|
||||
|
||||
- degradationPreference is set to the last value passed into setParameters, or the
|
||||
default value of "balanced" if setParameters hasn't been called.
|
||||
*/
|
||||
function validateSenderRtpParameters(param) {
|
||||
validateRtpParameters(param);
|
||||
|
@ -80,7 +77,7 @@ function validateSenderRtpParameters(param) {
|
|||
- rtcp.reducedSize is set to true if the receiver is currently prepared to receive
|
||||
reduced-size RTCP packets, and false otherwise. rtcp.cname is left undefined.
|
||||
|
||||
- transactionId and degradationPreference are left undefined.
|
||||
- transactionId is left undefined.
|
||||
*/
|
||||
function validateReceiverRtpParameters(param) {
|
||||
validateRtpParameters(param);
|
||||
|
@ -93,9 +90,6 @@ function validateReceiverRtpParameters(param) {
|
|||
|
||||
assert_equals(param.rtcp.cname, undefined,
|
||||
'Expect receiver param.rtcp.cname to be unset');
|
||||
|
||||
assert_equals(param.degradationPreference, undefined,
|
||||
'Expect receiver param.degradationPreference to be unset');
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -105,7 +99,6 @@ function validateReceiverRtpParameters(param) {
|
|||
sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
|
||||
RTCRtcpParameters rtcp;
|
||||
sequence<RTCRtpCodecParameters> codecs;
|
||||
RTCDegradationPreference degradationPreference;
|
||||
};
|
||||
|
||||
enum RTCDegradationPreference {
|
||||
|
@ -134,9 +127,6 @@ function validateRtpParameters(param) {
|
|||
for(const codec of param.codecs) {
|
||||
validateCodecParameters(codec);
|
||||
}
|
||||
|
||||
assert_optional_enum_field(param, 'degradationPreference',
|
||||
['maintain-framerate', 'maintain-resolution', 'balanced']);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
|
||||
RTCRtcpParameters rtcp;
|
||||
sequence<RTCRtpCodecParameters> codecs;
|
||||
RTCDegradationPreference degradationPreference;
|
||||
};
|
||||
|
||||
dictionary RTCRtcpParameters {
|
||||
|
|
|
@ -48,7 +48,6 @@
|
|||
sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
|
||||
RTCRtcpParameters rtcp;
|
||||
sequence<RTCRtpCodecParameters> codecs;
|
||||
RTCDegradationPreference degradationPreference;
|
||||
};
|
||||
|
||||
getParameters
|
||||
|
|
|
@ -30,8 +30,6 @@
|
|||
|
||||
- rtcp.reducedSize is set to true if the receiver is currently prepared to receive
|
||||
reduced-size RTCP packets, and false otherwise. rtcp.cname is left undefined.
|
||||
|
||||
- transactionId and degradationPreference are left undefined.
|
||||
*/
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue