Update web-platform-tests to revision 9c5c4c87d363854a1b039b6abe51627a5f0b02b9

This commit is contained in:
WPT Sync Bot 2020-08-12 08:21:45 +00:00
parent 6d0cc4a1b7
commit 35d789443e
92 changed files with 1446 additions and 287 deletions

View file

@ -1,5 +0,0 @@
[url-charset.window.html]
expected: TIMEOUT
[Blob charset should override any auto-detected charset.]
expected: TIMEOUT

View file

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

View file

@ -5,6 +5,9 @@
[[data-expected-height\] 7] [[data-expected-height\] 7]
expected: FAIL expected: FAIL
[[data-expected-height\] 4] [[data-expected-height\] 1]
expected: FAIL
[[data-expected-height\] 2]
expected: FAIL expected: FAIL

View file

@ -77,3 +77,6 @@
[After -> Active] [After -> Active]
expected: FAIL expected: FAIL
[Cancel the transition after it finishes]
expected: FAIL

View file

@ -1,4 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -1,2 +0,0 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

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

View file

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

View file

@ -11,6 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff] [X-Content-Type-Options%3A%20'NosniFF']
expected: FAIL expected: FAIL

View file

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

View file

@ -171,6 +171,3 @@
[XHTML img usemap="#hash-id"] [XHTML img usemap="#hash-id"]
expected: FAIL expected: FAIL
[HTML (standards) IMG usemap="no-hash-name"]
expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html] [iframe_sandbox_popups_escaping-2.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: FAIL

View file

@ -1,4 +0,0 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

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

View file

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

View file

@ -1,5 +0,0 @@
[url-charset.window.html]
expected: TIMEOUT
[Blob charset should override any auto-detected charset.]
expected: TIMEOUT

View file

@ -24620,12 +24620,12 @@
}, },
"animation-worklet": { "animation-worklet": {
"worklet-animation-cancel.https.html": [ "worklet-animation-cancel.https.html": [
"3a28c7515db455ba50ed50135c5a5bb8534ae580", "3b664ecddba8fb805b035d759a3b3cb109329274",
[ [
null, null,
[ [
[ [
"/animation-worklet/worklet-animation-cancel-ref.html", "/animation-worklet/references/not-translated-box-ref.html",
"==" "=="
] ]
], ],
@ -24633,12 +24633,12 @@
] ]
], ],
"worklet-animation-get-timing-on-worklet-thread.https.html": [ "worklet-animation-get-timing-on-worklet-thread.https.html": [
"54d1c8bcc0c0a20d9af4e96ea240060ebd348982", "4ba68d79e4de5544d36c826ad3b41613d9e3f289",
[ [
null, null,
[ [
[ [
"/animation-worklet/worklet-animation-get-timing-on-worklet-thread-ref.html", "/animation-worklet/references/translated-box-ref.html",
"==" "=="
] ]
], ],
@ -24646,12 +24646,12 @@
] ]
], ],
"worklet-animation-local-time-after-duration.https.html": [ "worklet-animation-local-time-after-duration.https.html": [
"adc90f1d3f6befa906473dd1bfb500b605431d0a", "21293bc09b17591cb5dd8c2bbe3b09e726b4b5f3",
[ [
null, null,
[ [
[ [
"/animation-worklet/worklet-animation-local-time-after-duration-ref.html", "/animation-worklet/references/not-translated-box-ref.html",
"==" "=="
] ]
], ],
@ -24659,18 +24659,33 @@
] ]
], ],
"worklet-animation-local-time-before-start.https.html": [ "worklet-animation-local-time-before-start.https.html": [
"addb16e7d1751280c8d4f3e0052b808ab807cd7e", "a959b73c08d8c2a2a32fb5d6d3dbe8169b0c6512",
[ [
null, null,
[ [
[ [
"/animation-worklet/worklet-animation-local-time-before-start-ref.html", "/animation-worklet/references/translated-box-ref.html",
"==" "=="
] ]
], ],
{} {}
] ]
], ],
"worklet-animation-local-time-null-2.https.html": [
"9c499bac0ee51b7b41c9cf1ca5f917d096c9a756",
[
null,
[
[
"/animation-worklet/worklet-animation-local-time-null-2-ref.html",
"=="
]
],
{
"timeout": "long"
}
]
],
"worklet-animation-pause-immediately.https.html": [ "worklet-animation-pause-immediately.https.html": [
"f9dcf30bc908adb4e6b260dd00263e434a9b9ae4", "f9dcf30bc908adb4e6b260dd00263e434a9b9ae4",
[ [
@ -24698,12 +24713,12 @@
] ]
], ],
"worklet-animation-set-keyframes.https.html": [ "worklet-animation-set-keyframes.https.html": [
"017408494602ff51aec483ccc6dd0dd2f82bba4e", "d3d02898db294b82bedda67b82b286cae9aeff06",
[ [
null, null,
[ [
[ [
"/animation-worklet/worklet-animation-set-keyframes-ref.html", "/animation-worklet/references/translated-box-ref.html",
"==" "=="
] ]
], ],
@ -24711,12 +24726,12 @@
] ]
], ],
"worklet-animation-set-timing.https.html": [ "worklet-animation-set-timing.https.html": [
"ac3f05f4234ac1036e388536c4237686b07e6037", "6c5cd51300c5cbea15d094a5023d8b663fa759e6",
[ [
null, null,
[ [
[ [
"/animation-worklet/worklet-animation-set-timing-ref.html", "/animation-worklet/references/translated-box-ref.html",
"==" "=="
] ]
], ],
@ -147545,7 +147560,7 @@
] ]
], ],
"flex-and-intrinsic-sizes-002.html": [ "flex-and-intrinsic-sizes-002.html": [
"1f93d0e3d0e2b6bff13351e92c7ffaba7cb68553", "6b2df4e572094d424833e3a342431b11d7f4dc4a",
[ [
null, null,
[ [
@ -167553,7 +167568,7 @@
] ]
], ],
"abspos-008.tentative.html": [ "abspos-008.tentative.html": [
"c81e9fcf40547bf34c47ab11ca3fda307f5f77ed", "429b14ac35feb710354b9133ba435dc7fd192808",
[ [
null, null,
[ [
@ -167865,7 +167880,111 @@
] ]
], ],
"block-aspect-ratio-020.tentative.html": [ "block-aspect-ratio-020.tentative.html": [
"3cb076252b0a356774cd4f9257c8561973a5d5d0", "b07e91faf9860ea4b07d233103233b42e9ffd9c8",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"block-aspect-ratio-021.tentative.html": [
"0e9c1b6b0a2697d9f1ee6309e4255859ecc7d1ad",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"block-aspect-ratio-022.tentative.html": [
"1ee8021a3bbb428d9f7234590072986bd3ec4318",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"block-aspect-ratio-023.tentative.html": [
"e38cfe0cb26e47eea9c6c8c32a692d045c692a13",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"block-aspect-ratio-024.tentative.html": [
"d6f6716b99d527d421e892d80a79f9a31e84ec45",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"block-aspect-ratio-025.tentative.html": [
"6ce673672372a84bbba40bc455d4fa744848852e",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"block-aspect-ratio-026.tentative.html": [
"0e0ce5efe3aa8b83f64e8deee46bafb2c7144c58",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"block-aspect-ratio-027.tentative.html": [
"532f558b39deff2788e58865cc2ae3777a6d4716",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"block-aspect-ratio-028.tentative.html": [
"ec49bd4d7af834c3fea345b34b0eb05ff58f9e4d",
[ [
null, null,
[ [
@ -168318,6 +168437,32 @@
], ],
{} {}
] ]
],
"replaced-element-013.tentative.html": [
"bcbf653d68af4c1f908a59ca6e66e5752a09c833",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"replaced-element-014.tentative.html": [
"4c1ad16ce8624295251b73d1a14f53b9c9905610",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
] ]
}, },
"auto-scrollbar-inside-stf-abspos.html": [ "auto-scrollbar-inside-stf-abspos.html": [
@ -248506,7 +248651,7 @@
}, },
"support": { "support": {
".azure-pipelines.yml": [ ".azure-pipelines.yml": [
"cbd7b33b5d421e8dda64adfd8e25383e82173a5b", "fbdef35656e149a16e00a71964f4aad1d6be2196",
[] []
], ],
".codecov.yml": [ ".codecov.yml": [
@ -249589,8 +249734,12 @@
[] []
], ],
"references": { "references": {
"not-translated-box-ref.html": [
"96acf1ad96c7c41e870429d55142269f4468bb97",
[]
],
"translated-box-ref.html": [ "translated-box-ref.html": [
"c73f5a177bf70f3a71d981bc9f04b38c5afe9f1c", "f1dde2e19b2ebad50dd29e693b2a81f7de2cc620",
[] []
] ]
}, },
@ -249604,28 +249753,8 @@
[] []
] ]
}, },
"worklet-animation-cancel-ref.html": [ "worklet-animation-local-time-null-2-ref.html": [
"d44927374703ef2b38d3ed0c9570609b62baec65", "3b7a2b9258d0c2a210aaa389fadc3787c0da93a5",
[]
],
"worklet-animation-get-timing-on-worklet-thread-ref.html": [
"aad07d5f6f26692dc47ce0219a78d3c1a50c608a",
[]
],
"worklet-animation-local-time-after-duration-ref.html": [
"96acf1ad96c7c41e870429d55142269f4468bb97",
[]
],
"worklet-animation-local-time-before-start-ref.html": [
"cda4ca4132cabcb13719f12248773026b0642df2",
[]
],
"worklet-animation-set-keyframes-ref.html": [
"26bf33fdb403877f2e3adf9b8bb3fca6bf8301bb",
[]
],
"worklet-animation-set-timing-ref.html": [
"8c354a8b06f815d4f8000895964b59c3f6c242e4",
[] []
], ],
"worklet-animation-start-delay-ref.html": [ "worklet-animation-start-delay-ref.html": [
@ -271102,6 +271231,10 @@
}, },
"sandbox": { "sandbox": {
"support": { "support": {
"empty.html": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
[]
],
"post-origin-on-load-worker.js": [ "post-origin-on-load-worker.js": [
"21ce5748ab8b1edbfd04c8f77a3fba54739a73d5", "21ce5748ab8b1edbfd04c8f77a3fba54739a73d5",
[] []
@ -271134,6 +271267,22 @@
"a7ea308208d81a9f9a2ec24004d5d1f72cf21f84", "a7ea308208d81a9f9a2ec24004d5d1f72cf21f84",
[] []
], ],
"sandboxed-service-worker.js": [
"d4971266f5cbc105f0381c8c40409050166b6564",
[]
],
"sandboxed-service-worker.js.headers": [
"1efcf8c226fac074c98d0a5a747856f532e5d84e",
[]
],
"sandboxed-shared-worker.js": [
"eb85eb41b4bd9efffd186dbd6be4004a2f707346",
[]
],
"sandboxed-shared-worker.js.headers": [
"1efcf8c226fac074c98d0a5a747856f532e5d84e",
[]
],
"unsandboxed-post-property-to-opener.html": [ "unsandboxed-post-property-to-opener.html": [
"ebbb54d36d86fe3ee3696b7dc302de11cb4ac30c", "ebbb54d36d86fe3ee3696b7dc302de11cb4ac30c",
[] []
@ -323236,7 +323385,7 @@
[] []
], ],
"testharness-api.md": [ "testharness-api.md": [
"72263dbd4ead3d0dc2340bcdc83064f9ea8dffa5", "38997a2dcc945c3c569b1348313ba92dff5fec85",
[] []
], ],
"testharness-tutorial.md": [ "testharness-tutorial.md": [
@ -330736,6 +330885,16 @@
"0db28208a6d9731570398b1d83f8bf1ba32a4dec", "0db28208a6d9731570398b1d83f8bf1ba32a4dec",
[] []
], ],
"access-reporting": {
"property-indexed-getter.https.html.headers": [
"64f4d5fedffd208b7174c7d8e0bce4e99ce1ac0f",
[]
],
"property-named-getter.https.html.headers": [
"64f4d5fedffd208b7174c7d8e0bce4e99ce1ac0f",
[]
]
},
"navigation-reporting": { "navigation-reporting": {
"report-only-four-reports.https.html.sub.headers": [ "report-only-four-reports.https.html.sub.headers": [
"5c886ad05386ec21dcc3722649a40653962d8519", "5c886ad05386ec21dcc3722649a40653962d8519",
@ -340773,7 +340932,7 @@
[] []
], ],
"performance-timeline.idl": [ "performance-timeline.idl": [
"d3783858578c881b352e571deeb8cc4c9f0e6454", "36107ddeea296df350a2f4da33fcc396d203eaae",
[] []
], ],
"periodic-background-sync.idl": [ "periodic-background-sync.idl": [
@ -350926,6 +351085,10 @@
"f495a0c554537f1161981e19c12c597ba41ef2b2", "f495a0c554537f1161981e19c12c597ba41ef2b2",
[] []
], ],
"com.apple.SafariTechnologyPreview.plist": [
"122080972c9f63410062ee8d33d0ed0286af8f11",
[]
],
"fyi_hook.yml": [ "fyi_hook.yml": [
"f02f3cd8224e0b3eb4f478318f0437f5a475f4e5", "f02f3cd8224e0b3eb4f478318f0437f5a475f4e5",
[] []
@ -350955,7 +351118,7 @@
[] []
], ],
"install_safari.yml": [ "install_safari.yml": [
"d0660d152bbdfc89f308bfc048cd2221e9ea7524", "6c1b562d411a2aeecc30d3fbc1aed6362f3526e5",
[] []
], ],
"pip_install.yml": [ "pip_install.yml": [
@ -359172,7 +359335,7 @@
[] []
], ],
"urltestdata.json": [ "urltestdata.json": [
"ded7107ff757d21fbc79939b92d0f709eba82764", "bc79426526c1a5ea9a4c9d07fc9305b0409089f4",
[] []
] ]
} }
@ -377141,6 +377304,13 @@
{} {}
] ]
], ],
"worklet-animation-local-time-null-1.https.html": [
"7db0a9721f67c59d6f453e32f3e2a65e064ff215",
[
null,
{}
]
],
"worklet-animation-pause.https.html": [ "worklet-animation-pause.https.html": [
"417db9e37a61193a99908648e4cbc3be4c2e9618", "417db9e37a61193a99908648e4cbc3be4c2e9618",
[ [
@ -385573,6 +385743,20 @@
{} {}
] ]
], ],
"service-worker-sandbox.https.html": [
"8b7d72e0ef96d2fb309d7e8bddf0f37b5fcdee36",
[
null,
{}
]
],
"shared-worker-sandbox.html": [
"86b39b9ad4739ff0c07ffc2720142b68d7dd64e8",
[
null,
{}
]
],
"window-reuse-sandboxed.html": [ "window-reuse-sandboxed.html": [
"a7a080daf72ee8ae97f5adf433f17c947892d4ce", "a7a080daf72ee8ae97f5adf433f17c947892d4ce",
[ [
@ -407285,7 +407469,7 @@
] ]
], ],
"event-dispatch.tentative.html": [ "event-dispatch.tentative.html": [
"9e4946cf336ad0d78b3b87426d121a39ffb98037", "5ed01cdd2588d1a5a5226a9abb46f60dd441ed13",
[ [
null, null,
{} {}
@ -458326,7 +458510,7 @@
"reporting": { "reporting": {
"access-reporting": { "access-reporting": {
"openee-accessed_openee-coop-ro.https.html": [ "openee-accessed_openee-coop-ro.https.html": [
"1472afa63c1d61d54cb68b3f3d192778fd7381de", "24943b03f39106596bef73612d7b286f02531ec2",
[ [
null, null,
{ {
@ -458335,7 +458519,7 @@
] ]
], ],
"openee-accessed_openee-coop.https.html": [ "openee-accessed_openee-coop.https.html": [
"64dd07b5701a640244330435f88172a1c2c60984", "07ba21a0c742bab4606dd27a6d0fd5b492a7b449",
[ [
null, null,
{ {
@ -458362,7 +458546,7 @@
] ]
], ],
"opener-accessed_openee-coop-ro.https.html": [ "opener-accessed_openee-coop-ro.https.html": [
"3e5180af6260a691e08ee649c87e68a6579e3c59", "b8f9f22e7cbf4ca80fd152258b539b106b77dbb1",
[ [
null, null,
{ {
@ -458371,7 +458555,7 @@
] ]
], ],
"opener-accessed_openee-coop.https.html": [ "opener-accessed_openee-coop.https.html": [
"e39dcfcec6a8bd9a5011944873d76d6689f80b34", "ffce48de49627c02807316309b541f748e943d6c",
[ [
null, null,
{ {
@ -458397,8 +458581,26 @@
} }
] ]
], ],
"property-indexed-getter.https.html": [
"d2309e5fbd14c4dc987f8fde6ec02c41ca774819",
[
null,
{
"timeout": "long"
}
]
],
"property-named-getter.https.html": [
"2ab9093fcb58f1346854c443de41e3f8f2a00243",
[
null,
{
"timeout": "long"
}
]
],
"property.https.html": [ "property.https.html": [
"625fc94117768b792a27c148f609ccccef61507b", "6a22cb2076cbfcf042926ef7249d98139651de53",
[ [
null, null,
{ {
@ -477918,6 +478120,15 @@
{} {}
] ]
], ],
"input-timestamp.html": [
"02dde1ad5d740fb62c82994c05518cec4017dbaa",
[
null,
{
"testdriver": true
}
]
],
"local-shift-without-viewport-shift.html": [ "local-shift-without-viewport-shift.html": [
"37729f1c13c298b5a2d95c46b7a4f199d8943022", "37729f1c13c298b5a2d95c46b7a4f199d8943022",
[ [
@ -487097,6 +487308,13 @@
"testdriver": true "testdriver": true
} }
] ]
],
"secure-payment-confirmation.https.html": [
"860876e2e9bb750a266b33472753444532fe9a6a",
[
null,
{}
]
] ]
}, },
"performance-timeline": { "performance-timeline": {
@ -487925,7 +488143,7 @@
"pointerevents": { "pointerevents": {
"compat": { "compat": {
"pointerevent_compat-mouse-events-when-removing-nodes.html": [ "pointerevent_compat-mouse-events-when-removing-nodes.html": [
"88d03b7965efc241893b8fbfc4c8f2e2b0967bf5", "6d13b0de354a140e472d42bd8b81b408fad52495",
[ [
null, null,
{ {

View file

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

View file

@ -8,6 +8,9 @@
[[data-expected-height\] 3] [[data-expected-height\] 3]
expected: FAIL expected: FAIL
[[data-expected-height\] 4] [[data-expected-height\] 1]
expected: FAIL
[[data-expected-height\] 2]
expected: FAIL expected: FAIL

View file

@ -77,3 +77,6 @@
[After -> Active] [After -> Active]
expected: FAIL expected: FAIL
[Cancel the transition after it finishes]
expected: FAIL

View file

@ -1,4 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -1,2 +0,0 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

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

View file

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

View file

@ -11,6 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff] [X-Content-Type-Options%3A%20'NosniFF']
expected: FAIL expected: FAIL

View file

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

View file

@ -172,6 +172,3 @@
[XHTML img usemap="http://example.org/#garbage-before-hash-id"] [XHTML img usemap="http://example.org/#garbage-before-hash-id"]
expected: FAIL expected: FAIL
[HTML (standards) IMG usemap="no-hash-name"]
expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html] [iframe_sandbox_popups_escaping-2.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: FAIL expected: FAIL

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
type: testharness type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: FAIL

View file

@ -1,4 +0,0 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

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

View file

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

View file

@ -37,7 +37,7 @@ jobs:
displayName: 'affected tests: Safari Technology Preview' displayName: 'affected tests: Safari Technology Preview'
condition: eq(variables['Build.Reason'], 'PullRequest') condition: eq(variables['Build.Reason'], 'PullRequest')
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
@ -54,7 +54,7 @@ jobs:
displayName: 'affected tests without changes: Safari Technology Preview' displayName: 'affected tests without changes: Safari Technology Preview'
condition: eq(variables['Build.Reason'], 'PullRequest') condition: eq(variables['Build.Reason'], 'PullRequest')
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
@ -91,7 +91,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_infrastructure'] condition: dependencies.decision.outputs['test_jobs.wptrunner_infrastructure']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
@ -120,7 +120,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.tools_unittest'] condition: dependencies.decision.outputs['test_jobs.tools_unittest']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
variables: variables:
HYPOTHESIS_PROFILE: ci HYPOTHESIS_PROFILE: ci
steps: steps:
@ -138,7 +138,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.tools_unittest'] condition: dependencies.decision.outputs['test_jobs.tools_unittest']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
@ -154,7 +154,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.tools_unittest'] condition: dependencies.decision.outputs['test_jobs.tools_unittest']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
@ -170,7 +170,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest'] condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
variables: variables:
HYPOTHESIS_PROFILE: ci HYPOTHESIS_PROFILE: ci
steps: steps:
@ -188,7 +188,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest'] condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
@ -204,7 +204,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest'] condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
@ -220,7 +220,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wpt_integration'] condition: dependencies.decision.outputs['test_jobs.wpt_integration']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
variables: variables:
HYPOTHESIS_PROFILE: ci HYPOTHESIS_PROFILE: ci
steps: steps:
@ -242,7 +242,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wpt_integration'] condition: dependencies.decision.outputs['test_jobs.wpt_integration']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
# full checkout required # full checkout required
- task: UsePythonVersion@0 - task: UsePythonVersion@0
@ -262,7 +262,7 @@ jobs:
dependsOn: decision dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wpt_integration'] condition: dependencies.decision.outputs['test_jobs.wpt_integration']
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
# full checkout required # full checkout required
- task: UsePythonVersion@0 - task: UsePythonVersion@0
@ -595,7 +595,7 @@ jobs:
parallel: 5 # chosen to make runtime ~2h parallel: 5 # chosen to make runtime ~2h
timeoutInMinutes: 180 timeoutInMinutes: 180
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
@ -633,7 +633,7 @@ jobs:
parallel: 5 # chosen to make runtime ~2h parallel: 5 # chosen to make runtime ~2h
timeoutInMinutes: 180 timeoutInMinutes: 180
pool: pool:
vmImage: 'macOS-10.14' vmImage: 'macOS-10.15'
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:

View file

@ -5,6 +5,7 @@
height: 100px; height: 100px;
transform: translateY(100px); transform: translateY(100px);
background-color: green; background-color: green;
will-change: transform;
} }
</style> </style>

View file

@ -1,11 +0,0 @@
<!DOCTYPE html>
<title>Reference for Canceling a playing WorkletAnimation should remove the effect</title>
<style>
#box {
width: 100px;
height: 100px;
background-color: blue;
}
</style>
<div id="box"></div>

View file

@ -2,7 +2,7 @@
<title>Canceling a playing WorkletAnimation should remove the effect</title> <title>Canceling a playing WorkletAnimation should remove the effect</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<meta name="assert" content="Canceling a playing animation should remove the effect"> <meta name="assert" content="Canceling a playing animation should remove the effect">
<link rel="match" href="worklet-animation-cancel-ref.html"> <link rel="match" href="references/not-translated-box-ref.html">
<script src="/web-animations/testcommon.js"></script> <script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script> <script src="/common/reftest-wait.js"></script>
@ -12,7 +12,7 @@
#box { #box {
width: 100px; width: 100px;
height: 100px; height: 100px;
background-color: blue; background-color: green;
} }
</style> </style>

View file

@ -1,12 +0,0 @@
<!DOCTYPE html>
<title>Reference for Animation Worklet should have access to effect timing from within the worklet thread</title>
<style>
#box {
width: 100px;
height: 100px;
background-color: green;
transform: translateY(100px);
}
</style>
<div id="box"></div>

View file

@ -2,7 +2,7 @@
<title>Animation Worklet should have access to effect timing from within the worklet thread</title> <title>Animation Worklet should have access to effect timing from within the worklet thread</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<meta name="assert" content="Animation Worklet should have access to effect timing from within the worklet thread"> <meta name="assert" content="Animation Worklet should have access to effect timing from within the worklet thread">
<link rel="match" href="worklet-animation-get-timing-on-worklet-thread-ref.html"> <link rel="match" href="references/translated-box-ref.html">
<script src="/web-animations/testcommon.js"></script> <script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script> <script src="/common/reftest-wait.js"></script>

View file

@ -2,7 +2,7 @@
<title>Animation Worklet local time set after duration</title> <title>Animation Worklet local time set after duration</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<meta name="assert" content="If an effect doesn't have fill-mode specified, setting its local time beyond its duration makes the animation inactive."> <meta name="assert" content="If an effect doesn't have fill-mode specified, setting its local time beyond its duration makes the animation inactive.">
<link rel="match" href="worklet-animation-local-time-after-duration-ref.html"> <link rel="match" href="references/not-translated-box-ref.html">
<script src="/web-animations/testcommon.js"></script> <script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script> <script src="/common/reftest-wait.js"></script>

View file

@ -1,13 +0,0 @@
<!DOCTYPE html>
<title>Reference for Animation Worklet local time set before start</title>
<style>
#box {
width: 100px;
height: 100px;
background-color: green;
will-change: transform;
transform: translateY(200px);
}
</style>
<div id="box"></div>

View file

@ -2,7 +2,7 @@
<title>Animation Worklet local time set before start</title> <title>Animation Worklet local time set before start</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<meta name="assert" content="The local time should be trimmed by the duration, e.g. this is equivalent to effect.localTime = 0"> <meta name="assert" content="The local time should be trimmed by the duration, e.g. this is equivalent to effect.localTime = 0">
<link rel="match" href="worklet-animation-local-time-before-start-ref.html"> <link rel="match" href="references/translated-box-ref.html">
<script src="/web-animations/testcommon.js"></script> <script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script> <script src="/common/reftest-wait.js"></script>
@ -23,7 +23,7 @@
const box = document.getElementById('box'); const box = document.getElementById('box');
const effect = new KeyframeEffect(box, const effect = new KeyframeEffect(box,
[ [
{ transform: 'translateY(200px)' }, { transform: 'translateY(100px)' },
{ transform: 'translateY(0px)' } { transform: 'translateY(0px)' }
], { ], {
duration: 1000, duration: 1000,

View file

@ -0,0 +1,163 @@
<!DOCTYPE html>
<title>Setting localTime to null means effect does not apply</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/web-animations/testcommon.js"></script>
<script src="common.js"></script>
<style>
.box {
width: 100px;
height: 100px;
background-color: green;
display: inline-block;
}
</style>
<div>
<div class="box" id="target1"></div>
<div class="box" id="target2"></div>
<div class="box" id="target3"></div>
<div class="box" id="target4"></div>
</div>
<script>
promise_test(async t => {
await runInAnimationWorklet(`
registerAnimator("blank_animator", class {
animate(currentTime, effect) {
// Unset effect.localTime is equivalent to 'null'
}
});
`);
const target = document.getElementById('target1');
const animation = new WorkletAnimation('blank_animator',
new KeyframeEffect(target,
[
{ transform: 'translateY(100px)' },
{ transform: 'translateY(200px)' }
], {
duration: 1000,
}
)
);
animation.play();
await waitForAsyncAnimationFrames(1);
assert_equals(getComputedStyle(target).transform, "matrix(1, 0, 0, 1, 0, 0)");
}, "A worklet which never sets localTime has no effect.");
promise_test(async t => {
await runInAnimationWorklet(`
registerAnimator("null_animator", class {
animate(currentTime, effect) {
effect.localTime = null;
}
});
`);
const target = document.getElementById('target2');
const animation = new WorkletAnimation('null_animator',
new KeyframeEffect(target,
[
{ transform: 'translateY(100px)' },
{ transform: 'translateY(200px)' }
], {
duration: 1000,
}
)
);
animation.play();
await waitForAsyncAnimationFrames(1);
assert_equals(getComputedStyle(target).transform, "matrix(1, 0, 0, 1, 0, 0)");
}, "A worklet which sets localTime to null has no effect.");
promise_test(async t => {
await runInAnimationWorklet(`
registerAnimator("drop_animator", class {
animate(currentTime, effect) {
if (currentTime < 500)
effect.localTime = 500;
else if (currentTime < 1000)
effect.localTime = 0;
else
effect.localTime = null;
}
});
`);
const target = document.getElementById('target3');
const animation = new WorkletAnimation('drop_animator',
new KeyframeEffect(target,
[
{ transform: 'translateY(100px)' },
{ transform: 'translateY(200px)' }
], {
duration: 1000,
}
)
);
animation.play();
await waitForAsyncAnimationFrames(5);
assert_equals(getComputedStyle(target).transform, "matrix(1, 0, 0, 1, 0, 150)",
"The animation has an effect at first");
await waitForAnimationFrameWithCondition(() => animation.currentTime > 500);
await waitForAsyncAnimationFrames(1);
assert_equals(getComputedStyle(target).transform, "matrix(1, 0, 0, 1, 0, 100)",
"The effect correctly changes");
await waitForAnimationFrameWithCondition(() => animation.currentTime > 1000);
await waitForAsyncAnimationFrames(1);
assert_equals(getComputedStyle(target).transform, "matrix(1, 0, 0, 1, 0, 0)",
"The effect stops on nulling of localTime");
}, "A worklet which changes localTime to from a number to null has no effect on transform.");
promise_test(async t => {
await runInAnimationWorklet(`
registerAnimator("drop2_animator", class {
animate(currentTime, effect) {
if (currentTime < 500)
effect.localTime = 500;
else if (currentTime < 1000)
effect.localTime = 0;
else
effect.localTime = null;
}
});
`);
const target = document.getElementById('target4');
const animation = new WorkletAnimation('drop2_animator',
new KeyframeEffect(target,
[
{ backgroundColor: 'red' },
{ backgroundColor: 'blue' }
], {
duration: 1000,
}
)
);
animation.play();
await waitForAsyncAnimationFrames(5);
assert_equals(getComputedStyle(target).backgroundColor, "rgb(128, 0, 128)",
"The animation has an effect at first");
await waitForAnimationFrameWithCondition(() => animation.currentTime > 500);
await waitForAsyncAnimationFrames(1);
assert_equals(getComputedStyle(target).backgroundColor, "rgb(255, 0, 0)",
"The effect correctly changes");
await waitForAnimationFrameWithCondition(() => animation.currentTime > 1000);
await waitForAsyncAnimationFrames(1);
assert_equals(getComputedStyle(target).backgroundColor, "rgb(0, 128, 0)",
"The effect stops on nulling of localTime");
}, "A worklet which changes localTime to from a number to null has no effect on backgroundColor.");
</script>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<title>Setting localTime to null means effect does not apply (reftest)</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<style>
.box {
width: 100px;
height: 100px;
background-color: green;
display: inline-block;
}
#control {
background-color: red;
transform: translateY(100px);
}
</style>
<div>
<div class="box" id="target1"></div>
<div class="box" id="target2"></div>
<div class="box" id="target3"></div>
<div class="box" id="target4"></div>
<div class="box" id="control"></div>
</div>
</script>

View file

@ -0,0 +1,110 @@
<!DOCTYPE html>
<html class="reftest-wait">
<title>Setting localTime to null means effect does not apply (reftest)</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<link rel="match" href="worklet-animation-local-time-null-2-ref.html">
<meta name="timeout" content="long">
<script src="/common/reftest-wait.js"></script>
<script src="/web-animations/testcommon.js"></script>
<script src="common.js"></script>
<style>
.box {
width: 100px;
height: 100px;
background-color: green;
display: inline-block;
}
</style>
<div>
<div class="box" id="target1"></div>
<div class="box" id="target2"></div>
<div class="box" id="target3"></div>
<div class="box" id="target4"></div>
<div class="box" id="control"></div>
</div>
<script>
runInAnimationWorklet(`
registerAnimator("blank_animator", class {
animate(currentTime, effect) {
// Unset effect.localTime is equivalent to 'null'
}
});
registerAnimator("null_animator", class {
animate(currentTime, effect) {
effect.localTime = null;
}
});
registerAnimator("drop_animator", class {
animate(currentTime, effect) {
if (currentTime < 500)
effect.localTime = 500;
else if (currentTime < 1000)
effect.localTime = 0;
else
effect.localTime = null;
}
});
registerAnimator("add_animator", class {
animate(currentTime, effect) {
if (currentTime < 1000)
effect.localTime = 500;
else
effect.localTime = 0;
}
});
`).then(() => {
const start_animation = (animator, targetId, keyframes) => {
const animation = new WorkletAnimation(animator,
new KeyframeEffect(
document.getElementById(targetId),
keyframes,
{duration: 1000}
)
);
animation.play();
return animation;
};
start_animation('blank_animator','target1', [
{ transform: 'translateY(100px)' },
{ transform: 'translateY(200px)' }
]);
start_animation('null_animator','target2', [
{ transform: 'translateY(100px)' },
{ transform: 'translateY(200px)' }
]);
start_animation('drop_animator','target3', [
{ transform: 'translateY(100px)' },
{ transform: 'translateY(200px)' }
]);
start_animation('drop_animator','target4', [
{ backgroundColor: 'red' },
{ backgroundColor: 'blue' }
]);
// check that animation worklets are running to stop accidental pass
const control_anim = start_animation('add_animator','control', [
{ backgroundColor: 'red', transform: 'translateY(100px)' },
{ backgroundColor: 'blue', transform: 'translateY(200px)' }
]);
waitForAnimationFrameWithCondition(() => control_anim.currentTime > 1000)
// long timeout due to laggy compositor thread on debug build.
.then(() => waitForAsyncAnimationFrames(120))
.then(takeScreenshot);
});
</script>

View file

@ -1,12 +0,0 @@
<!DOCTYPE html>
<title>Reference for Worklet Animation sets keyframes</title>
<style>
#box {
width: 100px;
height: 100px;
transform: translateX(100px);
background-color: green;
}
</style>
<div id="box"></div>

View file

@ -2,7 +2,7 @@
<title>Worklet Animation sets keyframes</title> <title>Worklet Animation sets keyframes</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<meta name="assert" content="Can update the keyframes for an effect while the animation is running"> <meta name="assert" content="Can update the keyframes for an effect while the animation is running">
<link rel="match" href="worklet-animation-set-keyframes-ref.html"> <link rel="match" href="references/translated-box-ref.html">
<script src="/web-animations/testcommon.js"></script> <script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script> <script src="/common/reftest-wait.js"></script>
@ -21,13 +21,13 @@
<script> <script>
registerConstantLocalTimeAnimator(500).then(()=>{ registerConstantLocalTimeAnimator(500).then(()=>{
const keyframes_before = [ const keyframes_before = [
{ transform: 'translateY(0)' },
{ transform: 'translateY(200px)' }
];
const keyframes_after = [
{ transform: 'translateX(0)' }, { transform: 'translateX(0)' },
{ transform: 'translateX(200px)' } { transform: 'translateX(200px)' }
]; ];
const keyframes_after = [
{ transform: 'translateY(0)' },
{ transform: 'translateY(200px)' }
];
const box = document.getElementById('box'); const box = document.getElementById('box');
const effect = new KeyframeEffect(box, keyframes_before, {duration: 1000}); const effect = new KeyframeEffect(box, keyframes_before, {duration: 1000});

View file

@ -1,12 +0,0 @@
<!DOCTYPE html>
<title>Reference for Worklet Animation sets timing</title>
<style>
#box {
width: 100px;
height: 100px;
transform: translateX(50px);
background-color: green;
}
</style>
<div id="box"></div>

View file

@ -2,7 +2,7 @@
<title>Worklet Animation sets timing</title> <title>Worklet Animation sets timing</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<meta name="assert" content="Can update the timing for an effect while the animation is running"> <meta name="assert" content="Can update the timing for an effect while the animation is running">
<link rel="match" href="worklet-animation-set-timing-ref.html"> <link rel="match" href="references/translated-box-ref.html">
<script src="/web-animations/testcommon.js"></script> <script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script> <script src="/common/reftest-wait.js"></script>
@ -21,8 +21,8 @@
<script> <script>
registerConstantLocalTimeAnimator(500).then(()=>{ registerConstantLocalTimeAnimator(500).then(()=>{
const keyframes = [ const keyframes = [
{ transform: 'translateX(0)' }, { transform: 'translateY(0)' },
{ transform: 'translateX(200px)' } { transform: 'translateY(400px)' }
]; ];
const options_before = { const options_before = {
duration: 1000 duration: 1000

View file

@ -0,0 +1,67 @@
<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<body>
<script>
let frame = null;
let worker = null;
const scope = 'support/empty.html';
const script = 'support/sandboxed-service-worker.js';
// Currently, sandbox directives for workers are not specified
// https://github.com/w3c/webappsec-csp/issues/279
// and thus this test asserts that the origin of ServiceWorker is not sandboxed.
// Global setup: this must be the first promise_test.
promise_test(async (t) => {
const registration =
await service_worker_unregister_and_register(t, script, scope);
worker = registration.installing;
await wait_for_state(t, worker, 'activated');
frame = await with_iframe(scope);
// Global cleanup: the final promise_test.
promise_test(() => {
if (frame)
frame.remove();
return registration.unregister();
}, 'global cleanup');
}, 'global setup');
promise_test(async (t) => {
const r = await frame.contentWindow.fetch('/get-origin', {mode: 'cors'});
const j = await r.json();
assert_equals(j.origin, location.origin, 'Origin should not be sandboxed');
}, 'Origin of service worker');
promise_test(async (t) => {
const r = await frame.contentWindow.fetch('/get-origin',
{mode: 'same-origin'});
const j = await r.json();
assert_equals(j.origin, location.origin, 'Origin should not be opaque');
}, 'Response generated by service worker can be fetched as same-origin');
// Because the origin of service worker should be `location.origin`,
// fetches from service worker to `location.origin` should be successful.
for (const mode of ['same-origin', 'cors']) {
for (const hasACAOrigin of [true, false]) {
promise_test(async (t) => {
const final_url = new URL('/fetch/api/resources/', location);
final_url.pathname += hasACAOrigin ? 'cors-top.txt' : 'top.txt';
final_url.searchParams.set('hash', Math.random());
const url = new URL('/fetch', location);
url.searchParams.set('url', final_url);
url.searchParams.set('hash', Math.random());
const r = await frame.contentWindow.fetch(url, {mode});
const text = await r.text();
assert_equals(text, 'top');
}, 'Origin used in fetch on service worker (mode: ' +
mode +
(hasACAOrigin ? ', with ACAOrigin' : '') +
')');
}
}
</script>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
// Currently, sandbox directives for workers are not specified
// https://github.com/w3c/webappsec-csp/issues/279
// and thus this test asserts that the origin of SharedWorker is not sandboxed.
async_test(t => {
const worker = new SharedWorker("support/sandboxed-shared-worker.js?" + Math.random());
worker.onerror = t.unreached_func("SharedWorker construction failed");
worker.port.onmessage = t.step_func_done(e => {
assert_equals(e.data, location.origin, "Origin should not be sandboxed");
});
}, "sandbox directive for SharedWorker");
</script>
</body>

View file

@ -0,0 +1,14 @@
self.addEventListener('fetch', function(event) {
const url = new URL(event.request.url);
if (url.pathname.indexOf('get-origin') != -1) {
event.respondWith(new Promise(function(resolve) {
resolve(new Response(JSON.stringify({
origin: self.origin
})));
}));
}
else if (url.pathname.indexOf('fetch') != -1) {
event.respondWith(fetch(url.searchParams.get('url'),
{mode: event.request.mode}));
}
});

View file

@ -0,0 +1 @@
Content-Security-Policy: sandbox allow-scripts

View file

@ -0,0 +1,3 @@
self.onconnect = e => {
e.ports[0].postMessage(self.origin);
};

View file

@ -0,0 +1 @@
Content-Security-Policy: sandbox allow-scripts

View file

@ -3,7 +3,7 @@
<link rel="author" title="Tab Atkins-Bittner" href="https://xanthir.com/contact/"> <link rel="author" title="Tab Atkins-Bittner" href="https://xanthir.com/contact/">
<link rel="help" href="https://drafts.csswg.org/css-grid/#min-size-auto"> <link rel="help" href="https://drafts.csswg.org/css-grid/#min-size-auto">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> <link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="An item spanning >1 track, at least one of which is flexible, must have a zero automatic minimum size (and thus, not grow to accommodate its children)." <meta name="assert" content="An item spanning >1 track, at least one of which is flexible, must have a zero automatic minimum size (and thus, not grow to accommodate its children).">
<style> <style>
.grid { display: grid; grid-template-columns: repeat(12, 1fr); height: 100px; width: 100px; } .grid { display: grid; grid-template-columns: repeat(12, 1fr); height: 100px; width: 100px; }
@ -13,6 +13,7 @@
.big-child { width: 500px; height: 100px; } .big-child { width: 500px; height: 100px; }
</style> </style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="grid"> <div class="grid">
<div class="under"></div> <div class="under"></div>

View file

@ -11,15 +11,15 @@
<div style="position: relative; height: 100px; position: relative;"> <div style="position: relative; height: 100px; position: relative;">
<div style="position: absolute; aspect-ratio: 1/1; max-height: 100%; background: green; color: green;"> <div style="position: absolute; aspect-ratio: 1/1; max-height: 100%; background: green; color: green;">
<!-- max-size 200px, min-size: 20px --> <!-- max-size 200px, min-size: 20px -->
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
</div> </div>
</div> </div>

View file

@ -11,15 +11,15 @@
<div style="height: 100px;"> <div style="height: 100px;">
<div style="aspect-ratio: 1/1; max-height: 100%; background: green;"> <div style="aspect-ratio: 1/1; max-height: 100%; background: green;">
<!-- max-size 200px, min-size: 20px --> <!-- max-size 200px, min-size: 20px -->
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom;"></div> <div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
</div> </div>
</div> </div>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: abspos div inline size with max-height</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5257">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="A max-height constraint should be transferred through the aspect-ratio to apply to the inline size">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<!-- Due to the transferred max-height, this should not be 200px wide -->
<div style="max-height: 100px; aspect-ratio: 1/1; width: max-content; background: green;">
<div style="width: 200px"></div>
</div>

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: abspos div inline size with max-height</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5257">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="A max-height constraint should be transferred through the aspect-ratio to apply to the inline size">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<!-- min-content width is 300px, clamped by max-width to 100px. The transferred min-width
would be 200px but should not override the explicit max-width, so the resulting div
should be 100px wide. This should then size the green div to a width of 100px. -->
<div style="min-height: 200px; max-width: 100px; aspect-ratio: 1/1;">
<div style="width: 300px;"></div>
<div style="height: 100px; background: green;"></div>
</div>

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: abspos div inline size with max-height</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5257">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="A max-height constraint should be transferred through the aspect-ratio to apply to the inline size">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<!-- min-content width is 50px, clamped by min-width to 100px. The transferred max-width
would be 40px but should not override the explicit min-width, so the resulting div
should be 100px wide. This should then size the green div to a width of 100px. -->
<div style="max-height: 40px; min-width: 100px; aspect-ratio: 1/1;">
<div style="width: 50px;"></div>
<div style="height: 100px; background: green;"></div>
</div>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: abspos div inline size with max-height</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5257">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="A min-height constraint should be transferred through the aspect-ratio to apply to the inline size">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="target" style="height: 0px; width: min-content; background: green;">
<div style="min-height: 100%; aspect-ratio: 1/1;">
<div style="width: 50px">
</div>
</div>
<script>
document.body.offsetTop;
document.getElementById("target").style.height = "100px";
</script>

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: abspos div inline size with max-height</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5257">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="A min-height constraint should be transferred through the aspect-ratio to apply to the inline size">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<!-- Even with a specified but indefinite height, we want to apply the
transferred min/max height to the inline size. -->
<div style="aspect-ratio: 1/1; height: 100%; min-height: 100px; background: green; float: left;"></div>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: abspos div inline size with max-height</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5257">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="A max-height constraint should be transferred through the aspect-ratio to apply to the inline size">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="height: 100px;">
<div style="aspect-ratio: 1/1; max-height: 100%; padding-bottom: 20px; background: green; box-sizing: border-box;">
<!-- max-size 200px, min-size: 20px -->
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
</div>
</div>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: abspos div inline size with max-height</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5257">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="A max-height constraint should be transferred through the aspect-ratio to apply to the inline size">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="height: 100px;">
<div style="aspect-ratio: 100/80; max-height: 80px; padding-bottom: 20px; background: green; box-sizing: content-box;">
<!-- max-size 200px, min-size: 20px -->
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
<div style="width: 20px; height: 10px; vertical-align: bottom; display: inline-block;"></div>
</div>
</div>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: abspos div inline size with max-height</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5257">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="A min-height constraint should be transferred through the aspect-ratio to apply to the inline size">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="target" style="height: 50px; width: min-content; background: green;">
<div style="height: 100%;">
<div style="min-height: 100%; aspect-ratio: 1/1;"></div>
</div>
</div>
<script>
document.body.offsetTop;
document.getElementById("target").style.height = "100px";
</script>

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: img</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<!-- Replaced elements should always use content-box sizing for the purpose of
aspect ratio. -->
<img src="support/20x50-green.png" style="aspect-ratio: 20/50; background: green; padding-right: 80px; padding-bottom: 50px; box-sizing: border-box;">

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: img</title>
<link rel="author" title="Google LLC" href="https://www.google.com/">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<!-- Replaced elements should always use content-box sizing for the purpose of
aspect ratio. -->
<img src="support/20x50-green.png" style="aspect-ratio: 20/50; background: green; padding-right: 80px; padding-bottom: 50px; box-sizing: border-box; max-height: 100px;">

View file

@ -414,4 +414,22 @@ promise_test(async t => {
await waitForAnimationFrames(2); await waitForAnimationFrames(2);
}, 'Cancel the transition after clearing the target effect'); }, 'Cancel the transition after clearing the target effect');
promise_test(async t => {
const { transition, watcher, div } = setupTransition(t, 'margin-left 100s');
// Seek to After phase.
transition.finish();
const events = await watcher.wait_for(
['transitionrun', 'transitionstart', 'transitionend'],
{
record: 'all',
}
);
transition.cancel();
// Then wait a couple of frames and check that no event was dispatched
await waitForAnimationFrames(2);
}, 'Cancel the transition after it finishes');
</script> </script>

View file

@ -515,7 +515,7 @@ properties of the test harness (enumerated in the following section).
Both setup functions recognize the following properties: Both setup functions recognize the following properties:
`explicit_done` - Wait for an explicit call to done() before declaring all `explicit_done` - Wait for an explicit call to done() before declaring all
tests complete (see below; implicitly true for single page tests) tests complete (see below; always true for single page tests)
`output_document` - The document to which results should be logged. By default `output_document` - The document to which results should be logged. By default
this is the current document but could be an ancestor document in some cases this is the current document but could be an ancestor document in some cases

View file

@ -18,21 +18,21 @@ const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { promise_test(async t => {
const report_token = token(); const report_token = token();
const executor_token = token(); const openee_token = token();
const callback_token = token(); const opener_token = token(); // The current test window.
const reportTo = reportToHeaders(report_token); const reportTo = reportToHeaders(report_token);
const openee_url = cross_origin + executor_path + const openee_url = cross_origin + executor_path +
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header + reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${executor_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee = window.open(openee_url);
t.add_cleanup(() => send(executor_token, "window.close()")) t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Make sure the new document to be loaded. // 1. Make sure the new document to be loaded.
send(executor_token, ` send(openee_token, `
send("${callback_token}", "Ready"); send("${opener_token}", "Ready");
`); `);
let reply = await receive(callback_token); let reply = await receive(opener_token);
assert_equals(reply, "Ready"); assert_equals(reply, "Ready");
// 2. Try to access the openee. A report is sent, because of COOP-RO+COEP. // 2. Try to access the openee. A report is sent, because of COOP-RO+COEP.

View file

@ -18,21 +18,21 @@ const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { promise_test(async t => {
const report_token = token(); const report_token = token();
const executor_token = token(); const openee_token = token();
const callback_token = token(); const opener_token = token(); // The current test window.
const reportTo = reportToHeaders(report_token); const reportTo = reportToHeaders(report_token);
const openee_url = cross_origin + executor_path + const openee_url = cross_origin + executor_path +
reportTo.header + reportTo.coopSameOriginHeader + coep_header + reportTo.header + reportTo.coopSameOriginHeader + coep_header +
`&uuid=${executor_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee = window.open(openee_url);
t.add_cleanup(() => send(executor_token, "window.close()")) t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Make sure the new document to be loaded. // 1. Make sure the new document to be loaded.
send(executor_token, ` send(openee_token, `
send("${callback_token}", "Ready"); send("${opener_token}", "Ready");
`); `);
let reply = await receive(callback_token); let reply = await receive(opener_token);
assert_equals(reply, "Ready"); assert_equals(reply, "Ready");
// 2. Try to access the openee. This shouldn't work because of COOP+COEP. // 2. Try to access the openee. This shouldn't work because of COOP+COEP.

View file

@ -18,18 +18,17 @@ const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { promise_test(async t => {
const report_token = token(); const report_token = token();
const executor_token = token(); const openee_token = token();
const callback_token = token();
const reportTo = reportToHeaders(report_token); const reportTo = reportToHeaders(report_token);
const openee_url = cross_origin + executor_path + const openee_url = cross_origin + executor_path +
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header + reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${executor_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee = window.open(openee_url);
t.add_cleanup(() => send(executor_token, "window.close()")) t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Try to access the opener. A report is sent, because of COOP-RO+COEP. // 1. Try to access the opener. A report is sent, because of COOP-RO+COEP.
send(executor_token, ` send(openee_token, `
tryAccess(opener); tryAccess(opener);
`); `);

View file

@ -18,18 +18,17 @@ const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
promise_test(async t => { promise_test(async t => {
const report_token = token(); const report_token = token();
const executor_token = token(); const openee_token = token();
const callback_token = token();
const reportTo = reportToHeaders(report_token); const reportTo = reportToHeaders(report_token);
const openee_url = cross_origin + executor_path + const openee_url = cross_origin + executor_path +
reportTo.header + reportTo.coopSameOriginHeader + coep_header + reportTo.header + reportTo.coopSameOriginHeader + coep_header +
`&uuid=${executor_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee = window.open(openee_url);
t.add_cleanup(() => send(executor_token, "window.close()")); t.add_cleanup(() => send(openee_token, "window.close()"));
// 1. Try to access the opener. A report is sent, because of COOP+COEP. // 1. Try to access the opener. A report is sent, because of COOP+COEP.
send(executor_token, ` send(openee_token, `
tryAccess(opener); tryAccess(opener);
`); `);

View file

@ -0,0 +1,66 @@
<title> Check reports are sent for the indexed getter</title>
<meta name=timeout content=long>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/common/get-host-info.sub.js></script>
<script src="/common/utils.js"></script>
<script src="../resources/dispatcher.js"></script>
<script>
const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe=";
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
let origin = [
["cross-origin" , get_host_info().HTTPS_REMOTE_ORIGIN ] ,
["same-site" , get_host_info().HTTPS_ORIGIN ] ,
];
let testCase = [
//[operation , expectReport ] ,
[w => w[0] , true ], // Existing iframe.
[w => w[1] , false ], // Out of bounds (positive).
[w => w[-1] , false ], // Out of bounds (negative).
];
origin.forEach(([origin_name, origin]) => {
testCase.forEach(([op, expectReport]) => {
promise_test(async t => {
const opener_token = token();
const openee_token = token();
const openee_url = origin+ executor_path + `&uuid=${openee_token}`;
const openee = window.open(openee_url);
t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Create an iframe in the openee.
send(openee_token, `
let iframe = document.createElement("iframe");
document.body.appendChild(iframe);
send("${opener_token}", "openee loaded");
`);
let reply = await receive(opener_token);
assert_equals(reply, "openee loaded");
// 2. Try to access the openee.
let observer = new ReportingObserver(()=>{});
observer.observe();
try {op(openee)} catch(e) {}
let reports = observer.takeRecords();
observer.disconnect();
// 3. Check the received reports.
if (expectReport) {
assert_equals(reports.length, 1);
assert_equals(reports[0].type, "coop-access-violation");
assert_equals(reports[0].body.property, "indexed");
} else {
assert_equals(reports.length, 0);
}
}, `${origin_name} > ${op}`);
});
});
</script>

View file

@ -0,0 +1 @@
Cross-Origin-Opener-Policy-Report-Only: same-origin; report-to="none"

View file

@ -0,0 +1,72 @@
<title> Check reports are sent for the indexed getter</title>
<meta name=timeout content=long>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/common/get-host-info.sub.js></script>
<script src="/common/utils.js"></script>
<script src="../resources/dispatcher.js"></script>
<script>
const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe=";
let crossOrigin = ["cross-origin" , get_host_info().HTTPS_REMOTE_ORIGIN ];
let sameOrigin = ["same-site" , get_host_info().HTTPS_ORIGIN ];
let testCase = [
//[ operation , origin , expectReport ],
[ w => w["iframeName"] , sameOrigin , true ],
[ w => w["iframeName"] , crossOrigin , true ],
[ w => w["divID"] , sameOrigin , true ],
[ w => w["divID"] , crossOrigin , false ],
[ w => w["existingGlobal"] , sameOrigin , false ],
[ w => w["existingGlobal"] , crossOrigin , false ],
[ w => w["missingGlobal"] , sameOrigin , false ],
[ w => w["missingGlobal"] , crossOrigin , false ],
];
testCase.forEach(([op, [origin_name, origin], expectReport]) => {
promise_test(async t => {
const opener_token = token();
const openee_token = token();
const openee_url = origin + executor_path + `&uuid=${openee_token}`;
const openee = window.open(openee_url);
t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Make sure the new document to be loaded. Populate the document.
send(openee_token, `
let iframe = document.createElement("iframe");
iframe.name = "iframeName";
document.body.appendChild(iframe);
let div = document.createElement("div");
div.id = "divID";
document.body.appendChild(div);
window.existingGlobal = "test";
send("${opener_token}", "Ready");
`);
let reply = await receive(opener_token);
assert_equals(reply, "Ready");
// 2. Try to access the openee.
let observer = new ReportingObserver(()=>{});
observer.observe();
try {op(openee)} catch(e) {}
let reports = observer.takeRecords();
observer.disconnect();
// 3. Check the received reports.
if (expectReport) {
assert_equals(reports.length, 1);
assert_equals(reports[0].type, "coop-access-violation");
assert_equals(reports[0].body.property, "named");
} else {
assert_equals(reports.length, 0);
}
}, `${origin_name} > ${op}`);
});
</script>

View file

@ -0,0 +1 @@
Cross-Origin-Opener-Policy-Report-Only: same-origin; report-to="none"

View file

@ -22,11 +22,9 @@ let property= [
["closed" , w => w.closed ] , ["closed" , w => w.closed ] ,
["focus" , w => w.focus() ] , ["focus" , w => w.focus() ] ,
["frames" , w => w.frames ] , ["frames" , w => w.frames ] ,
["indexed" , w => w[0] ] ,
["length" , w => w.length ] , ["length" , w => w.length ] ,
["location" , w => w.location ] , ["location" , w => w.location ] ,
["location" , w => w.location = "#" ] , ["location" , w => w.location = "#" ] ,
["named" , w => w["test"] ] ,
["opener" , w => w.opener ] , ["opener" , w => w.opener ] ,
["opener" , w => w.opener = "" ] , ["opener" , w => w.opener = "" ] ,
["postMessage" , w => w.postMessage("") ] , ["postMessage" , w => w.postMessage("") ] ,
@ -40,19 +38,19 @@ origin.forEach(([origin_name, origin]) => {
property.forEach(([property, op]) => { property.forEach(([property, op]) => {
promise_test(async t => { promise_test(async t => {
const report_token = token(); const report_token = token();
const executor_token = token(); const openee_token = token();
const callback_token = token(); const opener_token = token(); // The current test window.
const reportTo = reportToHeaders(report_token); const reportTo = reportToHeaders(report_token);
const openee_url = origin+ executor_path + const openee_url = origin + executor_path + reportTo.header +
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header + reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${executor_token}`; `&uuid=${openee_token}`;
const openee = window.open(openee_url); const openee = window.open(openee_url);
t.add_cleanup(() => send(executor_token, "window.close()")) t.add_cleanup(() => send(openee_token, "window.close()"))
// 1. Make sure the new document to be loaded. // 1. Make sure the new document to be loaded.
send(executor_token, `send("${callback_token}", "Ready");`); send(openee_token, `send("${opener_token}", "Ready");`);
let reply = await receive(callback_token); let reply = await receive(opener_token);
assert_equals(reply, "Ready"); assert_equals(reply, "Ready");
// 2. Try to access the openee. This shouldn't work because of COOP+COEP. // 2. Try to access the openee. This shouldn't work because of COOP+COEP.

View file

@ -20,7 +20,8 @@ interface PerformanceEntry {
}; };
callback PerformanceObserverCallback = void (PerformanceObserverEntryList entries, callback PerformanceObserverCallback = void (PerformanceObserverEntryList entries,
PerformanceObserver observer); PerformanceObserver observer,
optional boolean hasDroppedEntry = false);
[Exposed=(Window,Worker)] [Exposed=(Window,Worker)]
interface PerformanceObserver { interface PerformanceObserver {
constructor(PerformanceObserverCallback callback); constructor(PerformanceObserverCallback callback);

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML>
<meta charset=utf-8>
<title>Layout Instability: observe timestamp after user input</title>
<body>
<style>
#myDiv {
position: relative;
width: 300px;
height: 100px;
}
/* Disable the button's focus ring, which otherwise expands its visual rect by
* 1px on all sides, triggering a layout shift event.
*/
#button {
outline: none;
}
</style>
<div id='myDiv'></div>
<button id='button'>Generate a 'click' event</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/util.js></script>
<script src=/event-timing/resources/event-timing-test-utils.js></script>
<script>
let timeAfterClick;
promise_test(async t => {
assert_implements(window.LayoutShift, 'Layout Instability is not supported.');
// Wait for the initial render to complete.
await waitForAnimationFrames(2);
const startTime = performance.now();
return new Promise(resolve => {
const observer = new PerformanceObserver(
t.step_func(entryList => {
const endTime = performance.now();
assert_equals(entryList.getEntries().length, 1);
const entry = entryList.getEntries()[0];
assert_equals(entry.entryType, "layout-shift");
assert_equals(entry.name, "");
assert_greater_than_equal(entry.startTime, startTime);
assert_less_than_equal(entry.startTime, endTime);
assert_equals(entry.duration, 0.0);
// The layout shift value should be:
// 300 * (100 + 60) * (60 / maxDimension) / viewport size.
assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60));
// We should see that there was a click input entry.
assert_equals(entry.hadRecentInput, false);
assert_greater_than_equal(timeAfterClick, entry.lastInputTime);
resolve();
})
);
observer.observe({ entryTypes: ['layout-shift'] });
// User input event
clickAndBlockMain('button').then(() => {
// 500ms delay
step_timeout(function() {
timeAfterClick = performance.now();
// Modify the position of the div.
document.getElementById('myDiv').style = "top: 60px";
}, 500);
});
});
}, 'Layout shift right after user input is observable via PerformanceObserver.');
</script>
</body>

View file

@ -0,0 +1,177 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for 'secure-payment-confirmation' payment method</title>
<link rel="help" href="https://github.com/rsolomakhin/secure-payment-confirmation">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
const details = {total:
{label: 'Total', amount: {value: '0.01', currency: 'USD'}}};
test(() => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
// All valid parameters.
action: 'authenticate',
instrumentId: 'x',
networkData: Uint8Array.from('x', c => c.charCodeAt(0)),
timeout: 60000,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
}, 'Valid payment method data does not throw exceptions.');
test(() => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
// Omitted action field.
instrumentId: 'x',
networkData: Uint8Array.from('x', c => c.charCodeAt(0)),
timeout: 60000,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
}, 'The action field is optional.');
test(() => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
action: 'authenticate',
instrumentId: 'x',
networkData: Uint8Array.from('x', c => c.charCodeAt(0)),
// Omitted timeout field.
fallbackUrl: 'https://fallback.example/url'
},
}], details);
}, 'The timeout field is optional.');
test(() => {
assert_throws_js(TypeError, () => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
// Invalid action parameter.
action: 'authorize',
instrumentId: 'x',
networkData: Uint8Array.from('x', c => c.charCodeAt(0)),
timeout: 60000,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
});
}, 'Invalid action parameter throws an exception.');
test(() => {
assert_throws_js(TypeError, () => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
action: 'authenticate',
// Omitted instrumentId field.
networkData: Uint8Array.from('x', c => c.charCodeAt(0)),
timeout: 60000,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
});
}, 'The instrumentId field is required.');
test(() => {
assert_throws_js(TypeError, () => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
action: 'authenticate',
instrumentId: 'x',
// Omitted instrumentId field.
timeout: 60000,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
});
}, 'The networkData field is required.');
test(() => {
assert_throws_js(TypeError, () => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
action: 'authenticate',
instrumentId: 'x',
networkData: Uint8Array.from('x', c => c.charCodeAt(0)),
timeout: 60000,
// Omitted fallbackUrl field.
},
}], details);
});
}, 'The fallbackUrl field is required.');
test(() => {
assert_throws_js(RangeError, () => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
action: 'authenticate',
// Empty instrumentId field.
instrumentId: '',
networkData: Uint8Array.from('x', c => c.charCodeAt(0)),
timeout: 60000,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
});
}, 'Empty instrumentId field throws exception.');
test(() => {
assert_throws_js(TypeError, () => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
action: 'authenticate',
instrumentId: 'x',
// Null networkData field.
networkData: null,
timeout: 60000,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
});
}, 'Null networkData field throws exception.');
test(() => {
assert_throws_js(TypeError, () => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
action: 'authenticate',
instrumentId: 'x',
// Empty networkData field.
networkData: [],
timeout: 60000,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
});
}, 'Empty networkData field throws exception.');
test(() => {
assert_throws_js(RangeError, () => {
new PaymentRequest([{
supportedMethods: 'secure-payment-confirmation',
data: {
action: 'authenticate',
instrumentId: 'x',
networkData: Uint8Array.from('x', c => c.charCodeAt(0)),
// Timeout longer than 1 hour.
timeout: 1000 * 60 * 60 + 1,
fallbackUrl: 'https://fallback.example/url'
},
}], details);
});
}, 'Timeout longer than 1 hour throws exception.');
</script>

View file

@ -5,12 +5,17 @@
<script src="/resources/testdriver-vendor.js"></script> <script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script> <script src="/resources/testdriver-actions.js"></script>
<script type="text/javascript" src="../pointerevent_support.js"></script> <script type="text/javascript" src="../pointerevent_support.js"></script>
<!-- There are significant differences in how browsers fire pointer events and
compat mouse events when elements are removed from the dom.
There is a discussion about the order of pointer events and mouse compat events
for this scenario in the pointer event working group (See link below)-->
<link rel="help" href="https://github.com/w3c/pointerevents/issues/285">
<style> <style>
div.box { div.box {
margin: 5px; margin: 5px;
padding: 20px; padding: 20px;
float: left; float: left;
background-color:green;
} }
#grey { #grey {
width: 50px; width: 50px;
@ -22,12 +27,14 @@ div.box {
<div id="grey" class="box" style="background-color:grey"> <div id="grey" class="box" style="background-color:grey">
</div> </div>
<button id="done">Done</button>
<div id="console"></div> <div id="console"></div>
<script> <script>
var receivedEvents = []; var receivedEvents = [];
var done_clicked = false;
var eventList = ["mousedown", "mouseup", "mousemove", var eventList = ["mousedown", "mouseup", "mousemove",
"pointerdown", "pointerup", "pointermove"]; "pointerdown", "pointerup", "pointermove"];
@ -62,6 +69,9 @@ function createGreenBoxAndAddListeners() {
}); });
} }
var done_button = document.getElementById("done");
done_button.addEventListener("click",()=>done_clicked=true);
function performActions() { function performActions() {
var rect = document.getElementById("green").getBoundingClientRect(); var rect = document.getElementById("green").getBoundingClientRect();
var x1 = Math.ceil(rect.left + 5); var x1 = Math.ceil(rect.left + 5);
@ -73,13 +83,13 @@ function performActions() {
.pointerDown() .pointerDown()
.pointerUp() .pointerUp()
.send() .send()
.then( () => resolveWhen( () => receivedEvents.length == 6 ) ); .then(()=> test_driver.click(done_button));
} }
function testScenario(targetEvent, expectedEvents, description) { function testScenario(targetEvent, expectedEvents, description) {
promise_test(async () => { promise_test(async () => {
removeNodeEvent = targetEvent;
receivedEvents = []; receivedEvents = [];
removeNodeEvent = targetEvent;
createGreenBoxAndAddListeners(); createGreenBoxAndAddListeners();
await performActions(); await performActions();

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AllowRemoteAutomation</key>
<true/>
</dict>
</plist>

View file

@ -9,7 +9,10 @@ steps:
- ${{ if eq(parameters.channel, 'preview') }}: - ${{ if eq(parameters.channel, 'preview') }}:
- script: | - script: |
HOMEBREW_NO_AUTO_UPDATE=1 brew cask install tools/ci/azure/safari-technology-preview.rb HOMEBREW_NO_AUTO_UPDATE=1 brew cask install tools/ci/azure/safari-technology-preview.rb
sudo "/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver" --enable # Workaround for `sudo safardriver --enable` not working on Catalina:
# https://github.com/web-platform-tests/wpt/issues/21751
mkdir -p ~/Library/WebDriver/
cp tools/ci/azure/com.apple.SafariTechnologyPreview.plist ~/Library/WebDriver/
defaults write com.apple.SafariTechnologyPreview WebKitJavaScriptCanOpenWindowsAutomatically 1 defaults write com.apple.SafariTechnologyPreview WebKitJavaScriptCanOpenWindowsAutomatically 1
defaults write com.apple.SafariTechnologyPreview ExperimentalServerTimingEnabled 1 defaults write com.apple.SafariTechnologyPreview ExperimentalServerTimingEnabled 1
displayName: 'Install Safari Technology Preview' displayName: 'Install Safari Technology Preview'

View file

@ -6986,5 +6986,51 @@
"pathname": "/", "pathname": "/",
"search": "", "search": "",
"hash": "#link" "hash": "#link"
},
"UTF-8 percent-encode of C0 control percent-encode set and supersets",
{
"input": "non-special:cannot-be-a-base-url-\u0000\u0001\u001F\u001E\u007E\u007F\u0080",
"base": "about:blank",
"hash": "",
"host": "",
"hostname": "",
"href": "non-special:cannot-be-a-base-url-%00%01%1F%1E~%7F%C2%80",
"origin": "null",
"password": "",
"pathname": "cannot-be-a-base-url-%00%01%1F%1E~%7F%C2%80",
"port": "",
"protocol": "non-special:",
"search": "",
"username": ""
},
{
"input": "https://www.example.com/path{\u007Fpath.html?query'\u007F=query#fragment<\u007Ffragment",
"base": "about:blank",
"hash": "#fragment%3C%7Ffragment",
"host": "www.example.com",
"hostname": "www.example.com",
"href": "https://www.example.com/path%7B%7Fpath.html?query%27%7F=query#fragment%3C%7Ffragment",
"origin": "https://www.example.com",
"password": "",
"pathname": "/path%7B%7Fpath.html",
"port": "",
"protocol": "https:",
"search": "?query%27%7F=query",
"username": ""
},
{
"input": "https://user:pass[\u007F@foo/bar",
"base": "http://example.org",
"hash": "",
"host": "foo",
"hostname": "foo",
"href": "https://user:pass%5B%7F@foo/bar",
"origin": "https://foo",
"password": "pass%5B%7F",
"pathname": "/bar",
"port": "",
"protocol": "https:",
"search": "",
"username": "user"
} }
] ]