mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Update web-platform-tests to revision 9c5c4c87d363854a1b039b6abe51627a5f0b02b9
This commit is contained in:
parent
6d0cc4a1b7
commit
35d789443e
92 changed files with 1446 additions and 287 deletions
|
@ -1,5 +0,0 @@
|
||||||
[url-charset.window.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[Blob charset should override any auto-detected charset.]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-004.html]
|
|
||||||
[Miss float below something else]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -77,3 +77,6 @@
|
||||||
[After -> Active]
|
[After -> Active]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Cancel the transition after it finishes]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[CaretPosition-001.html]
|
|
||||||
[Element at (400, 100)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[elementFromPoint-001.html]
|
||||||
|
[CSSOM View - 5 - extensions to the Document interface]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[matchMedia-display-none-iframe.html]
|
|
||||||
expected: ERROR
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_1.html]
|
|
||||||
[Multiple history traversals from the same task]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[module-static-import-delayed.html]
|
|
||||||
[document.write in an imported module]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[realtimeanalyser-fft-scaling.html]
|
[realtimeanalyser-fft-scaling.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[017.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, about:blank]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[url-charset.window.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[Blob charset should override any auto-detected charset.]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -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,
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-004.html]
|
|
||||||
[Miss float below something else]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -77,3 +77,6 @@
|
||||||
[After -> Active]
|
[After -> Active]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Cancel the transition after it finishes]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[CaretPosition-001.html]
|
|
||||||
[Element at (400, 100)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[elementFromPoint-001.html]
|
||||||
|
[CSSOM View - 5 - extensions to the Document interface]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[matchMedia-display-none-iframe.html]
|
|
||||||
expected: ERROR
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_1.html]
|
|
||||||
[Multiple history traversals from the same task]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[module-static-import-delayed.html]
|
|
||||||
[document.write in an imported module]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[realtimeanalyser-fft-scaling.html]
|
[realtimeanalyser-fft-scaling.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[017.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, about:blank]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
|
@ -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,
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
|
@ -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});
|
||||||
|
|
|
@ -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>
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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}));
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Security-Policy: sandbox allow-scripts
|
|
@ -0,0 +1,3 @@
|
||||||
|
self.onconnect = e => {
|
||||||
|
e.ports[0].postMessage(self.origin);
|
||||||
|
};
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Security-Policy: sandbox allow-scripts
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;">
|
||||||
|
|
|
@ -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;">
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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);
|
||||||
`);
|
`);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
`);
|
`);
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
@ -0,0 +1 @@
|
||||||
|
Cross-Origin-Opener-Policy-Report-Only: same-origin; report-to="none"
|
|
@ -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>
|
|
@ -0,0 +1 @@
|
||||||
|
Cross-Origin-Opener-Policy-Report-Only: same-origin; report-to="none"
|
|
@ -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.
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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();
|
||||||
|
|
|
@ -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>
|
|
@ -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'
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue