Update web-platform-tests to revision 59b44d7f1299fd1da23d4bf1f0ffdee3f2b7206c

This commit is contained in:
WPT Sync Bot 2020-06-11 08:20:23 +00:00
parent 2560e78f11
commit 71a09c2c01
90 changed files with 988 additions and 480 deletions

View file

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

View file

@ -1,4 +0,0 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

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

View file

@ -17,3 +17,6 @@
[test the top of layer] [test the top of layer]
expected: FAIL expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

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

View file

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

View file

@ -11,6 +11,3 @@
[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'NosniFF']
expected: FAIL

View file

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

View file

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

View file

@ -1,2 +0,0 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -0,0 +1,16 @@
[window-reuse-in-nested-browsing-contexts.tentative.html]
[synchronously navigate iframe with no initial src.]
expected: FAIL
[after the first iframe load event, navigate iframe with no initial src.]
expected: FAIL
[synchronously navigate iframe with initial src == "about:blank".]
expected: FAIL
[iframe with initial src == same-origin resource.]
expected: FAIL
[synchronously navigate iframe with initial src == "".]
expected: FAIL

View file

@ -1,8 +1,7 @@
[embedded-opener-remove-frame.html] [embedded-opener-remove-frame.html]
expected: TIMEOUT
[opener of discarded nested browsing context] [opener of discarded nested browsing context]
expected: FAIL expected: FAIL
[opener of discarded auxiliary browsing context] [opener of discarded auxiliary browsing context]
expected: TIMEOUT expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html] [iframe_sandbox_popups_escaping-2.html]
expected: TIMEOUT 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: TIMEOUT expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
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: FAIL expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
expected: CRASH 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: NOTRUN

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
expected: TIMEOUT expected: CRASH
[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: NOTRUN

View file

@ -0,0 +1,2 @@
[defaultValue-clobbering.html]
expected: TIMEOUT

View file

@ -3,3 +3,6 @@
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

@ -1,7 +1,8 @@
[shared-worker-in-data-url-context.window.html] [shared-worker-in-data-url-context.window.html]
expected: TIMEOUT
[Create a shared worker in a data url frame] [Create a shared worker in a data url frame]
expected: FAIL expected: FAIL
[Create a data url shared worker in a data url frame] [Create a data url shared worker in a data url frame]
expected: FAIL expected: TIMEOUT

View file

@ -640,7 +640,7 @@
"the-template-element": { "the-template-element": {
"template-element": { "template-element": {
"template-construction-in-inactive-document-crash.html": [ "template-construction-in-inactive-document-crash.html": [
"607b8b0185fe60d7e437dc464c0eda4a927c750c", "496a47b2c58b5bde93f41d923e7117f646187442",
[ [
null, null,
{} {}
@ -122764,19 +122764,6 @@
{} {}
] ]
], ],
"css-border-radius-002.html": [
"50adb24133acfcefc993307316f4c4bb96ec24d2",
[
null,
[
[
"/css/css-backgrounds/reference/css-border-radius-ref-002.html",
"=="
]
],
{}
]
],
"css-box-shadow-001.html": [ "css-box-shadow-001.html": [
"e6506e00f0e483ab68a7cd0695983c995058ee5a", "e6506e00f0e483ab68a7cd0695983c995058ee5a",
[ [
@ -128698,6 +128685,19 @@
], ],
{} {}
] ]
],
"quotes-034.html": [
"fae1b2474c0a8ad9593086344e900a7540f8f43a",
[
null,
[
[
"/css/css-content/reference/quotes-034-ref.html",
"=="
]
],
{}
]
] ]
}, },
"css-counter-styles": { "css-counter-styles": {
@ -160914,6 +160914,19 @@
], ],
{} {}
] ]
],
"textpath-selection-011.html": [
"7bc09408bfc3cc21e7c4a3ed1d9f2e2f0d9f7a5a",
[
null,
[
[
"/css/css-pseudo/textpath-selection-011-ref.html",
"=="
]
],
{}
]
] ]
}, },
"css-ruby": { "css-ruby": {
@ -164325,6 +164338,19 @@
{} {}
] ]
], ],
"abspos-007.tentative.html": [
"4b170a51872c78e07a04e12679a9356255ba416a",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"auto-margins-001.tentative.html": [ "auto-margins-001.tentative.html": [
"9e89ab6ca7f5220ea030aa537bcb3b64f156043d", "9e89ab6ca7f5220ea030aa537bcb3b64f156043d",
[ [
@ -164702,6 +164728,58 @@
{} {}
] ]
], ],
"intrinsic-size-001.tentative.html": [
"5b2c6049bd935c928f29c50bf4ad7afae41c4576",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"intrinsic-size-002.tentative.html": [
"62e9a149cb829908fe036470d89e9a80384edf4d",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"intrinsic-size-003.tentative.html": [
"da5dfd00835c5f180c76fa943a67b314b9b179be",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"intrinsic-size-004.tentative.html": [
"06fe0e58706059e48dc0c6f966aa9e2d4c59dd96",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"percentage-resolution-001.tentative.html": [ "percentage-resolution-001.tentative.html": [
"d606bfc65e340f95fbbc355b764a7de5e7aeb6a1", "d606bfc65e340f95fbbc355b764a7de5e7aeb6a1",
[ [
@ -234561,6 +234639,19 @@
}, },
"forms": { "forms": {
"the-input-element": { "the-input-element": {
"defaultValue-clobbering.html": [
"c65f6ff88c7424de4c44670a85ec9d4204aabb99",
[
null,
[
[
"/html/semantics/forms/the-input-element/defaultValue-clobbering-ref.html",
"=="
]
],
{}
]
],
"image01.html": [ "image01.html": [
"e9028dceec736da67b8c8814cb103cfecbc518a0", "e9028dceec736da67b8c8814cb103cfecbc518a0",
[ [
@ -247187,7 +247278,7 @@
], ],
"resources": { "resources": {
"accept-ch-and-redir.py": [ "accept-ch-and-redir.py": [
"706983c9a06dcf52588394ed851e36503bc647a0", "82e557da2a3ceaf4df47ed681ea09150ef4a6937",
[] []
], ],
"accept-ch-blank.html": [ "accept-ch-blank.html": [
@ -247223,11 +247314,11 @@
[] []
], ],
"do-not-expect-received.py": [ "do-not-expect-received.py": [
"ba647ede53bceaf88e4ab40b51b87243633e9bc7", "3150dc585c81d90c4e014b81d9685de9bb02c692",
[] []
], ],
"echo-client-hints-received.py": [ "echo-client-hints-received.py": [
"be712293be3c749d98d328dd2fec7334da4ad9b2", "df8a46d3cdf77c245f25ccb640ebed1878b80cc6",
[] []
], ],
"expect-client-hints-headers.html": [ "expect-client-hints-headers.html": [
@ -247235,7 +247326,7 @@
[] []
], ],
"expect-received.py": [ "expect-received.py": [
"bec3bffc2822a602e1f7a7b0c7b9b6e9c145ab95", "c0b9596f2d1dc8a44e4e4097054faf555162ff6a",
[] []
], ],
"feature-policy-with-cross-origin-subresource.html": [ "feature-policy-with-cross-origin-subresource.html": [
@ -247298,15 +247389,15 @@
[] []
], ],
"echo-client-hints-received.py": [ "echo-client-hints-received.py": [
"d978754a20509a5b488d06af73efc9806d67537e", "ca623d40f88305bb2bb5101612465bb25db6a021",
[] []
], ],
"echo-ua-client-hints-received.py": [ "echo-ua-client-hints-received.py": [
"57cf50457d352dec9bcda9be8847c9e66c9e25cc", "eea62bf94039c291fac538b6a04ed2528301206c",
[] []
], ],
"expect-client-hints-headers-iframe.py": [ "expect-client-hints-headers-iframe.py": [
"25c2b2f765ddb32c11d2c6a7645e4078b23ffce8", "baf517b2344c51e5bdfd84ae56af1fc99094f105",
[] []
], ],
"expect-client-hints-headers.html": [ "expect-client-hints-headers.html": [
@ -247334,11 +247425,11 @@
[] []
], ],
"sec-ch-ua.py": [ "sec-ch-ua.py": [
"f77eee8c4e9b13a24b10eba34147d3b485e923bc", "01bcb9682a1ae9d176b9afe7c2d3376f1bdf8c13",
[] []
], ],
"stale-echo-client-hints.py": [ "stale-echo-client-hints.py": [
"0d0d4a44a9851f0dfb794810f3387517ea780c12", "664f7c4c15d08a8ae608c05b0051b8aba6a1a5d1",
[] []
] ]
}, },
@ -287928,10 +288019,6 @@
"0a0404a9b5c29cd8d84615485064bd8dda4fdd51", "0a0404a9b5c29cd8d84615485064bd8dda4fdd51",
[] []
], ],
"background-size-ref.html": [
"eabf1f8d6503537462853721180284e4ca4688ca",
[]
],
"background_clip_padding-box.html": [ "background_clip_padding-box.html": [
"fe42b5325785950f31e2eb2d6cca9a15410af061", "fe42b5325785950f31e2eb2d6cca9a15410af061",
[] []
@ -287996,10 +288083,6 @@
"b89f2853263b3771fa12bafb04a91a243a15226f", "b89f2853263b3771fa12bafb04a91a243a15226f",
[] []
], ],
"css-border-radius-ref-002.html": [
"f7c7722995b2695468ead9363ca3ce1e902c50af",
[]
],
"css-box-shadow-ref-001.html": [ "css-box-shadow-ref-001.html": [
"837a87b9c888af605870bf43531b62c73cd59d12", "837a87b9c888af605870bf43531b62c73cd59d12",
[] []
@ -288395,18 +288478,6 @@
"white_color.png": [ "white_color.png": [
"4276253883c564a0f3ce4e609d5252b158ed5ef4", "4276253883c564a0f3ce4e609d5252b158ed5ef4",
[] []
],
"y.png": [
"4e402fe2ee4e67055b545f1d70347c70675d041f",
[]
],
"yy.png": [
"79cc0f9fa14df680521e1678170c6a14acefec03",
[]
],
"yyy.png": [
"3dc1b0b50c1752a0ca6bd56bfeb3867d036718fb",
[]
] ]
}, },
"table-cell-background-local-ref.html": [ "table-cell-background-local-ref.html": [
@ -289329,6 +289400,10 @@
"quotes-033-ref.html": [ "quotes-033-ref.html": [
"99d1e75ddb30879c5a430077a25c5a3683738a6f", "99d1e75ddb30879c5a430077a25c5a3683738a6f",
[] []
],
"quotes-034-ref.html": [
"8c049e9623d5bcc950219206b855de30d0255c48",
[]
] ]
}, },
"resources": { "resources": {
@ -319078,7 +319153,7 @@
], ],
"resources": { "resources": {
"TAOImage.py": [ "TAOImage.py": [
"6969166c67ce367b5c35626d5695d543f60bb20f", "0e1c4814892d9a8d200d10c9ae2a3e89e3ba2c27",
[] []
], ],
"circle-tao.svg": [ "circle-tao.svg": [
@ -319114,15 +319189,15 @@
[] []
], ],
"multiple-redirects.py": [ "multiple-redirects.py": [
"820b8833998581a3b966dc4fd05b857084a1e86b", "3efc634b9933412927ae74f5b83e67da6ba4d424",
[] []
], ],
"progressive-image.py": [ "progressive-image.py": [
"86ec8343658ee028a43a898308026082c93ef09e", "64cc44ee0f2259f54c2c1ab303c57577890acf62",
[] []
], ],
"slow-image.py": [ "slow-image.py": [
"683160414a1120b09b4163c63fce82bb327d9f5f", "10172fd35a85439413e4b1ef665b612d57f6e92a",
[] []
], ],
"square100.png": [ "square100.png": [
@ -323813,6 +323888,10 @@
"c2446c6fe958a5a0507ffcf729fa027a8d202832", "c2446c6fe958a5a0507ffcf729fa027a8d202832",
[] []
], ],
"same-origin-iframe.html": [
"763d9e466bb6e34c450148a183b2ef3feb9d6846",
[]
],
"sizing-target.html": [ "sizing-target.html": [
"7cd5348a8585698579548eb957006b84ddddcefe", "7cd5348a8585698579548eb957006b84ddddcefe",
[] []
@ -332043,6 +332122,10 @@
} }
}, },
"the-input-element": { "the-input-element": {
"defaultValue-clobbering-ref.html": [
"5a396d3c52a9d80f76d2b35555410c787c083f4a",
[]
],
"hidden-charset-case-sensitive-child.html": [ "hidden-charset-case-sensitive-child.html": [
"92c9981a1123454af8462cea7840a099721109a0", "92c9981a1123454af8462cea7840a099721109a0",
[] []
@ -335053,7 +335136,7 @@
[] []
], ],
"appmanifest.idl": [ "appmanifest.idl": [
"2adc370012422f51514db9a2ee8768f532019736", "cf30b6127682f7f7f6a380cd1abafc1b2ad2c770",
[] []
], ],
"audio-output.idl": [ "audio-output.idl": [
@ -335101,7 +335184,7 @@
[] []
], ],
"cookie-store.idl": [ "cookie-store.idl": [
"4407249ca67ca79896d6fd7ed20b44220e24e61f", "bc2899bb4fc7eed67d2b76e7b83e3ec7c9c0dd60",
[] []
], ],
"cors-rfc1918.idl": [ "cors-rfc1918.idl": [
@ -335561,7 +335644,7 @@
[] []
], ],
"wai-aria.idl": [ "wai-aria.idl": [
"cf8168a69317315120ef4bcddafa44ee330cd470", "d5d8f32521a3b22647eece7a7662861b6da9e060",
[] []
], ],
"wake-lock.idl": [ "wake-lock.idl": [
@ -352248,7 +352331,7 @@
[] []
], ],
"executormarionette.py": [ "executormarionette.py": [
"494944e23346fe45871a408b8cea44ec3bfa922a", "006c93fc06d0f7339a3bc1d1ef35f3e9e8fd748c",
[] []
], ],
"executoropera.py": [ "executoropera.py": [
@ -355261,7 +355344,7 @@
[] []
], ],
"RTCStats-helper.js": [ "RTCStats-helper.js": [
"6fa6f8e768f8ecc08a824983c14515439eab1e18", "81abe2456e94bb84e4d56c9781dc302a502490e5",
[] []
], ],
"coverage": { "coverage": {
@ -379165,7 +379248,7 @@
] ]
], ],
"report-clips-sample.https.html": [ "report-clips-sample.https.html": [
"6434486655325d654b1ee8f31f18d24d3ef5ee69", "696a27ba7569116527c4a9c85ce4ac53d4fbc6e7",
[ [
null, null,
{} {}
@ -408843,6 +408926,15 @@
} }
] ]
], ],
"exception-thrown-diameter-less-than-or-equal-to-0.tentative.html": [
"8a283e718c6227fd6e3843c77e23ccac1d66d0f8",
[
null,
{
"testdriver": true
}
]
],
"exception-thrown-untrusted-event.tentative.window.js": [ "exception-thrown-untrusted-event.tentative.window.js": [
"de4a2b43571f62d27cc67e9dccc66cd63c192b83", "de4a2b43571f62d27cc67e9dccc66cd63c192b83",
[ [
@ -433204,6 +433296,13 @@
null, null,
{} {}
] ]
],
"window-reuse-in-nested-browsing-contexts.tentative.html": [
"0cd2fcec3b48be2e9d226245a3a94e8f5c355cf3",
[
null,
{}
]
] ]
}, },
"the-windowproxy-exotic-object": { "the-windowproxy-exotic-object": {
@ -495521,6 +495620,13 @@
{} {}
] ]
], ],
"move-template-before-closing-tag.html": [
"88b75e754eb45f35b3fa329efbb334e5997c46d3",
[
null,
{}
]
],
"script-access.tentative.html": [ "script-access.tentative.html": [
"b87bb7ab308b3bec1ff81cf4f45da582d1db778a", "b87bb7ab308b3bec1ff81cf4f45da582d1db778a",
[ [
@ -550715,15 +550821,6 @@
] ]
] ]
}, },
"css-pseudo": {
"textpath-selection-011.html": [
"2e42c6be8fbcfc756c578986517efc0b1739d1f3",
[
null,
{}
]
]
},
"css-round-display": { "css-round-display": {
"polar-anchor-center-001.html": [ "polar-anchor-center-001.html": [
"18972a6fa51005b2c946f44d4e4e31716d8c01b5", "18972a6fa51005b2c946f44d4e4e31716d8c01b5",

View file

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

View file

@ -1,4 +0,0 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -1,3 +0,0 @@
[css-border-radius-002.html]
type: reftest
expected: FAIL

View file

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

View file

@ -21,3 +21,6 @@
[test the top of layer] [test the top of layer]
expected: FAIL expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

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

View file

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

View file

@ -11,6 +11,3 @@
[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'NosniFF']
expected: FAIL

View file

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

View file

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

View file

@ -1,2 +0,0 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -0,0 +1,16 @@
[window-reuse-in-nested-browsing-contexts.tentative.html]
[synchronously navigate iframe with no initial src.]
expected: FAIL
[after the first iframe load event, navigate iframe with no initial src.]
expected: FAIL
[synchronously navigate iframe with initial src == "about:blank".]
expected: FAIL
[iframe with initial src == same-origin resource.]
expected: FAIL
[synchronously navigate iframe with initial src == "".]
expected: FAIL

View file

@ -1,5 +1,4 @@
[embedded-opener-remove-frame.html] [embedded-opener-remove-frame.html]
expected: TIMEOUT
[opener and "removed" embedded documents] [opener and "removed" embedded documents]
expected: FAIL expected: FAIL
@ -7,5 +6,5 @@
expected: FAIL expected: FAIL
[opener of discarded auxiliary browsing context] [opener of discarded auxiliary browsing context]
expected: TIMEOUT expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html] [iframe_sandbox_popups_escaping-2.html]
expected: TIMEOUT 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: TIMEOUT expected: TIMEOUT

View file

@ -1,5 +1,6 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
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: FAIL expected: TIMEOUT

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
type: testharness type: testharness
expected: CRASH 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: NOTRUN

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
type: testharness type: testharness
expected: TIMEOUT expected: CRASH
[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: NOTRUN

View file

@ -0,0 +1,2 @@
[defaultValue-clobbering.html]
expected: TIMEOUT

View file

@ -4,3 +4,6 @@
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

@ -1,7 +1,8 @@
[shared-worker-in-data-url-context.window.html] [shared-worker-in-data-url-context.window.html]
expected: TIMEOUT
[Create a shared worker in a data url frame] [Create a shared worker in a data url frame]
expected: FAIL expected: FAIL
[Create a data url shared worker in a data url frame] [Create a data url shared worker in a data url frame]
expected: FAIL expected: TIMEOUT

View file

@ -1,5 +1,5 @@
def main(request, response): def main(request, response):
url = '' url = b''
if 'url' in request.GET: if b'url' in request.GET:
url = request.GET['url'] url = request.GET[b'url']
return 301, [('Location', url),('Accept-CH', 'device-memory, DPR')], '' return 301, [(b'Location', url),(b'Accept-CH', b'device-memory, DPR')], u''

View file

@ -5,15 +5,15 @@ def main(request, response):
verify_subresource_state() in accept-ch-test.js verify_subresource_state() in accept-ch-test.js
""" """
if "device-memory" in request.headers: if b"device-memory" in request.headers:
result = "FAIL" result = u"FAIL"
else: else:
result = "PASS" result = u"PASS"
content = ''' content = u'''
<script> <script>
window.opener.postMessage("%s" , "*"); window.opener.postMessage("%s" , "*");
</script> </script>
''' % (result) ''' % (result)
headers = [("Content-Type", "text/html"), ("Access-Control-Allow-Origin", "*")] headers = [(b"Content-Type", b"text/html"), (b"Access-Control-Allow-Origin", b"*")]
return 200, headers, content return 200, headers, content

View file

@ -4,9 +4,9 @@ def main(request, response):
request headers were received. request headers were received.
""" """
response.headers.append("Access-Control-Allow-Origin", "*") response.headers.append(b"Access-Control-Allow-Origin", b"*")
response.headers.append("Access-Control-Allow-Headers", "*") response.headers.append(b"Access-Control-Allow-Headers", b"*")
response.headers.append("Access-Control-Expose-Headers", "*") response.headers.append(b"Access-Control-Expose-Headers", b"*")
if "device-memory" in request.headers: if b"device-memory" in request.headers:
response.headers.set("device-memory-received", request.headers.get("device-memory")) response.headers.set(b"device-memory-received", request.headers.get(b"device-memory"))

View file

@ -5,16 +5,16 @@ def main(request, response):
verify_navigation_state() in accept-ch-test.js verify_navigation_state() in accept-ch-test.js
""" """
if "device-memory" in request.headers and "sec-ch-ua" in request.headers and "sec-ch-ua-mobile" in request.headers: if b"device-memory" in request.headers and b"sec-ch-ua" in request.headers and b"sec-ch-ua-mobile" in request.headers:
result = "PASS" result = u"PASS"
else: else:
result = "FAIL" result = u"FAIL"
content = ''' content = u'''
<script> <script>
let messagee = window.opener || window.parent; let messagee = window.opener || window.parent;
messagee.postMessage("%s" , "*"); messagee.postMessage("%s" , "*");
</script> </script>
''' % (result) ''' % (result)
headers = [("Content-Type", "text/html"), ("Access-Control-Allow-Origin", "*")] headers = [(b"Content-Type", b"text/html"), (b"Access-Control-Allow-Origin", b"*")]
return 200, headers, content return 200, headers, content

View file

@ -4,23 +4,23 @@ def main(request, response):
request headers were received. request headers were received.
""" """
response.headers.append("Access-Control-Allow-Origin", "*") response.headers.append(b"Access-Control-Allow-Origin", b"*")
response.headers.append("Access-Control-Allow-Headers", "*") response.headers.append(b"Access-Control-Allow-Headers", b"*")
response.headers.append("Access-Control-Expose-Headers", "*") response.headers.append(b"Access-Control-Expose-Headers", b"*")
if "device-memory" in request.headers: if b"device-memory" in request.headers:
response.headers.set("device-memory-received", request.headers.get("device-memory")) response.headers.set(b"device-memory-received", request.headers.get(b"device-memory"))
if "dpr" in request.headers: if b"dpr" in request.headers:
response.headers.set("dpr-received", request.headers.get("dpr")) response.headers.set(b"dpr-received", request.headers.get(b"dpr"))
if "viewport-width" in request.headers: if b"viewport-width" in request.headers:
response.headers.set("viewport-width-received", request.headers.get("viewport-width")) response.headers.set(b"viewport-width-received", request.headers.get(b"viewport-width"))
if "rtt" in request.headers: if b"rtt" in request.headers:
response.headers.set("rtt-received", request.headers.get("rtt")) response.headers.set(b"rtt-received", request.headers.get(b"rtt"))
if "downlink" in request.headers: if b"downlink" in request.headers:
response.headers.set("downlink-received", request.headers.get("downlink")) response.headers.set(b"downlink-received", request.headers.get(b"downlink"))
if "ect" in request.headers: if b"ect" in request.headers:
response.headers.set("ect-received", request.headers.get("ect")) response.headers.set(b"ect-received", request.headers.get(b"ect"))
if "Sec-CH-Lang" in request.headers: if b"Sec-CH-Lang" in request.headers:
response.headers.set("lang-received", request.headers.get("Sec-CH-Lang")) response.headers.set(b"lang-received", request.headers.get(b"Sec-CH-Lang"))
if "sec-ch-ua-mobile" in request.headers: if b"sec-ch-ua-mobile" in request.headers:
response.headers.set("mobile-received", request.headers.get("sec-ch-ua-mobile")) response.headers.set(b"mobile-received", request.headers.get(b"sec-ch-ua-mobile"))

View file

@ -4,25 +4,25 @@ def main(request, response):
request headers were received. request headers were received.
""" """
response.headers.append("Access-Control-Allow-Origin", "*") response.headers.append(b"Access-Control-Allow-Origin", b"*")
response.headers.append("Access-Control-Allow-Headers", "*") response.headers.append(b"Access-Control-Allow-Headers", b"*")
response.headers.append("Access-Control-Expose-Headers", "*") response.headers.append(b"Access-Control-Expose-Headers", b"*")
client_hint_headers = [ client_hint_headers = [
"sec-ch-ua", b"sec-ch-ua",
"sec-ch-ua-arch", b"sec-ch-ua-arch",
"sec-ch-ua-platform", b"sec-ch-ua-platform",
"sec-ch-ua-platform-version", b"sec-ch-ua-platform-version",
"sec-ch-ua-model", b"sec-ch-ua-model",
"sec-ch-ua-full-version", b"sec-ch-ua-full-version",
] ]
request_client_hints = {i: request.headers.get(i) for i in client_hint_headers} request_client_hints = {i: request.headers.get(i) for i in client_hint_headers}
for header in client_hint_headers: for header in client_hint_headers:
if request_client_hints[header] is not None: if request_client_hints[header] is not None:
response.headers.set(header + "-recieved", request_client_hints[header]) response.headers.set(header + b"-recieved", request_client_hints[header])
headers = [] headers = []
content = "" content = u""
return 200, headers, content return 200, headers, content

View file

@ -1,21 +1,29 @@
from wptserve.utils import isomorphic_decode
def main(request, response): def main(request, response):
""" """
Simple handler that returns an HTML response that passes when the required Simple handler that returns an HTML response that passes when the required
Client Hints are received as request headers. Client Hints are received as request headers.
""" """
values = [ "Device-Memory", "DPR", "Viewport-Width", "Sec-CH-UA", "Sec-CH-UA-Mobile" ] values = [b"Device-Memory", b"DPR", b"Viewport-Width", b"Sec-CH-UA", b"Sec-CH-UA-Mobile"]
result = "PASS" result = u"PASS"
log = "" log = u""
for value in values: for value in values:
should = (request.GET[value.lower()] == "true") should = (request.GET[value.lower()] == b"true")
present = request.headers.get(value.lower()) or request.headers.get(value) present = request.headers.get(value.lower()) or request.headers.get(value)
log += value + " " + str(should) + " " + str(present) +", " if present:
log += isomorphic_decode(value) + u" " + str(should) + u" " + isomorphic_decode(present) + u", "
else:
log += isomorphic_decode(value) + u" " + str(should) + u" " + str(present) + u", "
if (should and not present) or (not should and present): if (should and not present) or (not should and present):
result = "FAIL " + value + " " + str(should) + " " + str(present) if present:
result = u"FAIL " + isomorphic_decode(value) + u" " + str(should) + u" " + isomorphic_decode(present)
else:
result = u"FAIL " + isomorphic_decode(value) + u" " + str(should) + u" " + str(present)
break break
response.headers.append("Access-Control-Allow-Origin", "*") response.headers.append(b"Access-Control-Allow-Origin", b"*")
body = "<script>console.log('" + log +"'); window.parent.postMessage('" + result + "', '*');</script>" body = u"<script>console.log('" + log + u"'); window.parent.postMessage('" + result + u"', '*');</script>"
response.content = body response.content = body

View file

@ -1,9 +1,9 @@
def main(request, response): def main(request, response):
ua = request.headers.get('sec-ch-ua', '') ua = request.headers.get(b'sec-ch-ua', b'')
response.headers.set("Content-Type", "text/html") response.headers.set(b"Content-Type", b"text/html")
response.headers.set("Accept-CH", "UA") response.headers.set(b"Accept-CH", b"UA")
response.headers.set("Accept-CH-Lifetime", "10") response.headers.set(b"Accept-CH-Lifetime", b"10")
response.content = ''' response.content = b'''
<script> <script>
window.opener.postMessage({ header: '%s' }, "*"); window.opener.postMessage({ header: '%s' }, "*");
</script> </script>

View file

@ -1,31 +1,33 @@
import random import random
import string import string
from wptserve.utils import isomorphic_encode
def id_token(): def id_token():
letters = string.ascii_lowercase letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(20)) return u''.join(random.choice(letters) for i in range(20))
def main(request, response): def main(request, response):
client_hint_headers = [ client_hint_headers = [
"device-memory", b"device-memory",
"dpr", b"dpr",
"width", b"width",
"viewport-width", b"viewport-width",
"rtt", b"rtt",
"downlink", b"downlink",
"ect", b"ect",
"sec-ch-lang", b"sec-ch-lang",
"sec-ch-ua", b"sec-ch-ua",
"sec-ch-ua-arch", b"sec-ch-ua-arch",
"sec-ch-ua-platform", b"sec-ch-ua-platform",
"sec-ch-ua-platform-version", b"sec-ch-ua-platform-version",
"sec-ch-ua-model", b"sec-ch-ua-model",
] ]
client_hints_curr = {i:request.headers.get(i) for i in client_hint_headers} client_hints_curr = {i:request.headers.get(i) for i in client_hint_headers}
token = request.GET.first("token", None) token = request.GET.first(b"token", None)
is_query = request.GET.first("query", None) is not None is_query = request.GET.first(b"query", None) is not None
with request.server.stash.lock: with request.server.stash.lock:
stash = request.server.stash.take(token) stash = request.server.stash.take(token)
if stash != None: if stash != None:
@ -44,18 +46,18 @@ def main(request, response):
for header in client_hint_headers: for header in client_hint_headers:
if client_hints_curr[header] is not None: if client_hints_curr[header] is not None:
response.headers.set(header+"-recieved", client_hints_curr[header]) response.headers.set(header+b"-recieved", client_hints_curr[header])
if (header in client_hints_prev) and (client_hints_prev[header] is not None): if (header in client_hints_prev) and (client_hints_prev[header] is not None):
response.headers.set(header+"-previous", client_hints_prev[header]) response.headers.set(header+b"-previous", client_hints_prev[header])
if is_query: if is_query:
headers = [("Count", count)] headers = [(b"Count", count)]
content = "" content = u""
return 200, headers, content return 200, headers, content
else: else:
unique_id = id_token() unique_id = id_token()
headers = [("Content-Type", "text/html"), headers = [(b"Content-Type", b"text/html"),
("Cache-Control", "private, max-age=0, stale-while-revalidate=60"), (b"Cache-Control", b"private, max-age=0, stale-while-revalidate=60"),
("Unique-Id", unique_id)] (b"Unique-Id", isomorphic_encode(unique_id))]
content = "report('{}')".format(unique_id) content = u"report('{}')".format(unique_id)
return 200, headers, content return 200, headers, content

View file

@ -26,7 +26,7 @@
}); });
return waitUntilCSPEventForTrustedTypes(t).then(t.step_func_done(e => { return waitUntilCSPEventForTrustedTypes(t).then(t.step_func_done(e => {
assert_equals(e.sample.replace(/\n/g, ""), assert_equals(e.sample.replace(/\n/g, ""),
"eval|(function anonymous(a,b) {return '1234"); "Function|(a,b) {return '12345678901234567890123");
})); }));
}, "Function constructor - the other kind of eval - is clipped."); }, "Function constructor - the other kind of eval - is clipped.");

View file

@ -1,87 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS border-radius Test</title>
<link rel="author" title="tmd" href="mailto:weisong4413@126.com">
<link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-radius">
<link rel="match" href="reference/css-border-radius-ref-002.html">
<meta name="assert" content="if there is more then one graph and one color">
<style type="text/css">
.redSquare {
position: absolute;
left:50px;
width: 100px;
height: 100px;
border-bottom-left-radius:100% 100%;
border-top-left-radius:100% 100%;
border-bottom-right-radius: 100% 100%;
border-top-right-radius: 100% 100%;
background-color:rgba(255, 0, 0, 0.5);
}
.greenSquare {
position: absolute;
left:50px;
width: 100px;
height: 100px;
background-image:url(support/yy.png);
}
.container {
position: absolute;
}
</style>
</head>
<body>
<p>The test passes if there is one graph with one color.</p>
<div class="container">
<!-- This is the graph that should not be visible if the test passes -->
<div id="green" class="greenSquare"></div>
<!-- This is the square being tested with the radius-->
<div id="red" class="redSquare">
</div><br><br><br><br><br>
<p>you can change the value of all radius to change the graph.</p>
Top--- Left- X<input id="rangeTL1" type="range" value="100" onchange="setRadius('TL1')">% Y<input id="rangeTL2" type="range" value="100" onchange="setRadius('TL2')">%
<br> Top--- Right X<input id="rangeTR1" type="range" value="100" onchange="setRadius('TR1')">% Y<input id="rangeTR2" type="range" value="100" onchange="setRadius('TR2')">%
<br> Bottom Left- X<input id="rangeBL1" type="range" value="100" onchange="setRadius('BL1')">% Y<input id="rangeBL2" type="range" value="100" onchange="setRadius('BL2')">%
<br> Bottom Right X<input id="rangeBR1" type="range" value="100" onchange="setRadius('BR1')">% Y<input id="rangeBR2" type="range" value="100" onchange="setRadius('BR2')">%
<script>
var red = document.getElementById("red");
var rangeTL1 = document.getElementById("rangeTL1");
var rangeTR1 = document.getElementById("rangeTR1");
var rangeBL1 = document.getElementById("rangeBL1");
var rangeBR1 = document.getElementById("rangeBR1");
var rangeTL2 = document.getElementById("rangeTL2");
var rangeTR2 = document.getElementById("rangeTR2");
var rangeBL2 = document.getElementById("rangeBL2");
var rangeBR2 = document.getElementById("rangeBR2");
function setRadius(str){
rangeTL1.setAttribute("title",rangeTL1.value);
rangeTR1.setAttribute("title",rangeTR1.value);
rangeBL1.setAttribute("title",rangeBL1.value);
rangeBR1.setAttribute("title",rangeBR1.value);
rangeTL2.setAttribute("title",rangeTL2.value);
rangeTR2.setAttribute("title",rangeTR2.value);
rangeBL2.setAttribute("title",rangeBL2.value);
rangeBR2.setAttribute("title",rangeBR2.value);
switch(str){
case 'TL1':
case 'TL2':
red.style.borderTopLeftRadius = rangeTL1.value+'% '+rangeTL2.value+'%';
break;
case 'TR1':
case 'TR2':
red.style.borderTopRightRadius = rangeTR1.value+'% '+rangeTR2.value+'%';
break;
case 'BL1':
case 'BL2':
red.style.borderBottomLeftRadius = rangeBL1.value+'% '+rangeBL2.value+'%';
break;
case 'BR1':
case 'BR2':
red.style.borderBottomRightRadius = rangeBR1.value+'% '+rangeBR2.value+'%';
break;
}
}
</script>
</div>
</body>
</html>

View file

@ -1,29 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Background and Border Test:background-size conflicts with background-attachment</title>
<link rel="author" title="xiaochun" href="mailto:stenders@163.com">
<link rel="reviewer" title="Jinlong Zhang" href="mailto:jinlongz@oupeng.com"><!--2012/10/21-->
<meta name="assert" content="The test passes if we can see the background-image is exactly same as above.">
<style type="text/css">
.backgroundSize{
width:295px;
height:289px;
background-image:url(../support/bg.jpg);
background-repeat:no-repeat;
}
</style>
</head>
<body>
The image used as background-image is :<br />
<img src="../support/bg.jpg" />
<p>The test passes if we can see the background-image is exactly same as above.</p>
<div class="container">
<!-- This is the box that should only contains an image if the test passes -->
<div class="backgroundSize">
</div>
</div>
</body>
</html>

View file

@ -1,34 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS border-radius Test</title>
<style type="text/css">
.redSquare {
position: absolute;
left:50px;
width: 100px;
height: 100px;
background-image:url(../support/yyy.png);
}
.greenSquare {
position: absolute;
left:50px;
width: 100px;
height: 100px;
background-image:url(../support/yy.png);
}
.container {
position: absolute;
}
</style>
</head>
<body>
<p>The test passes if there is one graph with one color.</p>
<div class="container">
<!-- This is the graph that should not be visible if the test passes -->
<div id="green" class="greenSquare"></div>
<!-- This is the square being tested with the radius-->
<div id="red" class="redSquare">
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -0,0 +1,35 @@
<!doctype html>
<html lang="en">
<meta charset=utf-8>
<title>CSS Generated Content test: quotes</title>
<meta name="assert" content="In the case of an unknown region, the quotes displayed should be based on the fallback order.">
<link rel="help" href="https://drafts.csswg.org/css-content-3/#quotes">
<link rel=match href="reference/quotes-034-ref.html">
<style>
body { font: 15px serif; }
</style>
<body>
<p>Test passes if quote marks in each pair lines match:</p>
<p lang="fr"><q>fr FALLBACK</q></p>
<p lang="fr-FR"><q>fr FALLBACK</q></p>
<p lang="en"><q>en FALLBACK</q></p>
<p lang="en-EN"><q>en FALLBACK</q></p>
<p lang="fi"><q>fi FALLBACK</q></p>
<p lang="fi-FI"><q>fi FALLBACK</q></p>
<p lang="de"><q>de FALLBACK</q></p>
<p lang="de-DE"><q>de FALLBACK</q></p>
<p lang="he"><q>he FALLBACK</q></p>
<p lang="he-HE"><q>he FALLBACK</q></p>
<p lang="ja"><q>ja FALLBACK</q></p>
<p lang="ja-JA"><q>ja FALLBACK</q></p>
<p lang="aa"><q>root FALLBACK</q></p>
<p lang="zz"><q>root FALLBACK</q></p>

View file

@ -0,0 +1,32 @@
<!doctype html>
<html lang="en">
<meta charset=utf-8>
<title>CSS Generated Content reference: quotes</title>
<style>
body { font: 15px serif; }
</style>
<body>
<p>Test passes if quote marks in each pair lines match:
<p lang="fr">&#x00ab;fr FALLBACK&#x00bb</p>
<p lang="fr">&#x00ab;fr FALLBACK&#x00bb</p>
<p lang="en">&#x201c;en FALLBACK&#x201d</p>
<p lang="en">&#x201c;en FALLBACK&#x201d</p>
<p lang="fi">&#x201d;fi FALLBACK&#x201d</p>
<p lang="fi">&#x201d;fi FALLBACK&#x201d</p>
<p lang="de">&#x201e;de FALLBACK&#x201c</p>
<p lang="de">&#x201e;de FALLBACK&#x201c</p>
<p lang="he">&#x0022;he FALLBACK&#x0022</p>
<p lang="he">&#x0022;he FALLBACK&#x0022</p>
<p lang="ja">&#x300c;ja FALLBACK&#x300d</p>
<p lang="ja">&#x300c;ja FALLBACK&#x300d</p>
<p lang="aa">&#x0022;root FALLBACK&#x0022</p>
<p lang="zz">&#x0022;root FALLBACK&#x0022</p>

View file

@ -9,6 +9,7 @@
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling"> <link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling">
<link rel="help" href="https://www.w3.org/TR/fill-stroke-3/#fill-shorthand"> <link rel="help" href="https://www.w3.org/TR/fill-stroke-3/#fill-shorthand">
<link rel="help" href="https://www.w3.org/TR/fill-stroke-3/#stroke-shorthand"> <link rel="help" href="https://www.w3.org/TR/fill-stroke-3/#stroke-shorthand">
<link rel="match" href="textpath-selection-011-ref.html">
<meta content="svg" name="flags"> <meta content="svg" name="flags">
<meta content="This test checks that an SVG application with a text following a text path can be selected and then be styled." name="assert"> <meta content="This test checks that an SVG application with a text following a text path can be selected and then be styled." name="assert">

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: out-of-flow div block size</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>
<div style="position: relative; width: 200px; height: 200px;">
<div style="position: absolute; aspect-ratio: 1/1; background: green;"> <!-- should be 100px tall -->
<div style="width: 100px;"></div>
</div>
</div>

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: min-content size contribution</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>
<div style="width: min-content; height: 100px; background: green;">
<div style="height: 100px; aspect-ratio: 1/1;"></div>
</div>

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: max-content size contribution</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>
<div style="width: max-content; height: 100px; background: green;">
<div style="height: 100px; aspect-ratio: 1/1;"></div>
</div>

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: sizing under a min-content constraint</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>
<div style="width: 0;">
<div style="float: left; height: 100px; aspect-ratio: 1/1; background: green;"></div>
</div>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<title>CSS aspect-ratio: min-content size keyword</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>
<!-- This is still under discussion in https://github.com/w3c/csswg-drafts/issues/5032
but this testcase tests the likely outcome. -->
<div style="height: 100px; width: min-content; aspect-ratio: 1/1; background: green;"></div>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<canvas id="canvas"></canvas>
<script>
function RunTest(d, move) {
promise_test(async (t) => {
const presenter = await navigator.ink.requestPresenter('delegated-ink-trail', canvas);
const style = { color: "green", diameter: d };
canvas.addEventListener("pointermove", evt => {
assert_equals(d, style.diameter);
assert_throws_dom("NotSupportedError", function() {
presenter.updateInkTrailStartPoint(evt, style);
}, "Expected a NotSupportedError to be thrown due to diameter set to "+d+".");
});
const actions_promise = new test_driver.Actions().pointerMove(move, move).send();
t.add_cleanup(() => actions_promise);
});
}
RunTest(0, 10);
RunTest(-0.000001, 11);
RunTest(-1, 10);
RunTest(-100, 11);
</script>

View file

@ -1,45 +1,47 @@
import os import os
from wptserve.utils import isomorphic_encode
def main(request, response): def main(request, response):
origin = request.GET.first('origin') origin = request.GET.first(b'origin')
if origin: if origin:
response.headers.set('Access-Control-Allow-Origin', origin) response.headers.set(b'Access-Control-Allow-Origin', origin)
tao = request.GET.first('tao') tao = request.GET.first(b'tao')
if tao == 'wildcard': if tao == b'wildcard':
# wildcard, pass # wildcard, pass
response.headers.set('Timing-Allow-Origin', '*') response.headers.set(b'Timing-Allow-Origin', b'*')
elif tao == 'null': elif tao == b'null':
# null, fail # null, fail
response.headers.set('Timing-Allow-Origin', 'null') response.headers.set(b'Timing-Allow-Origin', b'null')
elif tao == 'origin': elif tao == b'origin':
# case-sensitive match for origin, pass # case-sensitive match for origin, pass
response.headers.set('Timing-Allow-Origin', origin) response.headers.set(b'Timing-Allow-Origin', origin)
elif tao == 'space': elif tao == b'space':
# space separated list of origin and wildcard, fail # space separated list of origin and wildcard, fail
response.headers.set('Timing-Allow-Origin', (origin + ' *')) response.headers.set(b'Timing-Allow-Origin', (origin + b' *'))
elif tao == 'multi': elif tao == b'multi':
# more than one TAO values, separated by comma, pass # more than one TAO values, separated by comma, pass
response.headers.set('Timing-Allow-Origin', origin) response.headers.set(b'Timing-Allow-Origin', origin)
response.headers.append('Timing-Allow-Origin', '*') response.headers.append(b'Timing-Allow-Origin', b'*')
elif tao == 'multi_wildcard': elif tao == b'multi_wildcard':
# multiple wildcards, separated by comma, pass # multiple wildcards, separated by comma, pass
response.headers.set('Timing-Allow-Origin', '*') response.headers.set(b'Timing-Allow-Origin', b'*')
response.headers.append('Timing-Allow-Origin', '*') response.headers.append(b'Timing-Allow-Origin', b'*')
elif tao == 'match_origin': elif tao == b'match_origin':
# contains a match of origin, separated by comma, pass # contains a match of origin, separated by comma, pass
response.headers.set('Timing-Allow-Origin', origin) response.headers.set(b'Timing-Allow-Origin', origin)
response.headers.append('Timing-Allow-Origin', "fake") response.headers.append(b'Timing-Allow-Origin', b"fake")
elif tao == 'match_wildcard': elif tao == b'match_wildcard':
# contains a wildcard, separated by comma, pass # contains a wildcard, separated by comma, pass
response.headers.set('Timing-Allow-Origin', "fake") response.headers.set(b'Timing-Allow-Origin', b"fake")
response.headers.append('Timing-Allow-Origin', '*') response.headers.append(b'Timing-Allow-Origin', b'*')
elif tao == 'uppercase': elif tao == b'uppercase':
# non-case-sensitive match for origin, fail # non-case-sensitive match for origin, fail
response.headers.set('Timing-Allow-Origin', origin.upper()) response.headers.set(b'Timing-Allow-Origin', origin.upper())
else: else:
pass pass
response.headers.set("Cache-Control", "no-cache, must-revalidate"); response.headers.set(b"Cache-Control", b"no-cache, must-revalidate");
image_path = os.path.join(os.path.dirname(__file__), "square100.png"); image_path = os.path.join(os.path.dirname(isomorphic_encode(__file__)), b"square100.png");
response.content = open(image_path, mode='rb').read(); response.content = open(image_path, mode=u'rb').read();

View file

@ -1,3 +1,5 @@
from wptserve.utils import isomorphic_encode
def main(request, response): def main(request, response):
"""Handler that causes multiple redirections. """Handler that causes multiple redirections.
@ -16,42 +18,42 @@ def main(request, response):
Note: |step| is used internally to track the current redirect number. Note: |step| is used internally to track the current redirect number.
""" """
step = 1 step = 1
if "step" in request.GET: if b"step" in request.GET:
try: try:
step = int(request.GET.first("step")) step = int(request.GET.first(b"step"))
except ValueError: except ValueError:
pass pass
redirect_count = int(request.GET.first("redirect_count")) redirect_count = int(request.GET.first(b"redirect_count"))
final_resource = request.GET.first("final_resource") final_resource = request.GET.first(b"final_resource")
tao_value = None tao_value = None
tao = "tao" + str(step) tao = b"tao" + isomorphic_encode(str(step))
if tao in request.GET: if tao in request.GET:
tao_value = request.GET.first(tao) tao_value = request.GET.first(tao)
redirect_url = "" redirect_url = b""
origin = "origin" + str(step) origin = b"origin" + isomorphic_encode(str(step))
if origin in request.GET: if origin in request.GET:
redirect_url = request.GET.first(origin) redirect_url = request.GET.first(origin)
if step == redirect_count: if step == redirect_count:
redirect_url += final_resource redirect_url += final_resource
else: else:
redirect_url += "/element-timing/resources/multiple-redirects.py?" redirect_url += b"/element-timing/resources/multiple-redirects.py?"
redirect_url += "redirect_count=" + str(redirect_count) redirect_url += b"redirect_count=" + isomorphic_encode(str(redirect_count))
redirect_url += "&final_resource=" + final_resource redirect_url += b"&final_resource=" + final_resource
for i in range(1, redirect_count + 1): for i in range(1, redirect_count + 1):
tao = "tao" + str(i) tao = b"tao" + isomorphic_encode(str(i))
if tao in request.GET: if tao in request.GET:
redirect_url += "&" + tao + "=" + request.GET.first(tao) redirect_url += b"&" + tao + b"=" + request.GET.first(tao)
origin = "origin" + str(i) origin = b"origin" + isomorphic_encode(str(i))
if origin in request.GET: if origin in request.GET:
redirect_url += "&" + origin + "=" + request.GET.first(origin) redirect_url += b"&" + origin + b"=" + request.GET.first(origin)
redirect_url += "&step=" + str(step + 1) redirect_url += b"&step=" + isomorphic_encode(str(step + 1))
if tao_value: if tao_value:
response.headers.set("timing-allow-origin", tao_value) response.headers.set(b"timing-allow-origin", tao_value)
response.status = 302 response.status = 302
response.headers.set("Location", redirect_url) response.headers.set(b"Location", redirect_url)

View file

@ -1,17 +1,19 @@
import os.path import os.path
import time import time
from wptserve.utils import isomorphic_encode
def main(request, response): def main(request, response):
name = request.GET.first("name") name = request.GET.first(b"name")
sleepTime = float(request.GET.first("sleep")) / 1E3 sleepTime = float(request.GET.first(b"sleep")) / 1E3
numInitial = int(request.GET.first("numInitial")) numInitial = int(request.GET.first(b"numInitial"))
path = os.path.join(os.path.dirname(__file__), name) path = os.path.join(os.path.dirname(isomorphic_encode(__file__)), name)
body = open(path, "rb").read() body = open(path, u"rb").read()
response.headers.set("Content-Type", "image") response.headers.set(b"Content-Type", b"image")
response.headers.set("Content-Length", len(body)) response.headers.set(b"Content-Length", len(body))
response.headers.set("Cache-control", "no-cache, must-revalidate") response.headers.set(b"Cache-control", b"no-cache, must-revalidate")
response.write_status_headers() response.write_status_headers()
# Read from the beginning, |numInitial| bytes. # Read from the beginning, |numInitial| bytes.

View file

@ -1,17 +1,19 @@
import os.path import os.path
import time import time
from wptserve.utils import isomorphic_encode
def main(request, response): def main(request, response):
name = request.GET.first("name") name = request.GET.first(b"name")
sleepTime = float(request.GET.first("sleep")) / 1E3 sleepTime = float(request.GET.first(b"sleep")) / 1E3
time.sleep(sleepTime) time.sleep(sleepTime)
path = os.path.join(os.path.dirname(__file__), name) path = os.path.join(os.path.dirname(isomorphic_encode(__file__)), name)
body = open(path, "rb").read() body = open(path, u"rb").read()
response.headers.set("Content-Type", "image") response.headers.set(b"Content-Type", b"image")
response.headers.set("Content-Length", len(body)) response.headers.set(b"Content-Length", len(body))
response.headers.set("Cache-control", "no-cache, must-revalidate") response.headers.set(b"Cache-control", b"no-cache, must-revalidate")
response.content = body; response.content = body;

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<script>
window.addEventListener('load', () => { window.didLoadFrame = true; });
</script>
</head>
</html>

View file

@ -0,0 +1,158 @@
<!doctype html>
<meta charset=utf-8>
<title></title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
const setupIframe = (t, attrs) => {
const iframe = document.createElement('iframe');
for (const [key, value] of Object.entries(attrs))
iframe[key] = value;
const watcher = new EventWatcher(t, iframe, ['load']);
document.body.appendChild(iframe);
return {iframe, watcher};
};
promise_test(async t => {
const {iframe, watcher} = setupIframe(t, {});
// Per https://whatwg.org/c/iframe-embed-object.html#process-the-iframe-attributes,
// the task to perform the "iframe load event steps" should still be queued.
// If a browser already fired a load event, the test will fail here since
// EventWatcher will have received an unexpected load event.
iframe.contentWindow.persistedString = 'Hello world!';
iframe.src = 'support/same-origin-iframe.html';
await watcher.wait_for(['load']);
assert_true(iframe.contentWindow.didLoadFrame);
// The <iframe>'s session history has only one Document, and that Document is
// the initial:blank Document. The Window object should be reused per
// https://whatwg.org/c/iframe-embed-object.html#process-the-iframe-attributes.
assert_equals(iframe.contentWindow.persistedString, 'Hello world!');
}, 'synchronously navigate iframe with no initial src.');
promise_test(async t => {
const {iframe, watcher} = setupIframe(t, {});
// Per https://whatwg.org/c/iframe-embed-object.html#process-the-iframe-attributes,
// the task to perform the "iframe load event steps" should still be queued.
await watcher.wait_for(['load']);
iframe.contentWindow.persistedString = 'Hello world!';
iframe.src = 'support/same-origin-iframe.html';
await watcher.wait_for(['load']);
assert_true(iframe.contentWindow.didLoadFrame);
// The <iframe>'s session history has only one Document, and that Document is
// the initial:blank Document. The Window object should be reused per
// https://whatwg.org/c/iframe-embed-object.html#process-the-iframe-attributes.
assert_equals(iframe.contentWindow.persistedString, 'Hello world!');
}, 'after the first iframe load event, navigate iframe with no initial src.');
// Per https://whatwg.org/c/iframe-embed-object.html#otherwise-steps-for-iframe-or-frame-elements,
// setting the <iframe> src to an empty string before inserting the <iframe>
// into the document should begin an attempt to navigate to a resource with
// url == "about:blank".
promise_test(async t => {
const {iframe, watcher} = setupIframe(t, {src: ''});
// Per https://whatwg.org/c/browsing-the-web.html#navigate, the "about:blank"
// resource should be obtained "in parallel". If a browser performs this step
// synchronously, the test will fail here since EventWatcher will have
// received an unexpected load event.
iframe.contentWindow.persistedString = 'Hello world!';
// An attempt to navigate to "about:blank" already exists but should not have
// matured yet since the resource should be obtained "in parallel". The new
// navigation attempt will cancel the preexisting attempt.
iframe.src = 'support/same-origin-iframe.html';
await watcher.wait_for(['load']);
assert_true(iframe.contentWindow.didLoadFrame);
// The navigation attempt to "about:blank" was cancelled, so the <iframe>'s
// session history has only one Document, and that Document is the
// initial:blank Document. The Window object should be reused per
// https://whatwg.org/c/iframe-embed-object.html#process-the-iframe-attributes.
assert_equals(iframe.contentWindow.persistedString, 'Hello world!');
}, 'synchronously navigate iframe with initial src == "".');
promise_test(async t => {
const {iframe, watcher} = setupIframe(t, {src: ''});
// Per https://whatwg.org/c/browsing-the-web.html#navigate, the "about:blank"
// resource should be obtained "in parallel".
await watcher.wait_for(['load']);
iframe.contentWindow.persistedString = 'Hello world!';
iframe.src = 'support/same-origin-iframe.html';
await watcher.wait_for(['load']);
assert_true(iframe.contentWindow.didLoadFrame);
// A non-initial navigation to about:blank was committed, so the <iframe>
// element is no longer displaying the initial about:blank Document. Per
// https://whatwg.org/c/browsing-the-web.html#initialise-the-document-object,
// the Window object must not be reused.
assert_equals(iframe.contentWindow.persistedString, undefined);
}, 'after the first iframe load event, navigate iframe with initial src == "".');
promise_test(async t => {
const {iframe, watcher} = setupIframe(t, {src: 'about:blank'});
// Per https://whatwg.org/c/browsing-the-web.html#navigate, the "about:blank"
// resource should be obtained "in parallel". If a browser performs this step
// synchronously, the test will fail here since EventWatcher will have
// received an unexpected load event.
iframe.contentWindow.persistedString = 'Hello world!';
// An attempt to navigate to "about:blank" already exists but should not have
// matured yet since the resource should be obtained "in parallel". The new
// navigation attempt will cancel the preexisting attempt.
iframe.src = 'support/same-origin-iframe.html';
await watcher.wait_for(['load']);
assert_true(iframe.contentWindow.didLoadFrame);
// The navigation attempt to "about:blank" was cancelled, so the <iframe>'s
// session history has only one Document, and that Document is the
// initial:blank Document. The Window object should be reused per
// https://whatwg.org/c/iframe-embed-object.html#process-the-iframe-attributes.
assert_equals(iframe.contentWindow.persistedString, 'Hello world!');
}, 'synchronously navigate iframe with initial src == "about:blank".');
promise_test(async t => {
const {iframe, watcher} = setupIframe(t, {src: 'about:blank'});
// Per https://whatwg.org/c/browsing-the-web.html#navigate, the "about:blank"
// resource should be obtained "in parallel".
await watcher.wait_for(['load']);
iframe.contentWindow.persistedString = 'Hello world!';
iframe.src = 'support/same-origin-iframe.html';
await watcher.wait_for(['load']);
assert_true(iframe.contentWindow.didLoadFrame);
// A non-initial navigation to about:blank was committed, so the <iframe>
// element is no longer displaying the initial about:blank Document. Per
// https://whatwg.org/c/browsing-the-web.html#initialise-the-document-object,
// the Window object must not be reused.
assert_equals(iframe.contentWindow.persistedString, undefined);
}, 'after the first iframe load event, navigate iframe with initial src == "about:blank".');
// Per https://whatwg.org/c/iframe-embed-object.html#otherwise-steps-for-iframe-or-frame-elements,
// setting <iframe> src before inserting the <iframe> into the document should
// begin an attempt to navigate to the value of the src attribute.
promise_test(async t => {
const {iframe, watcher} = setupIframe(t, {src: 'support/same-origin-iframe.html'});
iframe.contentWindow.persistedString = 'Hello world!';
// Completion of the attempt to navigate happens "in parallel".
await watcher.wait_for(['load']);
assert_true(iframe.contentWindow.didLoadFrame);
// The <iframe>'s session history has only one Document, and that Document is
// the initial:blank Document. The Window object should be reused per
// https://whatwg.org/c/iframe-embed-object.html#process-the-iframe-attributes.
assert_equals(iframe.contentWindow.persistedString, 'Hello world!');
}, 'iframe with initial src == same-origin resource.');
</script>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html class="reftest-wait">
<meta charset="utf-8">
<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<div>
email with leading whitespace: <input id=emailinput type=email>
</div>
<div>
number with trailing incomplete exponent: <input id=numberinput type=number>
</div>
<script>
window.onload = async () => {
await test_driver.send_keys(emailinput, ' user');
await test_driver.send_keys(numberinput, '123e');
document.documentElement.classList.remove('reftest-wait');
};
</script>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html class="reftest-wait">
<meta charset="utf-8">
<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
<link rel="match" href="defaultValue-clobbering-ref.html">
<meta name="assert" content="Assigning to defaultValue does not modify text a user has already typed in.">
<!-- This behavior is not explicitly specified. -->
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<div>
email with leading whitespace: <input id=emailinput type=email>
</div>
<div>
number with trailing incomplete exponent: <input id=numberinput type=number>
</div>
<script>
window.onload = async () => {
await test_driver.send_keys(emailinput, ' user');
await test_driver.send_keys(numberinput, '123e');
emailinput.defaultValue = emailinput.value;
numberinput.defaultValue = numberinput.value;
document.documentElement.classList.remove('reftest-wait');
};
</script>

View file

@ -2,4 +2,4 @@
<script> <script>
i.contentDocument.documentElement.appendChild(document.body); i.contentDocument.documentElement.appendChild(document.body);
</script> </script>
<template> </template> <template><script></script></template>

View file

@ -9,8 +9,8 @@ dictionary WebAppManifest {
USVString name; USVString name;
USVString short_name; USVString short_name;
USVString description; USVString description;
sequence<ImageResource> icons; sequence<ManifestImageResource> icons;
sequence<ImageResource> screenshots; sequence<ManifestImageResource> screenshots;
sequence<USVString> categories; sequence<USVString> categories;
DOMString iarc_rating_id; DOMString iarc_rating_id;
USVString start_url; USVString start_url;
@ -33,12 +33,9 @@ enum DisplayModeType {
"browser" "browser"
}; };
dictionary ImageResource { dictionary ManifestImageResource : ImageResource {
required USVString src;
DOMString sizes;
USVString type;
USVString purpose;
USVString platform; USVString platform;
USVString purpose;
}; };
dictionary ShortcutItem { dictionary ShortcutItem {
@ -46,7 +43,7 @@ dictionary ShortcutItem {
USVString short_name; USVString short_name;
USVString description; USVString description;
required USVString url; required USVString url;
sequence<ImageResource> icons; sequence<ManifestImageResource> icons;
}; };
dictionary ExternalApplicationResource { dictionary ExternalApplicationResource {

View file

@ -7,14 +7,13 @@
SecureContext] SecureContext]
interface CookieStore : EventTarget { interface CookieStore : EventTarget {
Promise<CookieListItem?> get(USVString name); Promise<CookieListItem?> get(USVString name);
Promise<CookieListItem?> get(CookieStoreGetOptions options); Promise<CookieListItem?> get(optional CookieStoreGetOptions options = {});
Promise<CookieList> getAll(USVString name); Promise<CookieList> getAll(USVString name);
Promise<CookieList> getAll(optional CookieStoreGetOptions options = {}); Promise<CookieList> getAll(optional CookieStoreGetOptions options = {});
Promise<void> set(USVString name, USVString value, Promise<void> set(USVString name, USVString value);
optional CookieStoreSetOptions options = {}); Promise<void> set(CookieInit options);
Promise<void> set(CookieStoreSetExtraOptions options);
Promise<void> delete(USVString name); Promise<void> delete(USVString name);
Promise<void> delete(CookieStoreDeleteOptions options); Promise<void> delete(CookieStoreDeleteOptions options);
@ -40,18 +39,15 @@ enum CookieSameSite {
"none" "none"
}; };
dictionary CookieStoreSetOptions { dictionary CookieInit {
required USVString name;
required USVString value;
DOMTimeStamp? expires = null; DOMTimeStamp? expires = null;
USVString? domain = null; USVString? domain = null;
USVString path = "/"; USVString path = "/";
CookieSameSite sameSite = "strict"; CookieSameSite sameSite = "strict";
}; };
dictionary CookieStoreSetExtraOptions : CookieStoreSetOptions {
required USVString name;
required USVString value;
};
dictionary CookieStoreDeleteOptions { dictionary CookieStoreDeleteOptions {
required USVString name; required USVString name;
USVString? domain = null; USVString? domain = null;
@ -59,13 +55,13 @@ dictionary CookieStoreDeleteOptions {
}; };
dictionary CookieListItem { dictionary CookieListItem {
required USVString name; USVString name;
USVString value; USVString value;
USVString? domain = null; USVString? domain;
USVString path = "/"; USVString path;
DOMTimeStamp? expires = null; DOMTimeStamp? expires;
boolean secure = true; boolean secure;
CookieSameSite sameSite = "strict"; CookieSameSite sameSite;
}; };
typedef sequence<CookieListItem> CookieList; typedef sequence<CookieListItem> CookieList;

View file

@ -4,7 +4,7 @@
// Source: Accessible Rich Internet Applications (WAI-ARIA) 1.2 (https://w3c.github.io/aria/) // Source: Accessible Rich Internet Applications (WAI-ARIA) 1.2 (https://w3c.github.io/aria/)
interface mixin AccessibilityRole { interface mixin AccessibilityRole {
attribute DOMString? role; attribute DOMString role;
}; };
Element includes AccessibilityRole; Element includes AccessibilityRole;

View file

@ -0,0 +1,91 @@
<!DOCTYPE html>
<title>Declarative Shadow DOM: moving the template doesn't change attachment point</title>
<link rel='author' title='Mason Freed' href='mailto:masonfreed@chromium.org'>
<link rel='help' href='https://github.com/whatwg/dom/issues/831'>
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<body>
<script>
function myObserver(mutationsList, observer) {
for (let mutation of mutationsList) {
for (let n of mutation.addedNodes) {
if (n.className === 'template' && !n.alreadyMoved) {
n.alreadyMoved = true;
let testWrapper = n.parentElement.parentElement;
let newHost = testWrapper.querySelector('div.new-host');
newHost.appendChild(n);
}
}
}
}
(new MutationObserver(myObserver)).observe(document.body, { childList: true, subtree: true });
function runTest(testdiv) {
let description = testdiv.getAttribute('description');
let shouldAttach = testdiv.getAttribute('shouldattach') == 'true';
test(t => {
let template = testdiv.querySelector('.template');
let oldHost = testdiv.querySelector('.old-host');
let newHost = testdiv.querySelector('.new-host');
let shadowroot = oldHost.shadowRoot;
if (shouldAttach) {
assert_true(!template, 'Declarative shadow template should not be left over');
assert_true(!oldHost.children.length, 'Old host should not contain children');
assert_true(!newHost.children.length, 'New host should not contain any children');
assert_true(!!shadowroot, 'Shadow root should be present');
assert_true(!!shadowroot.querySelector('span.contents'), 'The shadow root should contain a span');
} else {
assert_true(!oldHost.children.length, 'Old host should not contain children');
assert_true(!!newHost.children.length, 'New host should now contain the template');
assert_true(!shadowroot, 'Shadow root should not be present');
assert_true(!!template, 'Declarative shadow template should be left over');
assert_equals(template, newHost.querySelector('.template'), 'Declarative shadow template should be in the new host');
assert_true(!!template.content.querySelector('span.contents'), 'The template should still contain its content');
}
}, description);
}
</script>
<style>
div.test {
display: none;
}
</style>
<div class=test shouldattach=true description="Moving the template node during parsing should attach to initial parent (content before observer)">
<div class=new-host></div>
<div class=old-host>
<template class='template' shadowroot=open>
<span class=contents>Template contents</span>
<script></script> <!-- Observer runs here, moves <template> node -->
</template>
</div>
</div>
<div class=test shouldattach=true description="Moving the template node during parsing should attach to initial parent (content after observer)">
<div class=new-host></div>
<div class=old-host>
<template class='template' shadowroot=open>
<script></script> <!-- Observer runs here, moves <template> node -->
<span class=contents>Template contents</span>
</template>
</div>
</div>
<div class=test shouldattach=false description="Moving the template node from invalid parent to valid parent should still not attach">
<div class=new-host></div>
<video class=old-host>
<template class='template' shadowroot=open>
<span class=contents>Template contents</span>
<script></script> <!-- Observer runs here, moves <template> node -->
</template>
</video>
</div>
<script>
let tests = document.querySelectorAll('div.test');
assert_true(tests.length > 0);
tests.forEach(t => { runTest(t); });
</script>
</body>

View file

@ -996,9 +996,6 @@ class InternalRefTestImplementation(RefTestImplementation):
"timeout": timeout, "timeout": timeout,
"width": 800, "width": 800,
"height": 600})["value"] "height": 600})["value"]
for item in rv["extra"].get("reftest_screenshots", []):
if "screenshot" in item:
item["screenshot"] = [item["screenshot"]]
return rv return rv
def get_references(self, root_test, node): def get_references(self, root_test, node):

