mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Update web-platform-tests to revision 59b44d7f1299fd1da23d4bf1f0ffdee3f2b7206c
This commit is contained in:
parent
2560e78f11
commit
71a09c2c01
90 changed files with 988 additions and 480 deletions
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-003.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-005.html]
|
|
||||||
[Miss clipped float]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[elementFromPoint-001.html]
|
||||||
|
[CSSOM View - 5 - extensions to the Document interface]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -56,3 +56,6 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,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
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_1.html]
|
|
||||||
[Multiple history traversals from the same task]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_2.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[cross-origin-objects-on-new-window.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[defaultValue-clobbering.html]
|
||||||
|
expected: TIMEOUT
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[017.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, about:blank]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-003.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-005.html]
|
|
||||||
[Miss clipped float]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
[css-border-radius-002.html]
|
|
||||||
type: reftest
|
|
||||||
expected: FAIL
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[elementFromPoint-001.html]
|
||||||
|
[CSSOM View - 5 - extensions to the Document interface]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -56,3 +56,6 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,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
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_1.html]
|
|
||||||
[Multiple history traversals from the same task]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_2.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[cross-origin-objects-on-new-window.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[defaultValue-clobbering.html]
|
||||||
|
expected: TIMEOUT
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
5
tests/wpt/metadata/webmessaging/with-ports/017.html.ini
Normal file
5
tests/wpt/metadata/webmessaging/with-ports/017.html.ini
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[017.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[origin of the script that invoked the method, about:blank]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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''
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.");
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
|
@ -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>
|
|
|
@ -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 |
35
tests/wpt/web-platform-tests/css/css-content/quotes-034.html
Normal file
35
tests/wpt/web-platform-tests/css/css-content/quotes-034.html
Normal 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>
|
||||||
|
|
|
@ -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">«fr FALLBACK»</p>
|
||||||
|
<p lang="fr">«fr FALLBACK»</p>
|
||||||
|
|
||||||
|
<p lang="en">“en FALLBACK”</p>
|
||||||
|
<p lang="en">“en FALLBACK”</p>
|
||||||
|
|
||||||
|
<p lang="fi">”fi FALLBACK”</p>
|
||||||
|
<p lang="fi">”fi FALLBACK”</p>
|
||||||
|
|
||||||
|
<p lang="de">„de FALLBACK“</p>
|
||||||
|
<p lang="de">„de FALLBACK“</p>
|
||||||
|
|
||||||
|
<p lang="he">"he FALLBACK"</p>
|
||||||
|
<p lang="he">"he FALLBACK"</p>
|
||||||
|
|
||||||
|
<p lang="ja">「ja FALLBACK」</p>
|
||||||
|
<p lang="ja">「ja FALLBACK」</p>
|
||||||
|
|
||||||
|
<p lang="aa">"root FALLBACK"</p>
|
||||||
|
|
||||||
|
<p lang="zz">"root FALLBACK"</p>
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
@ -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();
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script>
|
||||||
|
window.addEventListener('load', () => { window.didLoadFrame = true; });
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
</html>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
@ -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):
|
||||||
|
|
|
@ -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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue