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]
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]
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]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
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

View file

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

View file

@ -11,6 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
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]
expected: TIMEOUT
[opener of discarded nested browsing context]
expected: FAIL
[opener of discarded auxiliary browsing context]
expected: TIMEOUT
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
expected: TIMEOUT
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
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]
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]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
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]
expected: TIMEOUT
[Create a shared worker in a data url frame]
expected: FAIL
[Create a data url shared worker in a data url frame]
expected: FAIL
expected: TIMEOUT

View file

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

View file

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

View file

@ -11,6 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
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]
expected: TIMEOUT
[opener and "removed" embedded documents]
expected: FAIL
@ -7,5 +6,5 @@
expected: FAIL
[opener of discarded auxiliary browsing context]
expected: TIMEOUT
expected: FAIL

View file

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

View file

@ -1,5 +1,6 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
expected: TIMEOUT
[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]
type: testharness
expected: CRASH
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-3.html]
type: testharness
expected: TIMEOUT
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
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]
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]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
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]
expected: TIMEOUT
[Create a shared worker in a data url frame]
expected: FAIL
[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):
url = ''
if 'url' in request.GET:
url = request.GET['url']
return 301, [('Location', url),('Accept-CH', 'device-memory, DPR')], ''
url = b''
if b'url' in request.GET:
url = request.GET[b'url']
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
"""
if "device-memory" in request.headers:
result = "FAIL"
if b"device-memory" in request.headers:
result = u"FAIL"
else:
result = "PASS"
result = u"PASS"
content = '''
content = u'''
<script>
window.opener.postMessage("%s" , "*");
</script>
''' % (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

View file

@ -4,9 +4,9 @@ def main(request, response):
request headers were received.
"""
response.headers.append("Access-Control-Allow-Origin", "*")
response.headers.append("Access-Control-Allow-Headers", "*")
response.headers.append("Access-Control-Expose-Headers", "*")
response.headers.append(b"Access-Control-Allow-Origin", b"*")
response.headers.append(b"Access-Control-Allow-Headers", b"*")
response.headers.append(b"Access-Control-Expose-Headers", b"*")
if "device-memory" in request.headers:
response.headers.set("device-memory-received", request.headers.get("device-memory"))
if b"device-memory" in request.headers:
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
"""
if "device-memory" in request.headers and "sec-ch-ua" in request.headers and "sec-ch-ua-mobile" in request.headers:
result = "PASS"
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 = u"PASS"
else:
result = "FAIL"
result = u"FAIL"
content = '''
content = u'''
<script>
let messagee = window.opener || window.parent;
messagee.postMessage("%s" , "*");
</script>
''' % (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

View file

@ -4,23 +4,23 @@ def main(request, response):
request headers were received.
"""
response.headers.append("Access-Control-Allow-Origin", "*")
response.headers.append("Access-Control-Allow-Headers", "*")
response.headers.append("Access-Control-Expose-Headers", "*")
response.headers.append(b"Access-Control-Allow-Origin", b"*")
response.headers.append(b"Access-Control-Allow-Headers", b"*")
response.headers.append(b"Access-Control-Expose-Headers", b"*")
if "device-memory" in request.headers:
response.headers.set("device-memory-received", request.headers.get("device-memory"))
if "dpr" in request.headers:
response.headers.set("dpr-received", request.headers.get("dpr"))
if "viewport-width" in request.headers:
response.headers.set("viewport-width-received", request.headers.get("viewport-width"))
if "rtt" in request.headers:
response.headers.set("rtt-received", request.headers.get("rtt"))
if "downlink" in request.headers:
response.headers.set("downlink-received", request.headers.get("downlink"))
if "ect" in request.headers:
response.headers.set("ect-received", request.headers.get("ect"))
if "Sec-CH-Lang" in request.headers:
response.headers.set("lang-received", request.headers.get("Sec-CH-Lang"))
if "sec-ch-ua-mobile" in request.headers:
response.headers.set("mobile-received", request.headers.get("sec-ch-ua-mobile"))
if b"device-memory" in request.headers:
response.headers.set(b"device-memory-received", request.headers.get(b"device-memory"))
if b"dpr" in request.headers:
response.headers.set(b"dpr-received", request.headers.get(b"dpr"))
if b"viewport-width" in request.headers:
response.headers.set(b"viewport-width-received", request.headers.get(b"viewport-width"))
if b"rtt" in request.headers:
response.headers.set(b"rtt-received", request.headers.get(b"rtt"))
if b"downlink" in request.headers:
response.headers.set(b"downlink-received", request.headers.get(b"downlink"))
if b"ect" in request.headers:
response.headers.set(b"ect-received", request.headers.get(b"ect"))
if b"Sec-CH-Lang" in request.headers:
response.headers.set(b"lang-received", request.headers.get(b"Sec-CH-Lang"))
if b"sec-ch-ua-mobile" in request.headers:
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.
"""
response.headers.append("Access-Control-Allow-Origin", "*")
response.headers.append("Access-Control-Allow-Headers", "*")
response.headers.append("Access-Control-Expose-Headers", "*")
response.headers.append(b"Access-Control-Allow-Origin", b"*")
response.headers.append(b"Access-Control-Allow-Headers", b"*")
response.headers.append(b"Access-Control-Expose-Headers", b"*")
client_hint_headers = [
"sec-ch-ua",
"sec-ch-ua-arch",
"sec-ch-ua-platform",
"sec-ch-ua-platform-version",
"sec-ch-ua-model",
"sec-ch-ua-full-version",
b"sec-ch-ua",
b"sec-ch-ua-arch",
b"sec-ch-ua-platform",
b"sec-ch-ua-platform-version",
b"sec-ch-ua-model",
b"sec-ch-ua-full-version",
]
request_client_hints = {i: request.headers.get(i) for i in client_hint_headers}
for header in client_hint_headers:
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 = []
content = ""
content = u""
return 200, headers, content

View file

@ -1,21 +1,29 @@
from wptserve.utils import isomorphic_decode
def main(request, response):
"""
Simple handler that returns an HTML response that passes when the required
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"
log = ""
result = u"PASS"
log = u""
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)
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):
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
response.headers.append("Access-Control-Allow-Origin", "*")
body = "<script>console.log('" + log +"'); window.parent.postMessage('" + result + "', '*');</script>"
response.headers.append(b"Access-Control-Allow-Origin", b"*")
body = u"<script>console.log('" + log + u"'); window.parent.postMessage('" + result + u"', '*');</script>"
response.content = body

View file

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

View file

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

View file

@ -26,7 +26,7 @@
});
return waitUntilCSPEventForTrustedTypes(t).then(t.step_func_done(e => {
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.");

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/fill-stroke-3/#fill-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="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
from wptserve.utils import isomorphic_encode
def main(request, response):
origin = request.GET.first('origin')
origin = request.GET.first(b'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
response.headers.set('Timing-Allow-Origin', '*')
elif tao == 'null':
response.headers.set(b'Timing-Allow-Origin', b'*')
elif tao == b'null':
# null, fail
response.headers.set('Timing-Allow-Origin', 'null')
elif tao == 'origin':
response.headers.set(b'Timing-Allow-Origin', b'null')
elif tao == b'origin':
# case-sensitive match for origin, pass
response.headers.set('Timing-Allow-Origin', origin)
elif tao == 'space':
response.headers.set(b'Timing-Allow-Origin', origin)
elif tao == b'space':
# space separated list of origin and wildcard, fail
response.headers.set('Timing-Allow-Origin', (origin + ' *'))
elif tao == 'multi':
response.headers.set(b'Timing-Allow-Origin', (origin + b' *'))
elif tao == b'multi':
# more than one TAO values, separated by comma, pass
response.headers.set('Timing-Allow-Origin', origin)
response.headers.append('Timing-Allow-Origin', '*')
elif tao == 'multi_wildcard':
response.headers.set(b'Timing-Allow-Origin', origin)
response.headers.append(b'Timing-Allow-Origin', b'*')
elif tao == b'multi_wildcard':
# multiple wildcards, separated by comma, pass
response.headers.set('Timing-Allow-Origin', '*')
response.headers.append('Timing-Allow-Origin', '*')
elif tao == 'match_origin':
response.headers.set(b'Timing-Allow-Origin', b'*')
response.headers.append(b'Timing-Allow-Origin', b'*')
elif tao == b'match_origin':
# contains a match of origin, separated by comma, pass
response.headers.set('Timing-Allow-Origin', origin)
response.headers.append('Timing-Allow-Origin', "fake")
elif tao == 'match_wildcard':
response.headers.set(b'Timing-Allow-Origin', origin)
response.headers.append(b'Timing-Allow-Origin', b"fake")
elif tao == b'match_wildcard':
# contains a wildcard, separated by comma, pass
response.headers.set('Timing-Allow-Origin', "fake")
response.headers.append('Timing-Allow-Origin', '*')
elif tao == 'uppercase':
response.headers.set(b'Timing-Allow-Origin', b"fake")
response.headers.append(b'Timing-Allow-Origin', b'*')
elif tao == b'uppercase':
# 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:
pass
response.headers.set("Cache-Control", "no-cache, must-revalidate");
image_path = os.path.join(os.path.dirname(__file__), "square100.png");
response.content = open(image_path, mode='rb').read();
response.headers.set(b"Cache-Control", b"no-cache, must-revalidate");
image_path = os.path.join(os.path.dirname(isomorphic_encode(__file__)), b"square100.png");
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):
"""Handler that causes multiple redirections.
@ -16,42 +18,42 @@ def main(request, response):
Note: |step| is used internally to track the current redirect number.
"""
step = 1
if "step" in request.GET:
if b"step" in request.GET:
try:
step = int(request.GET.first("step"))
step = int(request.GET.first(b"step"))
except ValueError:
pass
redirect_count = int(request.GET.first("redirect_count"))
final_resource = request.GET.first("final_resource")
redirect_count = int(request.GET.first(b"redirect_count"))
final_resource = request.GET.first(b"final_resource")
tao_value = None
tao = "tao" + str(step)
tao = b"tao" + isomorphic_encode(str(step))
if tao in request.GET:
tao_value = request.GET.first(tao)
redirect_url = ""
origin = "origin" + str(step)
redirect_url = b""
origin = b"origin" + isomorphic_encode(str(step))
if origin in request.GET:
redirect_url = request.GET.first(origin)
if step == redirect_count:
redirect_url += final_resource
else:
redirect_url += "/element-timing/resources/multiple-redirects.py?"
redirect_url += "redirect_count=" + str(redirect_count)
redirect_url += "&final_resource=" + final_resource
redirect_url += b"/element-timing/resources/multiple-redirects.py?"
redirect_url += b"redirect_count=" + isomorphic_encode(str(redirect_count))
redirect_url += b"&final_resource=" + final_resource
for i in range(1, redirect_count + 1):
tao = "tao" + str(i)
tao = b"tao" + isomorphic_encode(str(i))
if tao in request.GET:
redirect_url += "&" + tao + "=" + request.GET.first(tao)
origin = "origin" + str(i)
redirect_url += b"&" + tao + b"=" + request.GET.first(tao)
origin = b"origin" + isomorphic_encode(str(i))
if origin in request.GET:
redirect_url += "&" + origin + "=" + request.GET.first(origin)
redirect_url += "&step=" + str(step + 1)
redirect_url += b"&" + origin + b"=" + request.GET.first(origin)
redirect_url += b"&step=" + isomorphic_encode(str(step + 1))
if tao_value:
response.headers.set("timing-allow-origin", tao_value)
response.headers.set(b"timing-allow-origin", tao_value)
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 time
from wptserve.utils import isomorphic_encode
def main(request, response):
name = request.GET.first("name")
sleepTime = float(request.GET.first("sleep")) / 1E3
numInitial = int(request.GET.first("numInitial"))
name = request.GET.first(b"name")
sleepTime = float(request.GET.first(b"sleep")) / 1E3
numInitial = int(request.GET.first(b"numInitial"))
path = os.path.join(os.path.dirname(__file__), name)
body = open(path, "rb").read()
path = os.path.join(os.path.dirname(isomorphic_encode(__file__)), name)
body = open(path, u"rb").read()
response.headers.set("Content-Type", "image")
response.headers.set("Content-Length", len(body))
response.headers.set("Cache-control", "no-cache, must-revalidate")
response.headers.set(b"Content-Type", b"image")
response.headers.set(b"Content-Length", len(body))
response.headers.set(b"Cache-control", b"no-cache, must-revalidate")
response.write_status_headers()
# Read from the beginning, |numInitial| bytes.

View file

@ -1,17 +1,19 @@
import os.path
import time
from wptserve.utils import isomorphic_encode
def main(request, response):
name = request.GET.first("name")
sleepTime = float(request.GET.first("sleep")) / 1E3
name = request.GET.first(b"name")
sleepTime = float(request.GET.first(b"sleep")) / 1E3
time.sleep(sleepTime)
path = os.path.join(os.path.dirname(__file__), name)
body = open(path, "rb").read()
path = os.path.join(os.path.dirname(isomorphic_encode(__file__)), name)
body = open(path, u"rb").read()
response.headers.set("Content-Type", "image")
response.headers.set("Content-Length", len(body))
response.headers.set("Cache-control", "no-cache, must-revalidate")
response.headers.set(b"Content-Type", b"image")
response.headers.set(b"Content-Length", len(body))
response.headers.set(b"Cache-control", b"no-cache, must-revalidate")
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>
i.contentDocument.documentElement.appendChild(document.body);
</script>
<template> </template>
<template><script></script></template>

View file

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

View file

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

View file

@ -4,7 +4,7 @@
// Source: Accessible Rich Internet Applications (WAI-ARIA) 1.2 (https://w3c.github.io/aria/)
interface mixin AccessibilityRole {
attribute DOMString? role;
attribute DOMString role;
};
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,
"width": 800,
"height": 600})["value"]
for item in rv["extra"].get("reftest_screenshots", []):
if "screenshot" in item:
item["screenshot"] = [item["screenshot"]]
return rv
def get_references(self, root_test, node):

View file

@ -178,10 +178,10 @@ function validateRtpStreamStats(statsReport, stats) {
[webrtc-stats]
7.2. RTCCodecStats dictionary
dictionary RTCCodecStats : RTCStats {
unsigned long payloadType;
required unsigned long payloadType;
RTCCodecType codecType;
DOMString transportId;
DOMString mimeType;
required DOMString transportId;
required DOMString mimeType;
unsigned long clockRate;
unsigned long channels;
DOMString sdpFmtpLine;
@ -201,7 +201,7 @@ function validateCodecStats(statsReport, stats) {
validateRtcStats(statsReport, stats);
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');
@ -435,7 +435,6 @@ function validateSentRtpStreamStats(statsReport, stats) {
[webrtc-stats]
7.7. RTCOutboundRtpStreamStats dictionary
dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
DOMString trackId;
DOMString mediaSourceId;
DOMString senderId;
DOMString remoteId;
@ -476,7 +475,10 @@ function validateSentRtpStreamStats(statsReport, stats) {
unsigned long sliCount;
DOMString encoderImplementation;
};
Obsolete members:
partial dictionary RTCOutboundStreamStats {
DOMString trackId;
};
[webrtc-pc]
8.6. Mandatory To Implement Stats
- RTCOutboundRtpStreamStats, with all required attributes from its
@ -485,7 +487,6 @@ function validateSentRtpStreamStats(statsReport, stats) {
function validateOutboundRtpStreamStats(statsReport, stats) {
validateSentRtpStreamStats(statsReport, stats)
validateOptionalIdField(statsReport, stats, 'trackId', 'track');
validateOptionalIdField(statsReport, stats, 'mediaSourceId', 'media-source');
validateIdField(statsReport, stats, 'senderId', 'sender');
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, 'sliCount');
assert_optional_string_field(stats, 'encoderImplementation');
// Obsolete stats
validateOptionalIdField(statsReport, stats, 'trackId', 'track');
}
/*
@ -883,8 +886,8 @@ function validateTransportStats(statsReport, stats) {
[webrtc-stats]
7.15. RTCIceCandidateStats dictionary
dictionary RTCIceCandidateStats : RTCStats {
DOMString transportId;
DOMString address;
required DOMString transportId;
DOMString? address;
long port;
DOMString protocol;
RTCIceCandidateType candidateType;
@ -908,9 +911,16 @@ function validateTransportStats(statsReport, stats) {
function validateIceCandidateStats(statsReport, stats) {
validateRtcStats(statsReport, stats);
validateOptionalIdField(statsReport, stats, 'transportId', 'transport');
assert_string_field(stats, 'address');
validateIdField(statsReport, stats, 'transportId', 'transport');
// The address is mandatory to implement, but is allowed to be null
// 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_string_field(stats, 'protocol');
@ -918,7 +928,10 @@ function validateIceCandidateStats(statsReport, stats) {
['host', 'srflx', 'prflx', 'relay']);
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');
}