View file

@ -178,10 +178,10 @@ function validateRtpStreamStats(statsReport, stats) {
[webrtc-stats] [webrtc-stats]
7.2. RTCCodecStats dictionary 7.2. RTCCodecStats dictionary
dictionary RTCCodecStats : RTCStats { dictionary RTCCodecStats : RTCStats {
unsigned long payloadType; required unsigned long payloadType;
RTCCodecType codecType; RTCCodecType codecType;
DOMString transportId; required DOMString transportId;
DOMString mimeType; required DOMString mimeType;
unsigned long clockRate; unsigned long clockRate;
unsigned long channels; unsigned long channels;
DOMString sdpFmtpLine; DOMString sdpFmtpLine;
@ -201,7 +201,7 @@ function validateCodecStats(statsReport, stats) {
validateRtcStats(statsReport, stats); validateRtcStats(statsReport, stats);
assert_unsigned_int_field(stats, 'payloadType'); assert_unsigned_int_field(stats, 'payloadType');
assert_enum_field(stats, 'codecType', ['encode', 'decode']); assert_optional_enum_field(stats, 'codecType', ['encode', 'decode']);
validateOptionalIdField(statsReport, stats, 'transportId', 'transport'); validateOptionalIdField(statsReport, stats, 'transportId', 'transport');
@ -435,7 +435,6 @@ function validateSentRtpStreamStats(statsReport, stats) {
[webrtc-stats] [webrtc-stats]
7.7. RTCOutboundRtpStreamStats dictionary 7.7. RTCOutboundRtpStreamStats dictionary
dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats { dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
DOMString trackId;
DOMString mediaSourceId; DOMString mediaSourceId;
DOMString senderId; DOMString senderId;
DOMString remoteId; DOMString remoteId;
@ -476,7 +475,10 @@ function validateSentRtpStreamStats(statsReport, stats) {
unsigned long sliCount; unsigned long sliCount;
DOMString encoderImplementation; DOMString encoderImplementation;
}; };
Obsolete members:
partial dictionary RTCOutboundStreamStats {
DOMString trackId;
};
[webrtc-pc] [webrtc-pc]
8.6. Mandatory To Implement Stats 8.6. Mandatory To Implement Stats
- RTCOutboundRtpStreamStats, with all required attributes from its - RTCOutboundRtpStreamStats, with all required attributes from its
@ -485,7 +487,6 @@ function validateSentRtpStreamStats(statsReport, stats) {
function validateOutboundRtpStreamStats(statsReport, stats) { function validateOutboundRtpStreamStats(statsReport, stats) {
validateSentRtpStreamStats(statsReport, stats) validateSentRtpStreamStats(statsReport, stats)
validateOptionalIdField(statsReport, stats, 'trackId', 'track');
validateOptionalIdField(statsReport, stats, 'mediaSourceId', 'media-source'); validateOptionalIdField(statsReport, stats, 'mediaSourceId', 'media-source');
validateIdField(statsReport, stats, 'senderId', 'sender'); validateIdField(statsReport, stats, 'senderId', 'sender');
validateIdField(statsReport, stats, 'remoteId', 'remote-inbound-rtp'); validateIdField(statsReport, stats, 'remoteId', 'remote-inbound-rtp');
@ -556,6 +557,8 @@ function validateOutboundRtpStreamStats(statsReport, stats) {
assert_optional_unsigned_int_field(stats, 'pliCount'); assert_optional_unsigned_int_field(stats, 'pliCount');
assert_optional_unsigned_int_field(stats, 'sliCount'); assert_optional_unsigned_int_field(stats, 'sliCount');
assert_optional_string_field(stats, 'encoderImplementation'); assert_optional_string_field(stats, 'encoderImplementation');
// Obsolete stats
validateOptionalIdField(statsReport, stats, 'trackId', 'track');
} }
/* /*
@ -883,8 +886,8 @@ function validateTransportStats(statsReport, stats) {
[webrtc-stats] [webrtc-stats]
7.15. RTCIceCandidateStats dictionary 7.15. RTCIceCandidateStats dictionary
dictionary RTCIceCandidateStats : RTCStats { dictionary RTCIceCandidateStats : RTCStats {
DOMString transportId; required DOMString transportId;
DOMString address; DOMString? address;
long port; long port;
DOMString protocol; DOMString protocol;
RTCIceCandidateType candidateType; RTCIceCandidateType candidateType;
@ -908,9 +911,16 @@ function validateTransportStats(statsReport, stats) {
function validateIceCandidateStats(statsReport, stats) { function validateIceCandidateStats(statsReport, stats) {
validateRtcStats(statsReport, stats); validateRtcStats(statsReport, stats);
validateOptionalIdField(statsReport, stats, 'transportId', 'transport'); validateIdField(statsReport, stats, 'transportId', 'transport');
// The address is mandatory to implement, but is allowed to be null
assert_string_field(stats, 'address'); // when hidden for privacy reasons.
if (stats.address != null) {
// Departure from strict spec reading:
// This field is populated in a racy manner in Chrome.
// We allow it to be present or not present for the time being.
// TODO(https://bugs.chromium.org/1092721): Become consistent.
assert_optional_string_field(stats, 'address');
}
assert_unsigned_int_field(stats, 'port'); assert_unsigned_int_field(stats, 'port');
assert_string_field(stats, 'protocol'); assert_string_field(stats, 'protocol');
@ -918,7 +928,10 @@ function validateIceCandidateStats(statsReport, stats) {
['host', 'srflx', 'prflx', 'relay']); ['host', 'srflx', 'prflx', 'relay']);
assert_optional_int_field(stats, 'priority'); assert_optional_int_field(stats, 'priority');
assert_string_field(stats, 'url'); // The url field is mandatory for local candidates gathered from
// a STUN or TURN server, and MUST NOT be present otherwise.
// TODO(hta): Improve checking.
assert_optional_string_field(stats, 'url');
assert_optional_string_field(stats, 'relayProtocol'); assert_optional_string_field(stats, 'relayProtocol');
} }