mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Update web-platform-tests to revision ef44bff0adaa07f2e420a0cbc1bc493cd5786656
This commit is contained in:
parent
61cadfa9a6
commit
67592a2228
61 changed files with 981 additions and 481 deletions
|
@ -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": [
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -74,3 +74,6 @@
|
||||||
[opacity end]
|
[opacity end]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[outline-width end]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
98
tests/wpt/metadata/fetch/origin/assorted.window.js.ini
Normal file
98
tests/wpt/metadata/fetch/origin/assorted.window.js.ini
Normal 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
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[serviceworker.tentative.https.sub.html]
|
||||||
|
[sec-metadata for service worker scripts]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_3.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[Worker-constructor.html]
|
|
||||||
expected: ERROR
|
|
|
@ -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");
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
202
tests/wpt/web-platform-tests/fetch/origin/assorted.window.js
Normal file
202
tests/wpt/web-platform-tests/fetch/origin/assorted.window.js
Normal 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"));
|
||||||
|
});
|
||||||
|
});
|
|
@ -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");
|
|
|
@ -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>"
|
||||||
|
|
|
@ -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>"
|
|
@ -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"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
};
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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>
|
|
|
@ -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>
|
||||||
|
|
|
@ -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],
|
||||||
|
|
|
@ -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} ` : "";
|
|
||||||
}
|
|
|
@ -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>
|
|
@ -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} ` : "";
|
||||||
|
}
|
175
tests/wpt/web-platform-tests/kv-storage/interface.https.html
Normal file
175
tests/wpt/web-platform-tests/kv-storage/interface.https.html
Normal 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>
|
|
@ -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]
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -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],
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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],
|
||||||
|
|
|
@ -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');
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue