Update web-platform-tests to revision ef44bff0adaa07f2e420a0cbc1bc493cd5786656

This commit is contained in:
WPT Sync Bot 2019-06-27 10:26:43 +00:00
parent 61cadfa9a6
commit 67592a2228
61 changed files with 981 additions and 481 deletions

View file

@ -263029,6 +263029,9 @@
"fetch/origin/resources/redirect-and-stash.py": [ "fetch/origin/resources/redirect-and-stash.py": [
[] []
], ],
"fetch/origin/resources/referrer-policy.py": [
[]
],
"fetch/range/resources/basic.html": [ "fetch/range/resources/basic.html": [
[] []
], ],
@ -271033,10 +271036,13 @@
"kv-storage/META.yml": [ "kv-storage/META.yml": [
[] []
], ],
"kv-storage/helpers/class-assert.js": [ "kv-storage/helpers/equality-asserters.js": [
[] []
], ],
"kv-storage/helpers/equality-asserters.js": [ "kv-storage/helpers/expose-as-global.html": [
[]
],
"kv-storage/helpers/iter-assert.js": [
[] []
], ],
"kv-storage/helpers/kvs-tests.js": [ "kv-storage/helpers/kvs-tests.js": [
@ -340422,24 +340428,9 @@
{} {}
] ]
], ],
"fetch/origin/no-cors.any.js": [ "fetch/origin/assorted.window.js": [
[ [
"fetch/origin/no-cors.any.html", "fetch/origin/assorted.window.html",
{
"script_metadata": [
[
"script",
"/common/utils.js"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
],
[
"fetch/origin/no-cors.any.worker.html",
{ {
"script_metadata": [ "script_metadata": [
[ [
@ -356832,12 +356823,6 @@
{} {}
] ]
], ],
"kv-storage/api-surface.https.html": [
[
"kv-storage/api-surface.https.html",
{}
]
],
"kv-storage/backingstore.https.html": [ "kv-storage/backingstore.https.html": [
[ [
"kv-storage/backingstore.https.html", "kv-storage/backingstore.https.html",
@ -356847,12 +356832,22 @@
"kv-storage/cause-errors-via-idb.https.html": [ "kv-storage/cause-errors-via-idb.https.html": [
[ [
"kv-storage/cause-errors-via-idb.https.html", "kv-storage/cause-errors-via-idb.https.html",
{} {
"timeout": "long"
}
] ]
], ],
"kv-storage/entries.https.html": [ "kv-storage/entries.https.html": [
[ [
"kv-storage/entries.https.html", "kv-storage/entries.https.html",
{
"timeout": "long"
}
]
],
"kv-storage/interface.https.html": [
[
"kv-storage/interface.https.html",
{} {}
] ]
], ],
@ -356867,13 +356862,17 @@
"kv-storage/keys-values-entries.https.html": [ "kv-storage/keys-values-entries.https.html": [
[ [
"kv-storage/keys-values-entries.https.html", "kv-storage/keys-values-entries.https.html",
{} {
"timeout": "long"
}
] ]
], ],
"kv-storage/keys.https.html": [ "kv-storage/keys.https.html": [
[ [
"kv-storage/keys.https.html", "kv-storage/keys.https.html",
{} {
"timeout": "long"
}
] ]
], ],
"kv-storage/non-secure-context-dynamic-import.html": [ "kv-storage/non-secure-context-dynamic-import.html": [
@ -356897,19 +356896,25 @@
"kv-storage/storage-smoke-test.https.html": [ "kv-storage/storage-smoke-test.https.html": [
[ [
"kv-storage/storage-smoke-test.https.html", "kv-storage/storage-smoke-test.https.html",
{} {
"timeout": "long"
}
] ]
], ],
"kv-storage/undefined-value.https.html": [ "kv-storage/undefined-value.https.html": [
[ [
"kv-storage/undefined-value.https.html", "kv-storage/undefined-value.https.html",
{} {
"timeout": "long"
}
] ]
], ],
"kv-storage/values.https.html": [ "kv-storage/values.https.html": [
[ [
"kv-storage/values.https.html", "kv-storage/values.https.html",
{} {
"timeout": "long"
}
] ]
], ],
"largest-contentful-paint/observe-image.html": [ "largest-contentful-paint/observe-image.html": [
@ -541246,7 +541251,7 @@
"reftest" "reftest"
], ],
"css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html": [ "css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html": [
"084e181b63d96d5df38ccbc9a639a067f556ec39", "6fe35c2719e4e460e0c88f261ba3f5185a5f062d",
"testharness" "testharness"
], ],
"css/css-fonts/math-script-level-and-math-style/math-script-level-005.tentative-ref.html": [ "css/css-fonts/math-script-level-and-math-style/math-script-level-005.tentative-ref.html": [
@ -580062,7 +580067,7 @@
"testharness" "testharness"
], ],
"css/css-values/calc-parenthesis-stack.html": [ "css/css-values/calc-parenthesis-stack.html": [
"1d9033d7eecd14066ee9e4f9c52bf1a39e6ddd1b", "d8dbafb3f720253df4225f5279a1a7a9af2caa35",
"reftest" "reftest"
], ],
"css/css-values/calc-positive-fraction-001.html": [ "css/css-values/calc-positive-fraction-001.html": [
@ -597786,7 +597791,7 @@
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/images3/reftest.list": [ "css/vendor-imports/mozilla/mozilla-central-reftests/images3/reftest.list": [
"1a21c76db1c380794b05300512c5042927c640f5", "b6a70d8bc633bafb8d88ce5fe35f451a027dcea7",
"support" "support"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/images3/support/colors-16x8-noSize.svg": [ "css/vendor-imports/mozilla/mozilla-central-reftests/images3/support/colors-16x8-noSize.svg": [
@ -598562,11 +598567,11 @@
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/ruby/ruby-inlinize-blocks-002-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/ruby/ruby-inlinize-blocks-002-ref.html": [
"d1ba587e983270d16495ef8eff65a89672015883", "41533ee76b013a53e07a5effd2e02ff01da9ac65",
"support" "support"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/ruby/ruby-inlinize-blocks-002.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/ruby/ruby-inlinize-blocks-002.html": [
"e16b7731ebc5fed35144f3bbe883ba1c224b90d2", "4616d5014675224793aa9de4f67a79472462c800",
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/ruby/ruby-inlinize-blocks-003-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/ruby/ruby-inlinize-blocks-003-ref.html": [
@ -599006,11 +599011,11 @@
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-circle-056-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-circle-056-ref.html": [
"f4f21058a66693efb729653ba2d0599d40f19138", "519d33864d811ca71c15ab4d1b7572371f48e2a9",
"support" "support"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-circle-056.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-circle-056.html": [
"57323a42444ee4229d4eb3a1c6e58c5c7b63ce5d", "d51cb50447ee5681459569fbd4fd573fbd2f2ccf",
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-content-box-001-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-content-box-001-ref.html": [
@ -599198,11 +599203,11 @@
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-ellipse-052-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-ellipse-052-ref.html": [
"f4f21058a66693efb729653ba2d0599d40f19138", "519d33864d811ca71c15ab4d1b7572371f48e2a9",
"support" "support"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-ellipse-052.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-ellipse-052.html": [
"ee95f59dd5cdd6d16237928a272c7540a80ec6eb", "33f7a8fe34fdcd671c96e307d7ee753003f1a2b5",
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-inset-016-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-inset-016-ref.html": [
@ -599462,11 +599467,11 @@
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-polygon-032-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-polygon-032-ref.html": [
"f1fcdf40d719beac17a1cc85619daca2c0abb0ff", "b3f7028eec4112f1b818e95d474b725193e79b84",
"support" "support"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-polygon-032.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-polygon-032.html": [
"7649a98cdc6b7855babc5da87abf55e0d4825ac3", "6e17492e4496fbd33ec42486f737ba204c343fcf",
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/support/Ahem.ttf": [ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/support/Ahem.ttf": [
@ -609981,12 +609986,16 @@
"c8c1076df5cffe60845f67ad275c6e36f024d989", "c8c1076df5cffe60845f67ad275c6e36f024d989",
"testharness" "testharness"
], ],
"fetch/origin/no-cors.any.js": [ "fetch/origin/assorted.window.js": [
"c9d1d3b3af3750ec43549a3d96a0912e2cf6b399", "9e832724a70ddf406511555e791c9eac5902397c",
"testharness" "testharness"
], ],
"fetch/origin/resources/redirect-and-stash.py": [ "fetch/origin/resources/redirect-and-stash.py": [
"1b1b46ba177ad3af56ef83e90b0974dd81cd3eae", "aa9eb35db2bddb59acb1c7ebcbb971ab38d344b9",
"support"
],
"fetch/origin/resources/referrer-policy.py": [
"22b71e33b54160c451f1bbfc8a157600eeb7059f",
"support" "support"
], ],
"fetch/range/general.any.js": [ "fetch/range/general.any.js": [
@ -610154,7 +610163,7 @@
"support" "support"
], ],
"fetch/sec-metadata/resources/helper.js": [ "fetch/sec-metadata/resources/helper.js": [
"1968cfc0dd8ed94047a9c436458ea1c568c15bf1", "9425246881b1bdc7f4cace59e4e211d298316197",
"support" "support"
], ],
"fetch/sec-metadata/resources/post-to-owner.py": [ "fetch/sec-metadata/resources/post-to-owner.py": [
@ -610186,7 +610195,7 @@
"testharness" "testharness"
], ],
"fetch/sec-metadata/serviceworker.tentative.https.sub.html": [ "fetch/sec-metadata/serviceworker.tentative.https.sub.html": [
"c86198df6a2e31dc3c665fe5fe3f452bb47eeb26", "43d7ab30525a845f34f0bd4e60aac59c39b62e7e",
"testharness" "testharness"
], ],
"fetch/sec-metadata/sharedworker.tentative.https.sub.html": [ "fetch/sec-metadata/sharedworker.tentative.https.sub.html": [
@ -632402,7 +632411,7 @@
"support" "support"
], ],
"interfaces/performance-timeline.idl": [ "interfaces/performance-timeline.idl": [
"8ded59d8a269f83037a8845417c1275dd91ec538", "56c0ec4bc2bd7dbfd5bca24f9c548d8c37595259",
"support" "support"
], ],
"interfaces/permissions.idl": [ "interfaces/permissions.idl": [
@ -632486,7 +632495,7 @@
"support" "support"
], ],
"interfaces/service-workers.idl": [ "interfaces/service-workers.idl": [
"89229e377f7eca23e2f9ce625f40fe1e7e87ea78", "8e37060a180328d937d26623aaa030ad434eacc6",
"support" "support"
], ],
"interfaces/shape-detection-api.idl": [ "interfaces/shape-detection-api.idl": [
@ -632526,7 +632535,7 @@
"support" "support"
], ],
"interfaces/wai-aria.idl": [ "interfaces/wai-aria.idl": [
"cd039adfc5bc39bae26b1024bb7cbee22b0e9612", "c4fbf11409cf142d8295038d256f5a686d860a55",
"support" "support"
], ],
"interfaces/wake-lock.idl": [ "interfaces/wake-lock.idl": [
@ -632578,7 +632587,7 @@
"support" "support"
], ],
"interfaces/webmidi.idl": [ "interfaces/webmidi.idl": [
"aa2ac7f297b9b6e5d13a34d44ef772a471059f9d", "58d6357f7365765c7e9142024caddba51c373927",
"support" "support"
], ],
"interfaces/webrtc-dscp.idl": [ "interfaces/webrtc-dscp.idl": [
@ -632586,7 +632595,7 @@
"support" "support"
], ],
"interfaces/webrtc-stats.idl": [ "interfaces/webrtc-stats.idl": [
"981317f6be42d79f8113a1c032f325f673007d27", "f29e00d195e898cb6c2dfce9a82bc81fd168787a",
"support" "support"
], ],
"interfaces/webrtc.idl": [ "interfaces/webrtc.idl": [
@ -632602,7 +632611,7 @@
"support" "support"
], ],
"interfaces/webxr.idl": [ "interfaces/webxr.idl": [
"4af1c96a1847445c7559dabba20cb8a3a1de5c60", "c78683ef6bf6822b0320fe4c16bc9630a63884de",
"support" "support"
], ],
"interfaces/worklets.idl": [ "interfaces/worklets.idl": [
@ -632993,44 +633002,48 @@
"bf4a1e6e8b44bc78cf7a624a12b254cbac2f25a5", "bf4a1e6e8b44bc78cf7a624a12b254cbac2f25a5",
"support" "support"
], ],
"kv-storage/api-surface.https.html": [
"90e705862d599f2920ebdf5fa07cc3e4ba1f6d46",
"testharness"
],
"kv-storage/backingstore.https.html": [ "kv-storage/backingstore.https.html": [
"44e634d85bbc34621450c4029a63c5e9114075b3", "44e634d85bbc34621450c4029a63c5e9114075b3",
"testharness" "testharness"
], ],
"kv-storage/cause-errors-via-idb.https.html": [ "kv-storage/cause-errors-via-idb.https.html": [
"d77e56621e037b71fa6ae9bfb3e80a0ab85677fc", "1a7294d093f482b1c2c30840684c8b6a74bc5a0c",
"testharness" "testharness"
], ],
"kv-storage/entries.https.html": [ "kv-storage/entries.https.html": [
"0d1ab849a709bc8361bca88de34aa91c1ee3e23b", "07815920d5eec7235ceaa596558627991866715b",
"testharness" "testharness"
], ],
"kv-storage/helpers/class-assert.js": [
"89f0889c56d3a990a812be9208377090607335a2",
"support"
],
"kv-storage/helpers/equality-asserters.js": [ "kv-storage/helpers/equality-asserters.js": [
"448ab31348cee50be8820185d8bdfb8f626eb9dc", "448ab31348cee50be8820185d8bdfb8f626eb9dc",
"support" "support"
], ],
"kv-storage/helpers/expose-as-global.html": [
"4ff3c6cf9c22fdfedfe7987d46eeba37bd666266",
"support"
],
"kv-storage/helpers/iter-assert.js": [
"e1ac73c8e9abd0d6c55812523abcc590a638da9f",
"support"
],
"kv-storage/helpers/kvs-tests.js": [ "kv-storage/helpers/kvs-tests.js": [
"0cf4c2fd3d5fcaa392e8cbbcf64101155bcbe441", "0cf4c2fd3d5fcaa392e8cbbcf64101155bcbe441",
"support" "support"
], ],
"kv-storage/interface.https.html": [
"ab1930b25c355e2da15fc4d2a2fea8fa2042ffcc",
"testharness"
],
"kv-storage/key-types.https.html": [ "kv-storage/key-types.https.html": [
"edf3248fa609252df9a862f6ebc2b7b3755f0f09", "edf3248fa609252df9a862f6ebc2b7b3755f0f09",
"testharness" "testharness"
], ],
"kv-storage/keys-values-entries.https.html": [ "kv-storage/keys-values-entries.https.html": [
"b26323809bb3d33551ee9630bcf841fa0246262b", "27ad3e4f1868d1d774b6ef2e505423aea9a0da37",
"testharness" "testharness"
], ],
"kv-storage/keys.https.html": [ "kv-storage/keys.https.html": [
"a6be29725bf3274f6b5bb92b370962507a29b692", "3535d2fb93993af74d752c80626d5f10c0d24a60",
"testharness" "testharness"
], ],
"kv-storage/non-secure-context-dynamic-import.html": [ "kv-storage/non-secure-context-dynamic-import.html": [
@ -633046,15 +633059,15 @@
"testharness" "testharness"
], ],
"kv-storage/storage-smoke-test.https.html": [ "kv-storage/storage-smoke-test.https.html": [
"da48dc7cf13cb31fd5f5a3b4b7fa086100197bd9", "31dac972d984f4301f54f2948eb4e2c7d6481c25",
"testharness" "testharness"
], ],
"kv-storage/undefined-value.https.html": [ "kv-storage/undefined-value.https.html": [
"4cb483a3d982ab150fb28c6aee3a1398c273e82c", "d87641e95b8f55a0f7c3d724f620f17943537c96",
"testharness" "testharness"
], ],
"kv-storage/values.https.html": [ "kv-storage/values.https.html": [
"64756bf195fc3319d9dd21abad4c5d86fa266cfe", "bbdc7aee84437ebd0e029556dd1d1fcb9670dc5d",
"testharness" "testharness"
], ],
"largest-contentful-paint/observe-image.html": [ "largest-contentful-paint/observe-image.html": [
@ -658854,7 +658867,7 @@
"testharness" "testharness"
], ],
"service-workers/service-worker/interfaces-sw.https.html": [ "service-workers/service-worker/interfaces-sw.https.html": [
"50c76d306dc2f43eac0f4d827e9b72464b63220c", "73ffb28b36ea38b7230a7042feb444fde0bcf2e9",
"testharness" "testharness"
], ],
"service-workers/service-worker/interfaces-window.https.html": [ "service-workers/service-worker/interfaces-window.https.html": [

View file

@ -1079,3 +1079,12 @@
[text-indent percentage(%) / values] [text-indent percentage(%) / values]
expected: FAIL expected: FAIL
[margin-top length(pt) / values]
expected: FAIL
[padding-bottom length(ex) / values]
expected: FAIL
[padding-bottom length(cm) / values]
expected: FAIL

View file

@ -74,3 +74,6 @@
[opacity end] [opacity end]
expected: FAIL expected: FAIL
[outline-width end]
expected: FAIL

View file

@ -312,21 +312,18 @@
[<iframe>: separate response Content-Type: */* text/html] [<iframe>: separate response Content-Type: */* text/html]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html] [<iframe>: combined response Content-Type: */* text/html]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*] [<iframe>: combined response Content-Type: text/html */*]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain] [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain] [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL

View file

@ -53,9 +53,6 @@
[combined text/javascript ] [combined text/javascript ]
expected: FAIL expected: FAIL
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript] [separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL expected: FAIL

View file

@ -11,6 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%0C] [X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL

View file

@ -0,0 +1,98 @@
[assorted.window.html]
expected: TIMEOUT
[Origin header and POST same-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade]
expected: NOTRUN
[Origin header and POST cross-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade]
expected: NOTRUN
[Origin header and POST same-origin fetch cors mode with Referrer-Policy no-referrer]
expected: NOTRUN
[Origin header and POST same-origin navigation with Referrer-Policy origin-when-cross-origin]
expected: NOTRUN
[Origin header and POST same-origin fetch no-cors mode with Referrer-Policy unsafe-url]
expected: NOTRUN
[Origin header and 308 redirect]
expected: FAIL
[Origin header and POST same-origin fetch no-cors mode with Referrer-Policy same-origin]
expected: NOTRUN
[Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy no-referrer]
expected: NOTRUN
[Origin header and POST same-origin navigation with Referrer-Policy no-referrer-when-downgrade]
expected: NOTRUN
[Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy unsafe-url]
expected: NOTRUN
[Origin header and POST same-origin fetch no-cors mode with Referrer-Policy no-referrer]
expected: NOTRUN
[Origin header and POST cross-origin navigation with Referrer-Policy origin-when-cross-origin]
expected: NOTRUN
[Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy origin-when-cross-origin]
expected: NOTRUN
[Origin header and POST cross-origin fetch cors mode with Referrer-Policy origin-when-cross-origin]
expected: NOTRUN
[Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy no-referrer-when-downgrade]
expected: NOTRUN
[Origin header and POST cross-origin navigation with Referrer-Policy unsafe-url]
expected: NOTRUN
[Origin header and POST navigation]
expected: TIMEOUT
[Origin header and POST cross-origin navigation with Referrer-Policy no-referrer]
expected: NOTRUN
[Origin header and POST cross-origin navigation with Referrer-Policy same-origin]
expected: NOTRUN
[Origin header and POST cross-origin fetch cors mode with Referrer-Policy same-origin]
expected: NOTRUN
[Origin header and POST same-origin fetch no-cors mode with Referrer-Policy origin-when-cross-origin]
expected: NOTRUN
[Origin header and POST cross-origin fetch cors mode with Referrer-Policy unsafe-url]
expected: NOTRUN
[Origin header and POST same-origin navigation with Referrer-Policy unsafe-url]
expected: NOTRUN
[Origin header and POST same-origin fetch no-cors mode with Referrer-Policy no-referrer-when-downgrade]
expected: NOTRUN
[Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy same-origin]
expected: NOTRUN
[Origin header and POST same-origin navigation with Referrer-Policy no-referrer]
expected: NOTRUN
[Origin header and POST same-origin fetch cors mode with Referrer-Policy unsafe-url]
expected: NOTRUN
[Origin header and POST same-origin navigation with Referrer-Policy same-origin]
expected: NOTRUN
[Origin header and POST same-origin fetch cors mode with Referrer-Policy same-origin]
expected: NOTRUN
[Origin header and POST same-origin fetch cors mode with Referrer-Policy origin-when-cross-origin]
expected: NOTRUN
[Origin header and POST cross-origin fetch cors mode with Referrer-Policy no-referrer]
expected: NOTRUN
[Origin header and POST cross-origin navigation with Referrer-Policy no-referrer-when-downgrade]
expected: NOTRUN

View file

@ -0,0 +1,4 @@
[serviceworker.tentative.https.sub.html]
[sec-metadata for service worker scripts]
expected: FAIL

View file

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

View file

@ -1,5 +1,24 @@
[open-features-negative-innerwidth-innerheight.html] [open-features-negative-innerwidth-innerheight.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`] [HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
expected: FAIL expected: FAIL
[features "innerheight=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404.5" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerheight=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404e1" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,5 +1,24 @@
[open-features-negative-screenx-screeny.html] [open-features-negative-screenx-screeny.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`] [HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
expected: FAIL expected: FAIL
[features "screenx=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "screeny=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "screenx=-0" should NOT set "left=204"]
expected: TIMEOUT
[features "screenx=-204.5" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,5 +1,24 @@
[open-features-negative-top-left.html] [open-features-negative-top-left.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `top`, `left`] [HTML: window.open `features`: negative values for `top`, `left`]
expected: FAIL expected: FAIL
[features "top=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "top=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "left=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "top=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "left=-204.5" should NOT set "left=204"]
expected: TIMEOUT
[features "left=-0" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,5 +1,24 @@
[open-features-negative-width-height.html] [open-features-negative-width-height.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `width`, `height`] [HTML: window.open `features`: negative values for `width`, `height`]
expected: FAIL expected: FAIL
[features "height=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "width=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404e1" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404.5" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,32 +1,48 @@
[open-features-non-integer-height.html] [open-features-non-integer-height.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `height`] [HTML: window.open `features`: non-integer values for feature `height`]
expected: FAIL expected: FAIL
[features "height=405*3" should set "height=405"] [features "height=405*3" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=405.32" should set "height=405"] [features "height=405.32" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=405e1" should set "height=405"] [features "height=405e1" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=405/5" should set "height=405"] [features "height=405/5" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=405^4" should set "height=405"] [features "height=405^4" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=405.5" should set "height=405"] [features "height=405.5" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=405e-1" should set "height=405"] [features "height=405e-1" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=405 " should set "height=405"] [features "height=405 " should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=405LLl" should set "height=405"] [features "height=405LLl" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "height=/404" should NOT set "height=404"]
expected: TIMEOUT
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[features "height=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=L404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-innerheight.html] [open-features-non-integer-innerheight.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`] [HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
expected: FAIL expected: FAIL
[features "innerheight=405e-1" should set "height=405"] [features "innerheight=405e-1" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=405LLl" should set "height=405"] [features "innerheight=405LLl" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=405^4" should set "height=405"] [features "innerheight=405^4" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=405e1" should set "height=405"] [features "innerheight=405e1" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=405 " should set "height=405"] [features "innerheight=405 " should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=405/5" should set "height=405"] [features "innerheight=405/5" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=405.32" should set "height=405"] [features "innerheight=405.32" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=405.5" should set "height=405"] [features "innerheight=405.5" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=405*3" should set "height=405"] [features "innerheight=405*3" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "innerheight=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=/404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-innerwidth.html] [open-features-non-integer-innerwidth.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`] [HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
expected: FAIL expected: FAIL
[features "innerwidth=405e-1" should set "width=405"] [features "innerwidth=405e-1" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=405*3" should set "width=405"] [features "innerwidth=405*3" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=405.5" should set "width=405"] [features "innerwidth=405.5" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=405e1" should set "width=405"] [features "innerwidth=405e1" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=405.32" should set "width=405"] [features "innerwidth=405.32" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=405 " should set "width=405"] [features "innerwidth=405 " should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=405LLl" should set "width=405"] [features "innerwidth=405LLl" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=405/5" should set "width=405"] [features "innerwidth=405/5" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=405^4" should set "width=405"] [features "innerwidth=405^4" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "innerwidth=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=_404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=L404" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-left.html] [open-features-non-integer-left.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `left`] [HTML: window.open `features`: non-integer values for feature `left`]
expected: FAIL expected: FAIL
[features "left=105e1" should set "left=105"] [features "left=105e1" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=105 " should set "left=105"] [features "left=105 " should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=105/5" should set "left=105"] [features "left=105/5" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=105e-1" should set "left=105"] [features "left=105e-1" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=105^4" should set "left=105"] [features "left=105^4" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=105LLl" should set "left=105"] [features "left=105LLl" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=105.32" should set "left=105"] [features "left=105.32" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=105*3" should set "left=105"] [features "left=105*3" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=105.5" should set "left=105"] [features "left=105.5" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "left=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=/104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=_104" should NOT set "left=104"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-screenx.html] [open-features-non-integer-screenx.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screenx`] [HTML: window.open `features`: non-integer values for legacy feature `screenx`]
expected: FAIL expected: FAIL
[features "screenx=105.5" should set "left=105"] [features "screenx=105.5" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=105e1" should set "left=105"] [features "screenx=105e1" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=105 " should set "left=105"] [features "screenx=105 " should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=105*3" should set "left=105"] [features "screenx=105*3" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=105e-1" should set "left=105"] [features "screenx=105e-1" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=105^4" should set "left=105"] [features "screenx=105^4" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=105LLl" should set "left=105"] [features "screenx=105LLl" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=105/5" should set "left=105"] [features "screenx=105/5" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=105.32" should set "left=105"] [features "screenx=105.32" should set "left=105"]
expected: FAIL expected: TIMEOUT
[features "screenx=_104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=/104" should NOT set "left=104"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-screeny.html] [open-features-non-integer-screeny.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screeny`] [HTML: window.open `features`: non-integer values for legacy feature `screeny`]
expected: FAIL expected: FAIL
[features "screeny=405^4" should set "height=405"] [features "screeny=405^4" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=405e-1" should set "height=405"] [features "screeny=405e-1" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=405LLl" should set "height=405"] [features "screeny=405LLl" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=405e1" should set "height=405"] [features "screeny=405e1" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=405 " should set "height=405"] [features "screeny=405 " should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=405/5" should set "height=405"] [features "screeny=405/5" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=405*3" should set "height=405"] [features "screeny=405*3" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=405.32" should set "height=405"] [features "screeny=405.32" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=405.5" should set "height=405"] [features "screeny=405.5" should set "height=405"]
expected: FAIL expected: TIMEOUT
[features "screeny=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=/404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,32 +1,48 @@
[open-features-non-integer-width.html] [open-features-non-integer-width.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `width`] [HTML: window.open `features`: non-integer values for feature `width`]
expected: FAIL expected: FAIL
[features "width=405^4" should set "width=405"] [features "width=405^4" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "width=405.5" should set "width=405"] [features "width=405.5" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "width=405e1" should set "width=405"] [features "width=405e1" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "width=405 " should set "width=405"] [features "width=405 " should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "width=405.32" should set "width=405"] [features "width=405.32" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "width=405LLl" should set "width=405"] [features "width=405LLl" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "width=405*3" should set "width=405"] [features "width=405*3" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "width=405e-1" should set "width=405"] [features "width=405e-1" should set "width=405"]
expected: FAIL expected: TIMEOUT
[features "width=405/5" should set "width=405"] [features "width=405/5" should set "width=405"]
expected: FAIL expected: TIMEOUT
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=_404" should NOT set "width=404"]
expected: TIMEOUT
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=L404" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[promise-rejection-events.html] [promise-rejection-events.html]
expected: TIMEOUT
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire] [delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
expected: FAIL expected: FAIL
@ -8,3 +9,6 @@
[no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap] [no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap]
expected: FAIL expected: FAIL
[rejectionhandled is dispatched from a queued task, and not immediately]
expected: TIMEOUT

View file

@ -17,3 +17,6 @@
[The iframe should have one resource timing entry.] [The iframe should have one resource timing entry.]
expected: FAIL expected: FAIL
[responseEnd should not be 0 in timing-allow cross-origin request.]
expected: FAIL

View file

@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL expected: FAIL

View file

@ -32,3 +32,9 @@
[X SNR (21.50436285446287 dB) is not greater than or equal to 65.737. Got 21.50436285446287.] [X SNR (21.50436285446287 dB) is not greater than or equal to 65.737. Got 21.50436285446287.]
expected: FAIL expected: FAIL
[X SNR (21.440582478634532 dB) is not greater than or equal to 65.737. Got 21.440582478634532.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 9.8276454228804466e-1 at index of 39267.\n\t[39267\]\t1.8523094169609067e-10\t-9.8276454210281372e-1\t9.8276454228804466e-1\t1.0000000001884795e+0\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n]
expected: FAIL

View file

@ -1,2 +0,0 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -45,7 +45,7 @@
.level5 { math-script-level: 5; } .level5 { math-script-level: 5; }
</style> </style>
<script> <script>
const big = 2000; const big = 3000;
const small = 150; const small = 150;
setup({ explicit_done: true }); setup({ explicit_done: true });
window.addEventListener("load", function() { window.addEventListener("load", function() {
@ -94,11 +94,12 @@
}, "scriptPercentScaleDown=80, scriptScriptPercentScaleDown=40"); }, "scriptPercentScaleDown=80, scriptScriptPercentScaleDown=40");
test(function() { test(function() {
var scriptPercentScaleDown = .71;
CheckFontSizes("scale0-40-scaledown", { CheckFontSizes("scale0-40-scaledown", {
"-3": big, "-3": big,
"-1": big * .71 * .71, "-1": big * .71 * .71,
"0": big * .71 * .71 * .71, "0": big * .71 * .71 * .71,
"1": big * .71 * .71 * .71 * .71, "1": big * .71 * .71 * .71 * scriptPercentScaleDown,
"2": big * .71 * .71 * .71 * .4, "2": big * .71 * .71 * .71 * .4,
"3": big * .71 * .71 * .71 * .4 * .71, "3": big * .71 * .71 * .71 * .4 * .71,
"5": big * .71 * .71 * .71 * .4 * .71 * .71 * .71 "5": big * .71 * .71 * .71 * .4 * .71 * .71 * .71
@ -107,7 +108,7 @@
"5": small, "5": small,
"3": small / (.71 * .71), "3": small / (.71 * .71),
"2": small / (.71 * .71 * .71), "2": small / (.71 * .71 * .71),
"1": small / (.71 * .71 * .71 * (.4 / .71)), "1": small / (.71 * .71 * .71 * (.4 / scriptPercentScaleDown)),
"0": small / (.71 * .71 * .71 * .4), "0": small / (.71 * .71 * .71 * .4),
"-1": small / (.71 * .71 * .71 * .4 * .71), "-1": small / (.71 * .71 * .71 * .4 * .71),
"-3": small / (.71 * .71 * .71 * .4 * .71 * .71 * .71) "-3": small / (.71 * .71 * .71 * .4 * .71 * .71 * .71)
@ -115,23 +116,24 @@
}, "scriptPercentScaleDown=0, scriptScriptPercentScaleDown=40"); }, "scriptPercentScaleDown=0, scriptScriptPercentScaleDown=40");
test(function() { test(function() {
var scriptScriptPercentScaleDown = 0.5041;
CheckFontSizes("scale80-0-scaledown", { CheckFontSizes("scale80-0-scaledown", {
"-3": big, "-3": big,
"-1": big * .71 * .71, "-1": big * .71 * .71,
"0": big * .71 * .71 * .71, "0": big * .71 * .71 * .71,
"1": big * .71 * .71 * .71 * .8, "1": big * .71 * .71 * .71 * .8,
"2": big * .71 * .71 * .71 * .71 * .71, "2": big * .71 * .71 * .71 * scriptScriptPercentScaleDown,
"3": big * .71 * .71 * .71 * .71 * .71 * .71, "3": big * .71 * .71 * .71 * scriptScriptPercentScaleDown * .71,
"5": big * .71 * .71 * .71 * .71 * .71 * .71 * .71 * .71 "5": big * .71 * .71 * .71 * scriptScriptPercentScaleDown * .71 * .71 * .71
}); });
CheckFontSizes("scale80-0-scaleup", { CheckFontSizes("scale80-0-scaleup", {
"5": small, "5": small,
"3": small / (.71 * .71), "3": small / (.71 * .71),
"2": small / (.71 * .71 * .71), "2": small / (.71 * .71 * .71),
"1": small / (.71 * .71 * .71 * (.71 / .8)), "1": small / (.71 * .71 * .71 * (scriptScriptPercentScaleDown / .8)),
"0": small / (.71 * .71 * .71 * .71), "0": small / (.71 * .71 * .71 * scriptScriptPercentScaleDown),
"-1": small / (.71 * .71 * .71 * .71 * .71), "-1": small / (.71 * .71 * .71 * scriptScriptPercentScaleDown * .71),
"-3": small / (.71 * .71 * .71 * .71 * .71 * .71 * .71) "-3": small / (.71 * .71 * .71 * scriptScriptPercentScaleDown * .71 * .71 * .71)
}); });
}, "scriptPercentScaleDown=80, scriptScriptPercentScaleDown=0"); }, "scriptPercentScaleDown=80, scriptScriptPercentScaleDown=0");

View file

@ -4,12 +4,18 @@
<meta charset="utf-8"> <meta charset="utf-8">
<title> <title>
CSS Values and Units Test: CSS Values and Units Test:
Calc() inside calc() 32 nested pairs of parentheses inside calc()
</title> </title>
<meta name="assert" content=" <meta name="assert" content="
The calc() function notation is allowed inside a calc() notation. This test checks the support for the minimum required number of 32 nested pairs of parentheses inside a calc() function.
" /> " />
<!--
More info:
[css-values] Limit nested pairs of parentheses in calc to 32
https://github.com/w3c/csswg-drafts/issues/3462
-->
<link <link
rel="author" rel="author"
title="François REMY" title="François REMY"
@ -29,7 +35,7 @@
html { background: red; overflow: hidden; } html { background: red; overflow: hidden; }
#outer { position: absolute; top: 0px; left: 0px; background: green; width: 100%; } #outer { position: absolute; top: 0px; left: 0px; background: green; width: 100%; }
#outer { height: calc((((((((((((((((((((((((100%)))))))))))))))))))))))); } #outer { height: calc((((((((((((((((((((((((((((((((100%)))))))))))))))))))))))))))))))); }
</style> </style>

View file

@ -75,6 +75,7 @@
== object-fit-fill-svg-006i.html object-fit-fill-svg-006-ref.html == object-fit-fill-svg-006i.html object-fit-fill-svg-006-ref.html
== object-fit-fill-svg-006o.html object-fit-fill-svg-006-ref.html == object-fit-fill-svg-006o.html object-fit-fill-svg-006-ref.html
== object-fit-fill-svg-006p.html object-fit-fill-svg-006-ref.html == object-fit-fill-svg-006p.html object-fit-fill-svg-006-ref.html
# All the random-if(geckoview) failures in this file are tracked by bug 1558515
== object-fit-contain-svg-001e.html object-fit-contain-svg-001-ref.html == object-fit-contain-svg-001e.html object-fit-contain-svg-001-ref.html
== object-fit-contain-svg-001i.html object-fit-contain-svg-001-ref.html == object-fit-contain-svg-001i.html object-fit-contain-svg-001-ref.html
== object-fit-contain-svg-001o.html object-fit-contain-svg-001-ref.html == object-fit-contain-svg-001o.html object-fit-contain-svg-001-ref.html

View file

@ -5,6 +5,11 @@
<title>CSS Reference: Inlinize block-level boxes inside ruby</title> <title>CSS Reference: Inlinize block-level boxes inside ruby</title>
<link rel="author" title="Xidorn Quan" href="mailto:quanxunzhen@gmail.com"> <link rel="author" title="Xidorn Quan" href="mailto:quanxunzhen@gmail.com">
<style> <style>
body {
/* Use a sans-serif font to avoid fuzzy pixels where e.g. the
letter "a" bottom-right serif might overlap the table border: */
font: 16px sans-serif;
}
.block, table, .flex { .block, table, .flex {
background-color: yellow; background-color: yellow;
width: 100px; height: 30px; width: 100px; height: 30px;

View file

@ -7,6 +7,11 @@
<link rel="help" href="http://www.w3.org/TR/css-ruby-1/#anon-gen-inlinize"> <link rel="help" href="http://www.w3.org/TR/css-ruby-1/#anon-gen-inlinize">
<link rel="match" href="ruby-inlinize-blocks-002-ref.html"> <link rel="match" href="ruby-inlinize-blocks-002-ref.html">
<style> <style>
body {
/* Use a sans-serif font to avoid fuzzy pixels where e.g. the
letter "a" bottom-right serif might overlap the table border: */
font: 16px sans-serif;
}
.block, table, .flex { .block, table, .flex {
background-color: yellow; background-color: yellow;
width: 100px; height: 30px; width: 100px; height: 30px;

View file

@ -3,7 +3,6 @@
<head> <head>
<title>CSS Reference File</title> <title>CSS Reference File</title>
<link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
</head>
<style> <style>
body { body {
margin: 0; margin: 0;
@ -28,6 +27,7 @@
background-color: green; background-color: green;
} }
</style> </style>
</head>
<body> <body>
<p>The test passes if there is a green square to the right of the blue line. There should be no red.</p> <p>The test passes if there is a green square to the right of the blue line. There should be no red.</p>
<div id="container"> <div id="container">

View file

@ -15,7 +15,6 @@
top left with a shape-margin. Additionally, the top left with a shape-margin. Additionally, the
shape-outside: circle element is offset from shape-outside: circle element is offset from
its containing block."> its containing block.">
</head>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style> <style>
@font-face { @font-face {
@ -66,6 +65,7 @@
z-index: -1; z-index: -1;
} }
</style> </style>
</head>
<body> <body>
<p>The test passes if there is a green square to the right of the blue line. There should be no red.</p> <p>The test passes if there is a green square to the right of the blue line. There should be no red.</p>
<div id="container"> <div id="container">

View file

@ -3,7 +3,6 @@
<head> <head>
<title>CSS Reference File</title> <title>CSS Reference File</title>
<link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
</head>
<style> <style>
body { body {
margin: 0; margin: 0;
@ -28,6 +27,7 @@
background-color: green; background-color: green;
} }
</style> </style>
</head>
<body> <body>
<p>The test passes if there is a green square to the right of the blue line. There should be no red.</p> <p>The test passes if there is a green square to the right of the blue line. There should be no red.</p>
<div id="container"> <div id="container">

View file

@ -13,7 +13,6 @@
a ellipse with a shape-margin in pixel units. a ellipse with a shape-margin in pixel units.
Additionally, the shape-outside: ellipse element Additionally, the shape-outside: ellipse element
is offset from its containing block."> is offset from its containing block.">
</head>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style> <style>
@font-face { @font-face {
@ -64,6 +63,7 @@
z-index: -1; z-index: -1;
} }
</style> </style>
</head>
<body> <body>
<p>The test passes if there is a green square to the right of the blue line. There should be no red.</p> <p>The test passes if there is a green square to the right of the blue line. There should be no red.</p>
<div id="container"> <div id="container">

View file

@ -3,7 +3,6 @@
<head> <head>
<title>CSS Reference File</title> <title>CSS Reference File</title>
<link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
</head>
<style> <style>
body { body {
margin: 0; margin: 0;
@ -17,8 +16,9 @@
background-color: green; background-color: green;
} }
</style> </style>
</head>
<body> <body>
<p>The test passes if there is green square and no red.</p> <p>The test passes if there is green square and no red.</p>
<div id="green-square"></div> <div id="green-square"></div>
</body> </body>
</html> </html>

View file

@ -14,7 +14,6 @@
an polygon from the margin box with a shape margin. an polygon from the margin box with a shape margin.
Additionally, the shape-outside: polygon element is Additionally, the shape-outside: polygon element is
offset from its containing block."> offset from its containing block.">
</head>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style> <style>
@font-face { @font-face {
@ -77,6 +76,7 @@
height: 60px; height: 60px;
} }
</style> </style>
</head>
<body> <body>
<p>The test passes if there is green square and no red.</p> <p>The test passes if there is green square and no red.</p>
<div id="red"></div> <div id="red"></div>

View file

@ -0,0 +1,202 @@
// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js
const origins = get_host_info();
promise_test(async function () {
const stash = token(),
redirectPath = "/fetch/origin/resources/redirect-and-stash.py";
// Cross-origin -> same-origin will result in setting the tainted origin flag for the second
// request.
let url = origins.HTTP_ORIGIN + redirectPath + "?stash=" + stash;
url = origins.HTTP_REMOTE_ORIGIN + redirectPath + "?stash=" + stash + "&location=" + encodeURIComponent(url);
await fetch(url, { mode: "no-cors", method: "POST" });
const json = await (await fetch(redirectPath + "?dump&stash=" + stash)).json();
assert_equals(json[0], origins.HTTP_ORIGIN);
assert_equals(json[1], "null");
}, "Origin header and 308 redirect");
promise_test(async function () {
const stash = token(),
redirectPath = "/fetch/origin/resources/redirect-and-stash.py";
let url = origins.HTTP_ORIGIN + redirectPath + "?stash=" + stash;
url = origins.HTTP_REMOTE_ORIGIN + redirectPath + "?stash=" + stash + "&location=" + encodeURIComponent(url);
await new Promise(resolve => {
const frame = document.createElement("iframe");
frame.src = url;
frame.onload = () => {
resolve();
frame.remove();
}
document.body.appendChild(frame);
});
const json = await (await fetch(redirectPath + "?dump&stash=" + stash)).json();
assert_equals(json[0], "no Origin header");
assert_equals(json[1], "no Origin header");
}, "Origin header and GET navigation");
promise_test(async function () {
const stash = token(),
redirectPath = "/fetch/origin/resources/redirect-and-stash.py";
let url = origins.HTTP_ORIGIN + redirectPath + "?stash=" + stash;
url = origins.HTTP_REMOTE_ORIGIN + redirectPath + "?stash=" + stash + "&location=" + encodeURIComponent(url);
await new Promise(resolve => {
const frame = document.createElement("iframe");
self.addEventListener("message", e => {
if (e.data === "loaded") {
resolve();
frame.remove();
}
}, { once: true });
frame.onload = () => {
const doc = frame.contentDocument,
form = doc.body.appendChild(doc.createElement("form")),
submit = form.appendChild(doc.createElement("input"));
form.action = url;
form.method = "POST";
submit.type = "submit";
submit.click();
}
document.body.appendChild(frame);
});
const json = await (await fetch(redirectPath + "?dump&stash=" + stash)).json();
assert_equals(json[0], origins.HTTP_ORIGIN);
assert_equals(json[1], "null");
}, "Origin header and POST navigation");
function navigationReferrerPolicy(referrerPolicy, destination, expectedOrigin) {
return async function () {
const stash = token();
const referrerPolicyPath = "/fetch/origin/resources/referrer-policy.py";
const redirectPath = "/fetch/origin/resources/redirect-and-stash.py";
let postUrl =
(destination === "same-origin" ? origins.HTTP_ORIGIN
: origins.HTTP_REMOTE_ORIGIN) +
redirectPath + "?stash=" + stash;
await new Promise(resolve => {
const frame = document.createElement("iframe");
document.body.appendChild(frame);
frame.src = origins.HTTP_ORIGIN + referrerPolicyPath +
"?referrerPolicy=" + referrerPolicy;
self.addEventListener("message", function listener(e) {
if (e.data === "loaded") {
resolve();
frame.remove();
self.removeEventListener("message", listener);
} else if (e.data === "action") {
const doc = frame.contentDocument,
form = doc.body.appendChild(doc.createElement("form")),
submit = form.appendChild(doc.createElement("input"));
form.action = postUrl;
form.method = "POST";
submit.type = "submit";
submit.click();
}
});
});
const json = await (await fetch(redirectPath + "?dump&stash=" + stash)).json();
assert_equals(json[0], expectedOrigin);
};
}
function fetchReferrerPolicy(referrerPolicy, destination, fetchMode, expectedOrigin) {
return async function () {
const stash = token();
const referrerPolicyPath = "/fetch/origin/resources/referrer-policy.py";
const redirectPath = "/fetch/origin/resources/redirect-and-stash.py";
let fetchUrl =
(destination === "same-origin" ? origins.HTTP_ORIGIN
: origins.HTTP_REMOTE_ORIGIN) +
redirectPath + "?stash=" + stash;
await fetch(fetchUrl, { mode: fetchMode, method: "POST" , "referrerPolicy": referrerPolicy});
const json = await (await fetch(redirectPath + "?dump&stash=" + stash)).json();
assert_equals(json[0], expectedOrigin);
};
}
function referrerPolicyTestString(referrerPolicy, destination) {
return "Origin header and POST " + destination + " with Referrer-Policy " +
referrerPolicy;
}
[
{
"policy": "no-referrer",
"expectedOriginForSameOrigin": "null",
"expectedOriginForCrossOrigin": "null"
},
{
"policy": "same-origin",
"expectedOriginForSameOrigin": origins.HTTP_ORIGIN,
"expectedOriginForCrossOrigin": "null"
},
{
"policy": "origin-when-cross-origin",
"expectedOriginForSameOrigin": origins.HTTP_ORIGIN,
"expectedOriginForCrossOrigin": origins.HTTP_ORIGIN
},
{
"policy": "no-referrer-when-downgrade",
"expectedOriginForSameOrigin": origins.HTTP_ORIGIN,
"expectedOriginForCrossOrigin": origins.HTTP_ORIGIN
},
{
"policy": "unsafe-url",
"expectedOriginForSameOrigin": origins.HTTP_ORIGIN,
"expectedOriginForCrossOrigin": origins.HTTP_ORIGIN
},
].forEach(testObj => {
[
{
"name": "same-origin",
"expectedOrigin": testObj.expectedOriginForSameOrigin
},
{
"name": "cross-origin",
"expectedOrigin": testObj.expectedOriginForCrossOrigin
}
].forEach(destination => {
// Test form POST navigation
promise_test(navigationReferrerPolicy(testObj.policy,
destination.name,
destination.expectedOrigin),
referrerPolicyTestString(testObj.policy,
destination.name + " navigation"));
// Test fetch
promise_test(fetchReferrerPolicy(testObj.policy,
destination.name,
"no-cors",
destination.expectedOrigin),
referrerPolicyTestString(testObj.policy,
destination.name + " fetch no-cors mode"));
// When we're dealing with CORS (mode is "cors"), we shouldn't take the
// Referrer-Policy into account
promise_test(fetchReferrerPolicy(testObj.policy,
destination.name,
"cors",
origins.HTTP_ORIGIN),
referrerPolicyTestString(testObj.policy,
destination.name + " fetch cors mode"));
});
});

View file

@ -1,20 +0,0 @@
// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js
promise_test(async function() {
const stash = token(),
origins = get_host_info(),
redirectPath = "/fetch/origin/resources/redirect-and-stash.py";
// Cross-origin -> same-origin will result in setting the tainted origin flag for the second
// request.
let url = origins.HTTP_ORIGIN + redirectPath + "?stash=" + stash;
url = origins.HTTP_REMOTE_ORIGIN + redirectPath + "?stash=" + stash + "&location=" + encodeURIComponent(url);
await fetch(url, { mode: "no-cors", method: "POST" });
const json = await (await fetch(redirectPath + "?dump&stash=" + stash)).json();
assert_equals(json[0], origins.HTTP_ORIGIN, "first origin should equal this origin");
assert_equals(json[1], "null", "second origin should be opaque and therefore null");
}, "Origin header and 308 redirect");

View file

@ -9,7 +9,7 @@ def main(request, response):
origin_list = request.server.stash.take(key) origin_list = request.server.stash.take(key)
if "dump" in request.GET: if "dump" in request.GET:
response.headers.set("content-Type", "application/json") response.headers.set("Content-Type", "application/json")
response.content = json.dumps(origin_list) response.content = json.dumps(origin_list)
return return
@ -25,5 +25,6 @@ def main(request, response):
response.headers.set("Location", request.GET.first("location")) response.headers.set("Location", request.GET.first("location"))
return return
response.headers.set("content-Type", "text/plain") response.headers.set("Content-Type", "text/html")
response.content = "Fix https://github.com/whatwg/fetch/issues/737..." response.headers.set("Access-Control-Allow-Origin", "*")
response.content = "<meta charset=utf-8>\n<body><script>parent.postMessage('loaded','*')</script></body>"

View file

@ -0,0 +1,7 @@
def main(request, response):
if "referrerPolicy" in request.GET:
response.headers.set("Referrer-Policy",
request.GET.first("referrerPolicy"))
response.status = 200
response.headers.set("Content-Type", "text/html")
response.content = "<meta charset=utf-8>\n<body><script>parent.postMessage('action','*')</script></body>"

View file

@ -1,11 +1,16 @@
function assert_header_equals(value, expected) { function wrap_by_tag(tag, text) {
return tag ? `${tag}: ${text}`: text;
}
function assert_header_equals(value, expected, tag) {
if (typeof(value) === "string"){ if (typeof(value) === "string"){
assert_not_equals(value, "No header has been recorded"); assert_not_equals(value, "No header has been recorded");
value = JSON.parse(value); value = JSON.parse(value);
} }
assert_equals(value.dest, expected.dest, "dest");
assert_equals(value.mode, expected.mode, "mode"); assert_equals(value.dest, expected.dest, wrap_by_tag(tag, "dest"));
assert_equals(value.site, expected.site, "site"); assert_equals(value.mode, expected.mode, wrap_by_tag(tag, "mode"));
assert_equals(value.site, expected.site, wrap_by_tag(tag, "site"));
if (expected.hasOwnProperty("user")) if (expected.hasOwnProperty("user"))
assert_equals(value.user, expected.user, "user"); assert_equals(value.user, expected.user, wrap_by_tag(tag, "user"));
} }

View file

@ -12,44 +12,25 @@
<script src=/common/utils.js></script> <script src=/common/utils.js></script>
<body> <body>
<script> <script>
let nonce = token(); promise_test(async t => {
let key = "serviceworker-same-origin" + nonce; const nonce = token();
const key = "serviceworker-same-origin" + nonce;
if ('serviceWorker' in navigator) { // Register a service worker and check the request header.
window.addEventListener('load', function() { const registration = await navigator.serviceWorker.register('https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=' + key);
navigator.serviceWorker.register('https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=' + key).then(function(registration) { t.add_cleanup(() => registration.unregister());
test_same_origin(); await retrieve_and_assert_headers(key, 'Register service worker');
// uninstall the serviceworker after the test // Trigger an update check and check the request header again.
navigator.serviceWorker.getRegistrations().then(function(registrations) { await registration.update();
for(let registration of registrations) { await retrieve_and_assert_headers(key, 'Update service worker');
registration.unregister() }, 'sec-metadata for service worker scripts');
}
}) async function retrieve_and_assert_headers(key, tag) {
}, function(err) { let expected = { "dest": "serviceworker", "site": "same-origin", "user": "", "mode": "same-origin" };
// registration failed const response = await fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
}); const text = await response.text();
}); assert_header_equals(text, expected, tag);
} }
else {
test(function () {
done();
}, "Browser does not support serviceworker");
}
</script> </script>
</body> </body>
<script>
function test_same_origin(){
promise_test(t => {
return new Promise((resolve, reject) => {
let expected = {"dest":"serviceworker", "site":"same-origin", "user":"", "mode": "same-origin"};
fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
.then(response => response.text())
.then(text => assert_header_equals(text, expected))
.then(_ => resolve())
.catch(e => reject(e));
})
})
}
</script>

View file

@ -32,7 +32,6 @@ interface PerformanceObserver {
dictionary PerformanceObserverInit { dictionary PerformanceObserverInit {
sequence<DOMString> entryTypes; sequence<DOMString> entryTypes;
DOMString type; DOMString type;
boolean buffered;
}; };
[Exposed=(Window,Worker)] [Exposed=(Window,Worker)]

View file

@ -16,6 +16,7 @@ interface ServiceWorker : EventTarget {
ServiceWorker includes AbstractWorker; ServiceWorker includes AbstractWorker;
enum ServiceWorkerState { enum ServiceWorkerState {
"parsed",
"installing", "installing",
"installed", "installed",
"activating", "activating",
@ -95,6 +96,7 @@ dictionary NavigationPreloadState {
interface ServiceWorkerGlobalScope : WorkerGlobalScope { interface ServiceWorkerGlobalScope : WorkerGlobalScope {
[SameObject] readonly attribute Clients clients; [SameObject] readonly attribute Clients clients;
[SameObject] readonly attribute ServiceWorkerRegistration registration; [SameObject] readonly attribute ServiceWorkerRegistration registration;
[SameObject] readonly attribute ServiceWorker serviceWorker;
[NewObject] Promise<void> skipWaiting(); [NewObject] Promise<void> skipWaiting();

View file

@ -16,6 +16,7 @@ interface mixin AriaAttributes {
attribute DOMString? ariaChecked; attribute DOMString? ariaChecked;
attribute DOMString? ariaColCount; attribute DOMString? ariaColCount;
attribute DOMString? ariaColIndex; attribute DOMString? ariaColIndex;
attribute DOMString? ariaColIndexText;
attribute DOMString? ariaColSpan; attribute DOMString? ariaColSpan;
attribute FrozenArray<Element>? ariaControlsElements; attribute FrozenArray<Element>? ariaControlsElements;
attribute DOMString? ariaCurrent; attribute DOMString? ariaCurrent;
@ -47,6 +48,7 @@ interface mixin AriaAttributes {
attribute DOMString? ariaRoleDescription; attribute DOMString? ariaRoleDescription;
attribute DOMString? ariaRowCount; attribute DOMString? ariaRowCount;
attribute DOMString? ariaRowIndex; attribute DOMString? ariaRowIndex;
attribute DOMString? ariaRowIndexText;
attribute DOMString? ariaRowSpan; attribute DOMString? ariaRowSpan;
attribute DOMString? ariaSelected; attribute DOMString? ariaSelected;
attribute DOMString? ariaSetSize; attribute DOMString? ariaSetSize;

View file

@ -12,11 +12,11 @@ dictionary MIDIOptions {
boolean software; boolean software;
}; };
interface MIDIInputMap { [SecureContext] interface MIDIInputMap {
readonly maplike<DOMString, MIDIInput>; readonly maplike<DOMString, MIDIInput>;
}; };
interface MIDIOutputMap { [SecureContext] interface MIDIOutputMap {
readonly maplike<DOMString, MIDIOutput>; readonly maplike<DOMString, MIDIOutput>;
}; };

View file

@ -69,7 +69,9 @@ dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats {
DOMString receiverId; DOMString receiverId;
DOMString remoteId; DOMString remoteId;
unsigned long framesDecoded; unsigned long framesDecoded;
unsigned long keyFramesDecoded;
unsigned long long qpSum; unsigned long long qpSum;
double totalDecodeTime;
DOMHighResTimeStamp lastPacketReceivedTimestamp; DOMHighResTimeStamp lastPacketReceivedTimestamp;
double averageRtcpInterval; double averageRtcpInterval;
unsigned long fecPacketsReceived; unsigned long fecPacketsReceived;
@ -109,6 +111,7 @@ dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
double targetBitrate; double targetBitrate;
unsigned long long totalEncodedBytesTarget; unsigned long long totalEncodedBytesTarget;
unsigned long framesEncoded; unsigned long framesEncoded;
unsigned long keyFramesEncoded;
unsigned long long qpSum; unsigned long long qpSum;
double totalEncodeTime; double totalEncodeTime;
double totalPacketSendDelay; double totalPacketSendDelay;
@ -187,7 +190,6 @@ dictionary RTCVideoSenderStats : RTCVideoHandlerStats {
unsigned long framesCaptured; unsigned long framesCaptured;
unsigned long framesSent; unsigned long framesSent;
unsigned long hugeFramesSent; unsigned long hugeFramesSent;
unsigned long keyFramesSent;
}; };
dictionary RTCSenderVideoTrackAttachmentStats : RTCVideoSenderStats { dictionary RTCSenderVideoTrackAttachmentStats : RTCVideoSenderStats {
@ -198,7 +200,6 @@ dictionary RTCVideoReceiverStats : RTCVideoHandlerStats {
double jitterBufferDelay; double jitterBufferDelay;
unsigned long long jitterBufferEmittedCount; unsigned long long jitterBufferEmittedCount;
unsigned long framesReceived; unsigned long framesReceived;
unsigned long keyFramesReceived;
unsigned long framesDecoded; unsigned long framesDecoded;
unsigned long framesDropped; unsigned long framesDropped;
unsigned long partialFramesLost; unsigned long partialFramesLost;
@ -359,3 +360,11 @@ partial dictionary RTCRtpStreamStats {
partial dictionary RTCInboundRtpStreamStats { partial dictionary RTCInboundRtpStreamStats {
double fractionLost; double fractionLost;
}; };
partial dictionary RTCVideoSenderStats {
unsigned long keyFramesSent;
};
partial dictionary RTCVideoReceiverStats {
unsigned long keyFramesReceived;
};

View file

@ -171,6 +171,7 @@ interface XRInputSource {
[SameObject] readonly attribute XRSpace targetRaySpace; [SameObject] readonly attribute XRSpace targetRaySpace;
[SameObject] readonly attribute XRSpace? gripSpace; [SameObject] readonly attribute XRSpace? gripSpace;
[SameObject] readonly attribute Gamepad? gamepad; [SameObject] readonly attribute Gamepad? gamepad;
[SameObject] readonly attribute FrozenArray<DOMString> profiles;
}; };
[SecureContext, Exposed=Window] [SecureContext, Exposed=Window]

View file

@ -1,70 +0,0 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>KV Storage: API surface</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script type="module">
import { storage, StorageArea } from "std:kv-storage";
import * as classAssert from "./helpers/class-assert.js";
import { testWithArea } from "./helpers/kvs-tests.js";
test(() => {
classAssert.isConstructor(StorageArea);
classAssert.functionName(StorageArea, "StorageArea");
classAssert.functionLength(StorageArea, 1);
classAssert.hasClassPrototype(StorageArea);
classAssert.hasPrototypeConstructorLink(StorageArea);
classAssert.propertyKeys(StorageArea, ["length", "prototype", "name"], []);
}, "StorageArea constructor");
test(() => {
classAssert.propertyKeys(StorageArea.prototype, [
"constructor", "set", "get", "delete", "clear",
"keys", "values", "entries", "backingStore"
], [
Symbol.asyncIterator
]);
classAssert.methods(StorageArea.prototype, {
set: 2,
get: 1,
delete: 1,
clear: 0,
keys: 0,
values: 0,
entries: 0
});
classAssert.accessors(StorageArea.prototype, {
backingStore: ["get"]
});
}, "StorageArea.prototype methods and properties");
test(() => {
assert_equals(StorageArea.prototype[Symbol.asyncIterator], StorageArea.prototype.entries);
}, "[Symbol.asyncIterator]() and entries() must be the same function");
testWithArea(async area => {
classAssert.propertyKeys(area, [], []);
}, "Instances don't have any properties");
test(() => {
assert_equals(storage instanceof StorageArea, true, "instanceof");
assert_equals(storage.constructor, StorageArea, ".constructor property");
assert_equals(Object.getPrototypeOf(storage), StorageArea.prototype, "[[Prototype]]");
}, "Built-in storage export is a StorageArea");
testWithArea(async area => {
assert_false(Symbol.toStringTag in StorageArea.prototype,
"Symbol.toStringTag must not be in the prototype");
assert_equals(Object.prototype.toString.call(StorageArea.prototype), "[object Object]",
"The prototype must not be customized");
assert_equals(Object.prototype.toString.call(area), "[object Object]",
"A constructed StorageArea must not be customized");
assert_equals(Object.prototype.toString.call(storage), "[object Object]",
"The default storage area must not be customized");
}, "No custom toStringTag");
</script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="utf-8"> <meta charset="utf-8">
<title>KV Storage: causing errors by directly manipulating the IDB</title> <title>KV Storage: causing errors by directly manipulating the IDB</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>

View file

@ -1,13 +1,14 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="utf-8"> <meta charset="utf-8">
<title>KV Storage: entries() trickier tests</title> <title>KV Storage: entries() trickier tests</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script type="module"> <script type="module">
import { testWithArea } from "./helpers/kvs-tests.js"; import { testWithArea } from "./helpers/kvs-tests.js";
import * as classAssert from "./helpers/class-assert.js"; import * as iterAssert from "./helpers/iter-assert.js";
import { import {
assertAsyncIteratorEquals, assertAsyncIteratorEquals,
assertAsyncIteratorCustomEquals, assertAsyncIteratorCustomEquals,
@ -76,7 +77,7 @@ testWithArea(async area => {
await iter.next() await iter.next()
]; ];
classAssert.iterResultsCustom( iterAssert.iterResultsCustom(
iterResults, iterResults,
[ [
[[1, "value 1"], false], [[1, "value 1"], false],
@ -106,7 +107,7 @@ testWithArea(async area => {
]; ];
const iterResults = await Promise.all(promises); const iterResults = await Promise.all(promises);
classAssert.iterResultsCustom( iterAssert.iterResultsCustom(
iterResults, iterResults,
[ [
[[1, "value 1"], false], [[1, "value 1"], false],

View file

@ -1,139 +0,0 @@
export function isConstructor(o) {
assert_equals(typeof o, "function", "Must be a function according to typeof");
assert_true(isConstructorTest(o), "Must be a constructor according to the meta-object protocol");
assert_throws(new TypeError(), () => o(), "Attempting to call (not construct) must throw");
}
export function functionLength(o, expected, label) {
const lengthExpected = { writable: false, enumerable: false, configurable: true };
const { value } = propertyDescriptor(o, "length", lengthExpected);
assert_equals(value, expected, `${formatLabel(label)}length value`);
}
export function functionName(o, expected, label) {
const lengthExpected = { writable: false, enumerable: false, configurable: true };
const { value } = propertyDescriptor(o, "name", lengthExpected);
assert_equals(value, expected, `${formatLabel(label)}name value`);
}
export function hasClassPrototype(o) {
const prototypeExpected = { writable: false, enumerable: false, configurable: false };
const { value } = propertyDescriptor(o, "prototype", prototypeExpected);
assert_equals(typeof value, "object", "prototype must be an object");
assert_not_equals(value, null, "prototype must not be null");
}
export function hasPrototypeConstructorLink(klass) {
const constructorExpected = { writable: true, enumerable: false, configurable: true };
const { value } = propertyDescriptor(klass.prototype, "constructor", constructorExpected);
assert_equals(value, klass, "constructor property must match");
}
export function propertyKeys(o, expectedNames, expectedSymbols, label) {
label = formatLabel(label);
assert_array_equals(Object.getOwnPropertyNames(o), expectedNames, `${label}property names`);
assert_array_equals(Object.getOwnPropertySymbols(o), expectedSymbols,
`${label}property symbols`);
}
export function iterResultCustom(o, expectedValue, expectedDone, valueAsserter, label) {
label = formatLabel(label);
assert_equals(typeof expectedDone, "boolean",
`${label} iterResult assert usage check: expectedDone must be a boolean`);
propertyKeys(o, ["value", "done"], [], label);
assert_equals(Object.getPrototypeOf(o), Object.prototype, `${label}prototype must be Object.prototype`);
valueAsserter(o.value, expectedValue, `${label}value`);
assert_equals(o.done, expectedDone, `${label}done`);
}
export function iterResult(o, expectedValue, expectedDone, label) {
return iterResultCustom(o, expectedValue, expectedDone, assert_equals, label);
}
export function iterResultsCustom(actualArray, expectedArrayOfArrays, valueAsserter, label) {
label = formatLabel(label);
assert_equals(actualArray.length, expectedArrayOfArrays.length,
`${label} iterResults assert usage check: actual and expected must have the same length`);
for (let i = 0; i < actualArray.length; ++i) {
const [expectedValue, expectedDone] = expectedArrayOfArrays[i];
iterResultCustom(actualArray[i], expectedValue, expectedDone, valueAsserter, `${label}iter result ${i}`);
}
}
export function iterResults(actualArray, expectedArrayOfArrays, label) {
return iterResultsCustom(actualArray, expectedArrayOfArrays, assert_equals, label);
}
export function methods(o, expectedMethods) {
for (const [name, length] of Object.entries(expectedMethods)) {
method(o, name, length);
}
}
export function accessors(o, expectedAccessors) {
for (const [name, accessorTypes] of Object.entries(expectedAccessors)) {
accessor(o, name, accessorTypes);
}
}
function method(o, prop, length) {
const methodExpected = { writable: true, enumerable: false, configurable: true };
const { value } = propertyDescriptor(o, prop, methodExpected);
assert_equals(typeof value, "function", `${prop} method must be a function according to typeof`);
assert_false(isConstructorTest(value),
`${prop} method must not be a constructor according to the meta-object protocol`);
functionLength(value, length, prop);
functionName(value, prop, prop);
propertyKeys(value, ["length", "name"], [], prop);
}
function accessor(o, prop, expectedAccessorTypes) {
const accessorExpected = { enumerable: false, configurable: true };
const propDesc = propertyDescriptor(o, prop, accessorExpected);
for (const possibleType of ["get", "set"]) {
const accessorFunc = propDesc[possibleType];
if (expectedAccessorTypes.includes(possibleType)) {
const label = `${prop}'s ${possibleType}ter`;
assert_equals(typeof accessorFunc, "function",
`${label} must be a function according to typeof`);
assert_false(isConstructorTest(accessorFunc),
`${label} must not be a constructor according to the meta-object protocol`);
functionLength(accessorFunc, possibleType === "get" ? 0 : 1, label);
functionName(accessorFunc, `${possibleType} ${prop}`, label);
propertyKeys(accessorFunc, ["length", "name"], [], label);
} else {
assert_equals(accessorFunc, undefined, `${prop} must not have a ${possibleType}ter`);
}
}
}
function propertyDescriptor(obj, prop, mustMatch) {
const propDesc = Object.getOwnPropertyDescriptor(obj, prop);
for (const key in Object.keys(mustMatch)) {
assert_equals(propDesc[key], mustMatch[key], `${prop} ${key}`);
}
return propDesc;
}
function isConstructorTest(o) {
try {
new (new Proxy(o, {construct: () => ({})}));
return true;
} catch (e) {
return false;
}
}
function formatLabel(label) {
return label !== undefined ? `${label} ` : "";
}

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Helper file to be loaded in an iframe that exposes a copy of StorageArea as a global</title>
<script type="module">
import { StorageArea } from "std:kv-storage";
window.StorageArea = StorageArea;
</script>

View file

@ -0,0 +1,42 @@
export function iterResultCustom(o, expectedValue, expectedDone, valueAsserter, label) {
label = formatLabel(label);
assert_equals(typeof expectedDone, "boolean",
`${label} iterResult assert usage check: expectedDone must be a boolean`);
propertyKeys(o, ["value", "done"], [], label);
assert_equals(Object.getPrototypeOf(o), Object.prototype, `${label}prototype must be Object.prototype`);
valueAsserter(o.value, expectedValue, `${label}value`);
assert_equals(o.done, expectedDone, `${label}done`);
}
export function iterResult(o, expectedValue, expectedDone, label) {
return iterResultCustom(o, expectedValue, expectedDone, assert_equals, label);
}
export function iterResultsCustom(actualArray, expectedArrayOfArrays, valueAsserter, label) {
label = formatLabel(label);
assert_equals(actualArray.length, expectedArrayOfArrays.length,
`${label} iterResults assert usage check: actual and expected must have the same length`);
for (let i = 0; i < actualArray.length; ++i) {
const [expectedValue, expectedDone] = expectedArrayOfArrays[i];
iterResultCustom(actualArray[i], expectedValue, expectedDone, valueAsserter, `${label}iter result ${i}`);
}
}
export function iterResults(actualArray, expectedArrayOfArrays, label) {
return iterResultsCustom(actualArray, expectedArrayOfArrays, assert_equals, label);
}
function propertyKeys(o, expectedNames, expectedSymbols, label) {
label = formatLabel(label);
assert_array_equals(Object.getOwnPropertyNames(o), expectedNames, `${label}property names`);
assert_array_equals(Object.getOwnPropertySymbols(o), expectedSymbols,
`${label}property symbols`);
}
function formatLabel(label) {
return label !== undefined ? `${label} ` : "";
}

View file

@ -0,0 +1,175 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>KV Storage: IDL interface tests</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script type="module">
import { storage, StorageArea } from "std:kv-storage";
// Web IDL/idlharness.js do not yet have support for the spec's IDL, which uses module {},
// async_iterator, and some new extended attributes. This IDL is a mutated version to work with the
// current idlharness.js to get some coverage.
//
// When the relevant Web IDL PRs land and idlharness.js gets updated, we can replace this file with
// a normal-style idlharness test, with the IDL scraped from the spec.
//
// Other tests in this file are similarly ones that should be generatable from the IDL, in theory.
const idl = `
[Constructor(DOMString name)]
interface StorageArea {
Promise<void> set(any key, any value);
Promise<any> get(any key);
Promise<void> delete(any key);
Promise<void> clear();
// async_iterable<any, any>;
[SameObject] readonly attribute object backingStore;
};
`;
// Define a global property because idlharness.js only understands
// global properties, not modules.
Object.defineProperty(window, "StorageArea", {
configurable: true,
enumerable: false,
writable: true,
value: StorageArea
});
test(t => {
window.testStorageArea = storage;
t.add_cleanup(() => {
delete window.testStorageArea;
});
const idlArray = new IdlArray();
idlArray.add_idls(idl);
idlArray.add_objects({ StorageArea: ["window.testStorageArea"] });
idlArray.test();
}, "idlharness basic interface tests");
test(() => {
assert_equals(storage instanceof StorageArea, true, "instanceof");
assert_equals(storage.constructor, StorageArea, ".constructor property");
assert_equals(Object.getPrototypeOf(storage), StorageArea.prototype, "[[Prototype]]");
}, "Built-in storage export is a StorageArea");
// These should be auto-tested by idlharness eventually, similar to
// https://github.com/web-platform-tests/wpt/blob/3725067ef0328c998be2ba93dbaeb0579586fccd/resources/idlharness.js#L2452
// for sync iterators (although this tests more than that does).
test(() => {
for (const methodName of ["keys", "values", "entries"]) {
const descriptor = Object.getOwnPropertyDescriptor(StorageArea.prototype, methodName);
assert_true(descriptor.writable, `${methodName} property should be writable`);
assert_true(descriptor.configurable, `${methodName} property should be configurable`);
// May need updating if https://github.com/heycam/webidl/issues/738 changes the spec
assert_true(descriptor.enumerable, `${methodName} property should be enumerable`);
assert_equals(typeof descriptor.value, "function",
`${methodName} property should be a function`);
assert_equals(descriptor.value.length, 0, `${methodName} function object length should be 0`);
assert_equals(descriptor.value.name, methodName,
`${methodName} function object should have the right name`);
assert_throws(new TypeError(), () => descriptor.value.call(StorageArea.prototype),
`${methodName} should throw when called on the prototype directly`);
assert_throws(new TypeError(), () => descriptor.value.call({}),
`${methodName} should throw when called on an empty object`);
}
const AsyncIteratorPrototype =
Object.getPrototypeOf(Object.getPrototypeOf(async function*() {}).prototype);
const asyncIteratorProto = Object.getPrototypeOf(storage.keys());
assert_equals(Object.getPrototypeOf(storage.values()), asyncIteratorProto,
"keys() and values() return values must have the same prototype");
assert_equals(Object.getPrototypeOf(storage.entries()), asyncIteratorProto,
"keys() and entries() return values must have the same prototype");
assert_equals(Object.getPrototypeOf(asyncIteratorProto), AsyncIteratorPrototype,
"[[Prototype]] must be the async iterator prototype");
assert_array_equals(Object.getOwnPropertyNames(asyncIteratorProto), ["next"],
`async iterator prototype object must have a next method`);
const nextMethodDescriptor = Object.getOwnPropertyDescriptor(asyncIteratorProto, "next");
assert_true(nextMethodDescriptor.writable, `async iterator next property should be writable`);
assert_true(nextMethodDescriptor.configurable,
`async iterator next property should be configurable`);
// May need updating if https://github.com/heycam/webidl/issues/739 changes the spec
assert_true(nextMethodDescriptor.enumerable,
`async iterator next property should be enumerable`);
assert_equals(typeof nextMethodDescriptor.value, "function",
`async iterator next property should be a function`);
assert_equals(nextMethodDescriptor.value.length, 0,
`async iterator next function object length should be 0`);
assert_equals(nextMethodDescriptor.value.name, "next",
`async iterator next function object should have the right name`);
assert_array_equals(Object.getOwnPropertySymbols(asyncIteratorProto), [Symbol.toStringTag]);
const toStringTagDescriptor = Object.getOwnPropertyDescriptor(
asyncIteratorProto,
Symbol.toStringTag
);
assert_false(toStringTagDescriptor.writable,
`async iterator @@toStringTag property should be non-writable`);
assert_true(toStringTagDescriptor.configurable,
`async iterator @@toStringTag property should be configurable`);
assert_false(toStringTagDescriptor.enumerable,
`async iterator @@toStringTag property should be non-enumerable`);
assert_equals(toStringTagDescriptor.value, "StorageArea AsyncIterator",
`async iterator @@toStringTag property should have the right value`);
assert_equals(StorageArea.prototype[Symbol.asyncIterator], StorageArea.prototype.entries,
"@@asyncIterator method should be the same as entries");
}, "@@asyncIterator tests");
promise_test(async t => {
const iframe = document.createElement("iframe");
iframe.src = "helpers/expose-as-global.html";
document.body.append(iframe);
await frameLoadPromise(iframe);
const OtherStorageArea = iframe.contentWindow.StorageArea;
await promise_rejects(t, new TypeError(),
OtherStorageArea.prototype.set.call(storage, "testkey", "testvalue"),
`set() must reject cross-realm`);
await promise_rejects(t, new TypeError(),
OtherStorageArea.prototype.get.call(storage, "testkey"),
`get() must reject cross-realm`);
await promise_rejects(t, new TypeError(),
OtherStorageArea.prototype.delete.call(storage, "testkey"),
`delete() must reject cross-realm`);
await promise_rejects(t, new TypeError(), OtherStorageArea.prototype.clear.call(storage),
`clear() must reject cross-realm`);
assert_throws(new TypeError(), () => OtherStorageArea.prototype.keys.call(storage),
`keys() must throw cross-realm`);
assert_throws(new TypeError(), () => OtherStorageArea.prototype.values.call(storage),
`values() must throw cross-realm`);
assert_throws(new TypeError(), () => OtherStorageArea.prototype.entries.call(storage),
`entries() must throw cross-realm`);
const otherBackingStoreGetter =
Object.getOwnPropertyDescriptor(OtherStorageArea.prototype, "backingStore").get;
assert_throws(new TypeError(), () => otherBackingStoreGetter.call(storage),
`backingStore must throw cross-realm`);
}, "Same-realm brand checks");
function frameLoadPromise(frame) {
return new Promise((resolve, reject) => {
frame.onload = resolve;
frame.onerror = () => reject(new Error(`${frame.src} failed to load`));
});
}
</script>

View file

@ -1,6 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="utf-8"> <meta charset="utf-8">
<title>KV Storage: keys()/values()/entries()</title> <title>KV Storage: keys()/values()/entries()</title>
<meta name="timeout" content="long">
<!-- <!--
This file contains tests that are easy to generalize over all three methods. This file contains tests that are easy to generalize over all three methods.
See sibling files for more complicated tests which are not worth generalizing. See sibling files for more complicated tests which are not worth generalizing.
@ -12,30 +14,11 @@
<script type="module"> <script type="module">
import { testWithArea } from "./helpers/kvs-tests.js"; import { testWithArea } from "./helpers/kvs-tests.js";
import * as classAssert from "./helpers/class-assert.js"; import * as iterAssert from "./helpers/iter-assert.js";
import { assertAsyncIteratorEquals } from "./helpers/equality-asserters.js"; import { assertAsyncIteratorEquals } from "./helpers/equality-asserters.js";
// Also uses some global functions included via support-promises.js. // Also uses some global functions included via support-promises.js.
const AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function*() {}).prototype);
testWithArea(async area => {
const keysProto = Object.getPrototypeOf(area.keys());
const valuesProto = Object.getPrototypeOf(area.values());
const entriesProto = Object.getPrototypeOf(area.entries());
assert_equals(keysProto, valuesProto, "keys() and values() return values' must have the same [[Prototype]]");
assert_equals(valuesProto, entriesProto, "values() and entries () return values' must have the same [[Prototype]]");
}, "keys()/values()/entries() all use the same prototype object");
for (const method of ["keys", "values", "entries"]) { for (const method of ["keys", "values", "entries"]) {
testWithArea(async area => {
const iter = area[method]();
const proto = Object.getPrototypeOf(iter);
assert_equals(Object.getPrototypeOf(proto), AsyncIteratorPrototype,
"[[Prototype]] must be the async iterator prototype");
classAssert.propertyKeys(proto, ["next"], [], "must only have a next() method");
}, `${method}() return value is an async iterator of the expected shape`);
testWithArea(async area => { testWithArea(async area => {
const iter = area[method](); const iter = area[method]();
const promise = iter.next(); const promise = iter.next();
@ -47,7 +30,7 @@ for (const method of ["keys", "values", "entries"]) {
await iter.next() await iter.next()
]; ];
classAssert.iterResults(iterResults, [ iterAssert.iterResults(iterResults, [
[undefined, true], [undefined, true],
[undefined, true] [undefined, true]
]); ]);

View file

@ -1,13 +1,14 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="utf-8"> <meta charset="utf-8">
<title>KV Storage: keys() trickier tests</title> <title>KV Storage: keys() trickier tests</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script type="module"> <script type="module">
import { testWithArea } from "./helpers/kvs-tests.js"; import { testWithArea } from "./helpers/kvs-tests.js";
import * as classAssert from "./helpers/class-assert.js"; import * as iterAssert from "./helpers/iter-assert.js";
import { import {
assertAsyncIteratorEquals, assertAsyncIteratorEquals,
assertAsyncIteratorCustomEquals, assertAsyncIteratorCustomEquals,
@ -62,7 +63,7 @@ testWithArea(async area => {
await iter.next() await iter.next()
]; ];
classAssert.iterResults(iterResults, [ iterAssert.iterResults(iterResults, [
[1, false], [1, false],
[2, false], [2, false],
[3, false], [3, false],
@ -88,7 +89,7 @@ testWithArea(async area => {
]; ];
const iterResults = await Promise.all(promises); const iterResults = await Promise.all(promises);
classAssert.iterResults(iterResults, [ iterAssert.iterResults(iterResults, [
[1, false], [1, false],
[2, false], [2, false],
[3, false], [3, false],

View file

@ -1,6 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="utf-8"> <meta charset="utf-8">
<title>KV storage: storage export smoke test</title> <title>KV storage: storage export smoke test</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>

View file

@ -1,6 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="utf-8"> <meta charset="utf-8">
<title>KV Storage: undefined values</title> <title>KV Storage: undefined values</title>
<meta name="timeout" content="long">
<!-- https://github.com/wicg/kv-storage/commit/5bf31109f37d1371f619ea33d0e2391f10e8b8f5 --> <!-- https://github.com/wicg/kv-storage/commit/5bf31109f37d1371f619ea33d0e2391f10e8b8f5 -->
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>

View file

@ -1,13 +1,14 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="utf-8"> <meta charset="utf-8">
<title>KV Storage: values() trickier tests</title> <title>KV Storage: values() trickier tests</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script type="module"> <script type="module">
import { testWithArea } from "./helpers/kvs-tests.js"; import { testWithArea } from "./helpers/kvs-tests.js";
import * as classAssert from "./helpers/class-assert.js"; import * as iterAssert from "./helpers/iter-assert.js";
import { assertAsyncIteratorEquals } from "./helpers/equality-asserters.js"; import { assertAsyncIteratorEquals } from "./helpers/equality-asserters.js";
testWithArea(async area => { testWithArea(async area => {
@ -57,7 +58,7 @@ testWithArea(async area => {
await iter.next() await iter.next()
]; ];
classAssert.iterResults(iterResults, [ iterAssert.iterResults(iterResults, [
["value 1", false], ["value 1", false],
["value 2", false], ["value 2", false],
["value 3", false], ["value 3", false],
@ -83,7 +84,7 @@ testWithArea(async area => {
]; ];
const iterResults = await Promise.all(promises); const iterResults = await Promise.all(promises);
classAssert.iterResults(iterResults, [ iterAssert.iterResults(iterResults, [
["value 1", false], ["value 1", false],
["value 2", false], ["value 2", false],
["value 3", false], ["value 3", false],

View file

@ -6,6 +6,8 @@
<script> <script>
'use strict'; 'use strict';
// NOTE: affected when 'resources/interfaces-worker.sub.js' srcs change:
// const srcs = ['dom', 'html', 'service-workers', 'dedicated-workers'];
service_worker_test( service_worker_test(
'resources/interfaces-worker.sub.js', 'resources/interfaces-worker.sub.js',
'Interfaces and attributes in ServiceWorkerGlobalScope'); 'Interfaces and attributes in ServiceWorkerGlobalScope');