Update web-platform-tests to revision ef44bff0adaa07f2e420a0cbc1bc493cd5786656

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

View file

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

View file

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

View file

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

View file

@ -312,21 +312,18 @@
[<iframe>: separate response Content-Type: */* text/html]
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]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
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
[<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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -4,12 +4,18 @@
<meta charset="utf-8">
<title>
CSS Values and Units Test:
Calc() inside calc()
32 nested pairs of parentheses inside calc()
</title>
<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
rel="author"
title="François REMY"
@ -29,7 +35,7 @@
html { background: red; overflow: hidden; }
#outer { position: absolute; top: 0px; left: 0px; background: green; width: 100%; }
#outer { height: calc((((((((((((((((((((((((100%)))))))))))))))))))))))); }
#outer { height: calc((((((((((((((((((((((((((((((((100%)))))))))))))))))))))))))))))))); }
</style>

View file

@ -75,6 +75,7 @@
== 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-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-001i.html object-fit-contain-svg-001-ref.html
== object-fit-contain-svg-001o.html object-fit-contain-svg-001-ref.html

View file

@ -5,6 +5,11 @@
<title>CSS Reference: Inlinize block-level boxes inside ruby</title>
<link rel="author" title="Xidorn Quan" href="mailto:quanxunzhen@gmail.com">
<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 {
background-color: yellow;
width: 100px; height: 30px;

View file

@ -7,6 +7,11 @@
<link rel="help" href="http://www.w3.org/TR/css-ruby-1/#anon-gen-inlinize">
<link rel="match" href="ruby-inlinize-blocks-002-ref.html">
<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 {
background-color: yellow;
width: 100px; height: 30px;

View file

@ -3,7 +3,6 @@
<head>
<title>CSS Reference File</title>
<link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
</head>
<style>
body {
margin: 0;
@ -28,6 +27,7 @@
background-color: green;
}
</style>
</head>
<body>
<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">

View file

@ -15,7 +15,6 @@
top left with a shape-margin. Additionally, the
shape-outside: circle element is offset from
its containing block.">
</head>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@font-face {
@ -66,6 +65,7 @@
z-index: -1;
}
</style>
</head>
<body>
<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">

View file

@ -3,7 +3,6 @@
<head>
<title>CSS Reference File</title>
<link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
</head>
<style>
body {
margin: 0;
@ -28,6 +27,7 @@
background-color: green;
}
</style>
</head>
<body>
<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">

View file

@ -13,7 +13,6 @@
a ellipse with a shape-margin in pixel units.
Additionally, the shape-outside: ellipse element
is offset from its containing block.">
</head>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@font-face {
@ -64,6 +63,7 @@
z-index: -1;
}
</style>
</head>
<body>
<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">

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<meta charset="utf-8">
<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/testharnessreport.js"></script>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,6 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<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.
See sibling files for more complicated tests which are not worth generalizing.
@ -12,30 +14,11 @@
<script type="module">
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";
// 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"]) {
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 => {
const iter = area[method]();
const promise = iter.next();
@ -47,7 +30,7 @@ for (const method of ["keys", "values", "entries"]) {
await iter.next()
];
classAssert.iterResults(iterResults, [
iterAssert.iterResults(iterResults, [
[undefined, true],
[undefined, true]
]);

View file

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

View file

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

View file

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

View file

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

View file

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