mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Update web-platform-tests to revision e529eb9501876273c9612f5602bc530723a01147
This commit is contained in:
parent
d7d56454b0
commit
4702cbe05c
113 changed files with 2705 additions and 1008 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,2 @@
|
||||||
|
[subpixel-repeat-no-repeat-mix.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,160 @@
|
||||||
|
[font-stretch-interpolation.html]
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0.75) should be [175%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [extra-expanded\] at (0) should be [normal\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [extra-condensed\] to [semi-condensed\] at (0) should be [extra-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (0.3) should be [130%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (1) should be [200%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (-0.25) should be [75%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [ultra-condensed\] to [condensed\] at (0) should be [ultra-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [semi-condensed\] to [semi-expanded\] at (0.5) should be [normal\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (1) should be [200%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (1) should be [expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [ultra-condensed\] to [condensed\] at (1) should be [condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (-0.25) should be [75%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (1) should be [200%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (0) should be [100%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (1.5) should be [250%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (0) should be [100%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [extra-expanded\] at (1) should be [extra-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (0) should be [condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0) should be [normal\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (0.75) should be [semi-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[An interpolation to inherit updates correctly on a parent style change.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (1.5) should be [250%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (1.5) should be [250%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [semi-condensed\] to [semi-expanded\] at (0) should be [semi-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (0.5) should be [normal\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [extra-expanded\] at (0.5) should be [expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (0.3) should be [130%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (0) should be [100%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (1) should be [ultra-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (-2) should be [0%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [extra-condensed\] to [semi-condensed\] at (1) should be [semi-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (1.5) should be [250%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0.25) should be [expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (1) should be [200%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [ultra-condensed\] to [condensed\] at (0.5) should be [extra-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (-0.25) should be [condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [extra-condensed\] to [semi-condensed\] at (0.5) should be [condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (0.6) should be [160%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (-0.25) should be [75%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (-2) should be [0%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (0.25) should be [semi-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (0.3) should be [130%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (-2) should be [0%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [extra-expanded\] at (0.25) should be [semi-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0.125) should be [semi-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [semi-condensed\] to [semi-expanded\] at (1) should be [semi-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (0.3) should be [130%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0.5) should be [extra-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (-2) should be [0%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (0.6) should be [160%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (0.6) should be [160%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (-0.25) should be [75%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (0.6) should be [160%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -2,6 +2,3 @@
|
||||||
[listeners are called when <iframe> is resized]
|
[listeners are called when <iframe> is resized]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[listeners are called correct number of times]
|
|
||||||
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,18 @@
|
||||||
[<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;charset=gbk text/plain text/html]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/plain */*]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: */* text/html]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,9 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[separate text/javascript error]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -11,9 +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
|
|
||||||
|
|
||||||
[X-Content-Type-Options%3A%20%2Cnosniff]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_1.html]
|
||||||
|
[Multiple history traversals from the same task]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_2.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_3.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[cross-origin-objects-on-new-window.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -14,3 +14,6 @@
|
||||||
[Host element with delegatesFocus should support autofocus]
|
[Host element with delegatesFocus should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Non-HTMLElement should not support autofocus]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_escaping-1.html]
|
[iframe_sandbox_popups_escaping-1.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,5 @@
|
||||||
[iframe_sandbox_popups_escaping-2.html]
|
[iframe_sandbox_popups_escaping-2.html]
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_escaping-3.html]
|
[iframe_sandbox_popups_escaping-3.html]
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[iframe_sandbox_popups_nonescaping-1.html]
|
[iframe_sandbox_popups_nonescaping-1.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_nonescaping-3.html]
|
[iframe_sandbox_popups_nonescaping-3.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: FAIL
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[form-double-submit-multiple-targets.html]
|
||||||
|
expected: ERROR
|
||||||
|
[Verifies that one form used to target multiple frames in succession navigates all of them.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[reset-algorithm-rendering.html]
|
||||||
|
expected: TIMEOUT
|
|
@ -8,3 +8,6 @@
|
||||||
[Check that rel=noopener with target=_top does a normal load]
|
[Check that rel=noopener with target=_top does a normal load]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Check that rel=noopener with target=_self does a normal load]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,3 @@
|
||||||
[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,9 +1,10 @@
|
||||||
[promise-job-entry.html]
|
[promise-job-entry.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Fulfillment handler on fulfilled promise]
|
[Fulfillment handler on fulfilled promise]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Rejection handler on pending-then-rejected promise]
|
[Rejection handler on pending-then-rejected promise]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Sanity check: this all works as expected with no promises involved]
|
[Sanity check: this all works as expected with no promises involved]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
@ -15,5 +16,5 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Fulfillment handler on pending-then-fulfilled promise]
|
[Fulfillment handler on pending-then-fulfilled promise]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[003.html]
|
||||||
|
expected: ERROR
|
||||||
|
[shared]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -481,6 +481,22 @@
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"nodes": {
|
||||||
|
"DOMImplementation-createDocument-with-null-browsing-context-crash.html": [
|
||||||
|
"c9393d0a095b00efc71b4030ea2cfcecaa94d805",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"DOMImplementation-createHTMLDocument-with-null-browsing-context-crash.html": [
|
||||||
|
"d0cd6f1f74b22aa0785922769030094f1bcd8ec2",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
"svg-insert-crash.html": [
|
"svg-insert-crash.html": [
|
||||||
"539fb1fae7057a2d331d6c5f8e4a07efab6bc98a",
|
"539fb1fae7057a2d331d6c5f8e4a07efab6bc98a",
|
||||||
[
|
[
|
||||||
|
@ -122846,6 +122862,19 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"subpixel-repeat-no-repeat-mix.html": [
|
||||||
|
"1828b974877c2dc780388f044126d0499cc5f9fb",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/css/css-backgrounds/reference/subpixel-repeat-no-repeat-mix-ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"table-cell-background-local.html": [
|
"table-cell-background-local.html": [
|
||||||
"e52aa26ef209dccb54f0362ca4a30964904ce7b0",
|
"e52aa26ef209dccb54f0362ca4a30964904ce7b0",
|
||||||
[
|
[
|
||||||
|
@ -143633,7 +143662,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"grid-items-sizing-alignment-001.html": [
|
"grid-items-sizing-alignment-001.html": [
|
||||||
"3f5aa32e81e1489533b336eb9d08f6047eb6dd02",
|
"033d292ce61026251ada1812d195412e5d0f5672",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
[
|
[
|
||||||
|
@ -144965,7 +144994,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"grid-as-flex-item-should-not-shrink-to-fit-001.html": [
|
"grid-as-flex-item-should-not-shrink-to-fit-001.html": [
|
||||||
"439cb2d665d28c6f6d3100c52d3688013c9267b8",
|
"e0665d56a1a55ecd41a9ae384e822c8662740d39",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
[
|
[
|
||||||
|
@ -144978,7 +145007,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"grid-as-flex-item-should-not-shrink-to-fit-002.html": [
|
"grid-as-flex-item-should-not-shrink-to-fit-002.html": [
|
||||||
"a8ddc06aec7de434f8e15a59dac10c8b121b8f7e",
|
"4ddafecb849aae77d6637939bd52b958392d44ab",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
[
|
[
|
||||||
|
@ -144991,7 +145020,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"grid-as-flex-item-should-not-shrink-to-fit-003.html": [
|
"grid-as-flex-item-should-not-shrink-to-fit-003.html": [
|
||||||
"2a3da508f3fb311f37d75420d2f6b7f941cecfa6",
|
"73d204490ac82ec1a8ef32adb0c1480e534260dc",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
[
|
[
|
||||||
|
@ -145004,7 +145033,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"grid-as-flex-item-should-not-shrink-to-fit-004.html": [
|
"grid-as-flex-item-should-not-shrink-to-fit-004.html": [
|
||||||
"70fc92c1d0d28d26c8bcf3b8f927c2a0c2c88aa3",
|
"c3f9d9c0d161e1dc6ff0b8d7dc19638e0c28fd15",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
[
|
[
|
||||||
|
@ -145017,7 +145046,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"grid-as-flex-item-should-not-shrink-to-fit-005.html": [
|
"grid-as-flex-item-should-not-shrink-to-fit-005.html": [
|
||||||
"4ca1525dcc8a1ae33af375a59660330f593133cb",
|
"4443314950835c4586f2edd805b47a4074f36c7b",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
[
|
[
|
||||||
|
@ -145030,7 +145059,33 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"grid-as-flex-item-should-not-shrink-to-fit-006.html": [
|
"grid-as-flex-item-should-not-shrink-to-fit-006.html": [
|
||||||
"43051f9ac3d94d21e944c6e18df3c1dbf0b2f110",
|
"7be46cd3b682af613dd9bd0a1daf4a293ba80619",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/css/reference/ref-filled-green-100px-square.xht",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"grid-as-flex-item-should-not-shrink-to-fit-007.html": [
|
||||||
|
"ab0e591b8fc39a9b08018effb488a34b324fcafa",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/css/reference/ref-filled-green-100px-square.xht",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"grid-as-flex-item-should-not-shrink-to-fit-008.html": [
|
||||||
|
"183a607f53a99b3172cc844828684043bd5555de",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
[
|
[
|
||||||
|
@ -233955,6 +234010,21 @@
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"the-select-element": {
|
||||||
|
"reset-algorithm-rendering.html": [
|
||||||
|
"67da173ff2eb0d90c063294db486eaa34ea8878a",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/html/semantics/forms/the-select-element/reset-algorithm-rendering-ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
"the-textarea-element": {
|
"the-textarea-element": {
|
||||||
"multiline-placeholder-cr.html": [
|
"multiline-placeholder-cr.html": [
|
||||||
"08d0982ba53ac4e21a419c2aacc8540e890418e7",
|
"08d0982ba53ac4e21a419c2aacc8540e890418e7",
|
||||||
|
@ -237451,6 +237521,19 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"layout-changes-on-percentage-based-timeline.html": [
|
||||||
|
"82b67018622c3868f952658e6a0572a744960537",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/scroll-animations/animation-ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"set-current-time-before-play.html": [
|
"set-current-time-before-play.html": [
|
||||||
"194de216d38580ec5f1fc187b99c225ca5c95b6d",
|
"194de216d38580ec5f1fc187b99c225ca5c95b6d",
|
||||||
[
|
[
|
||||||
|
@ -287222,6 +287305,10 @@
|
||||||
"439747a9ff2e21613c7cb5a6cb8fc8cb1311fd1e",
|
"439747a9ff2e21613c7cb5a6cb8fc8cb1311fd1e",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"subpixel-repeat-no-repeat-mix-ref.html": [
|
||||||
|
"d2c2722627e38d7a9ca1b3cbf1eda45e0eef62f7",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"ttwf-reftest-borderRadius-ref.html": [
|
"ttwf-reftest-borderRadius-ref.html": [
|
||||||
"dcb590dfea60d956f7c945519396d2434e21d298",
|
"dcb590dfea60d956f7c945519396d2434e21d298",
|
||||||
[]
|
[]
|
||||||
|
@ -287236,6 +287323,14 @@
|
||||||
"e45bbbe5c5760d905db4bf015b5b7faa27467c7f",
|
"e45bbbe5c5760d905db4bf015b5b7faa27467c7f",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"green-bottom.png": [
|
||||||
|
"edd853b1796f377b5a8b5eb125ed343f61295b0d",
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"green-right.png": [
|
||||||
|
"a6eda0a121822909a888902ed4bee16a0f92fe88",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"green1x50.png": [
|
"green1x50.png": [
|
||||||
"4540a11478baaeaa40bf8797bfa0d0e382d13777",
|
"4540a11478baaeaa40bf8797bfa0d0e382d13777",
|
||||||
[]
|
[]
|
||||||
|
@ -297519,7 +297614,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"grid-items-sizing-alignment-001-ref.html": [
|
"grid-items-sizing-alignment-001-ref.html": [
|
||||||
"859483cf5d19dc53c1b1d047a6a3bfac2ed753e3",
|
"c3eccf48eb29c531f0397502a0d5faf0a8223f76",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"percentage-size-replaced-subitems-001-ref.html": [
|
"percentage-size-replaced-subitems-001-ref.html": [
|
||||||
|
@ -317353,19 +317448,11 @@
|
||||||
"e1387f50deead65859267b376367a5eb2a92482d",
|
"e1387f50deead65859267b376367a5eb2a92482d",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"font-display-document-policy-report-only.tentative.sub.html": [
|
"font-display-document-policy-report-only.tentative.html.headers": [
|
||||||
"e298896b2f51d7780dc0a8b50c636e83d79d2693",
|
|
||||||
[]
|
|
||||||
],
|
|
||||||
"font-display-document-policy-report-only.tentative.sub.html.headers": [
|
|
||||||
"e090edd0da42f4e98c400f84fb42232adbe95ab6",
|
"e090edd0da42f4e98c400f84fb42232adbe95ab6",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"font-display-document-policy-reporting.tentative.sub.html": [
|
"font-display-document-policy-reporting.tentative.html.headers": [
|
||||||
"e298896b2f51d7780dc0a8b50c636e83d79d2693",
|
|
||||||
[]
|
|
||||||
],
|
|
||||||
"font-display-document-policy-reporting.tentative.sub.html.headers": [
|
|
||||||
"84ad7cbf97bcbfd9f56bfeef5bc5928b8819ae4e",
|
"84ad7cbf97bcbfd9f56bfeef5bc5928b8819ae4e",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
|
@ -330906,6 +330993,12 @@
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"the-select-element": {
|
||||||
|
"reset-algorithm-rendering-ref.html": [
|
||||||
|
"acf192d1d55b7da110d04651093e3ebe0cd48214",
|
||||||
|
[]
|
||||||
|
]
|
||||||
|
},
|
||||||
"the-textarea-element": {
|
"the-textarea-element": {
|
||||||
"multiline-placeholder-ref.html": [
|
"multiline-placeholder-ref.html": [
|
||||||
"0234ed64c9ad7155a42b254a5fe35a39535cbff8",
|
"0234ed64c9ad7155a42b254a5fe35a39535cbff8",
|
||||||
|
@ -337005,7 +337098,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"pointerevent_support.js": [
|
"pointerevent_support.js": [
|
||||||
"8dbedf21686c0466578ef21abcfc8b3d80727156",
|
"7f291d7609a10be9756bbafd7a5672f5c215a6a1",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"pointerlock": {
|
"pointerlock": {
|
||||||
|
@ -339513,7 +339606,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"idlharness.js": [
|
"idlharness.js": [
|
||||||
"02233ee0d33de23a5bdfb36db550c751b1c2cabd",
|
"cb66fcaa98c06d4f9b0b8136649c1f7119fe75b7",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"idlharness.js.headers": [
|
"idlharness.js.headers": [
|
||||||
|
@ -344151,7 +344244,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"safari-technology-preview.rb": [
|
"safari-technology-preview.rb": [
|
||||||
"eae03474a49ff7bece32daf482390025c3ce9e2a",
|
"c7d83bab9be5a2e152b0f4d0e81f37a387348f8f",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"system_info.yml": [
|
"system_info.yml": [
|
||||||
|
@ -344736,7 +344829,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"requirements.txt": [
|
"requirements.txt": [
|
||||||
"165260c78f7ac8579bd911bcf9cce63645c80e45",
|
"c66414cb7512860211049fc85feae6dac458e517",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"serve.py": [
|
"serve.py": [
|
||||||
|
@ -344867,7 +344960,7 @@
|
||||||
".github": {
|
".github": {
|
||||||
"workflows": {
|
"workflows": {
|
||||||
"tests.yml": [
|
"tests.yml": [
|
||||||
"d19b21d74588e0b517d6e97e47c6aec6faef06a7",
|
"c244de93569b7784005641a658171d9c7aa526a9",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -344885,7 +344978,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"README.rst": [
|
"README.rst": [
|
||||||
"2322042c24dd266dea1b7284364e9a5cceb66a7e",
|
"20d502a7700ba79d57b4267991241781dd9a7469",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"docs": {
|
"docs": {
|
||||||
|
@ -344923,10 +345016,22 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"examples": {
|
"examples": {
|
||||||
|
"README.rst": [
|
||||||
|
"5d4af57d5144af13e42d797ba309f974c635758b",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"demo.py": [
|
"demo.py": [
|
||||||
"fd4f9752f14c797f429277379d076dd56ace9203",
|
"fd4f9752f14c797f429277379d076dd56ace9203",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"doq_client.py": [
|
||||||
|
"06c1a44f028cb59692c940719517f13dcb4f10a3",
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"doq_server.py": [
|
||||||
|
"f3347fe6c18963e0596a8688a5ec6eba284d0256",
|
||||||
|
[]
|
||||||
|
],
|
||||||
"htdocs": {
|
"htdocs": {
|
||||||
"robots.txt": [
|
"robots.txt": [
|
||||||
"51aa0bdeaace6372a7eb13010fd1666c65546864",
|
"51aa0bdeaace6372a7eb13010fd1666c65546864",
|
||||||
|
@ -344975,12 +345080,12 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build-openssl": [
|
"fetch-vendor": [
|
||||||
"94ded72c1724bb00432328c5e229ba73762c5e40",
|
"a06d62371478d427c95f5225db4300f7a1a85822",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"build-openssl.bat": [
|
"fetch-vendor.json": [
|
||||||
"610079ddf8320f754bd9422157e6543946d600e5",
|
"f280235beb03848a3486aa97b1c39f46f9b927cf",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -345015,7 +345120,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"about.py": [
|
"about.py": [
|
||||||
"82cd8f33d65dcbf2397d12c83c651cc899e91556",
|
"98eed8d6bcc3eb357a7b00ac546942d51cc3df64",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"asyncio": {
|
"asyncio": {
|
||||||
|
@ -345086,7 +345191,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"connection.py": [
|
"connection.py": [
|
||||||
"461df4fc1916fda3efb461e66734ec359ae0c327",
|
"0e1372cc08ba03dcb473d02ad349dcb9b34d0991",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"crypto.py": [
|
"crypto.py": [
|
||||||
|
@ -345127,7 +345232,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"tls.py": [
|
"tls.py": [
|
||||||
"30b69ff2d3227416e715dfe18b80269e0b1c259b",
|
"94b10cbba5d90eb2cfe9e2ba316a437fd7784f46",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -345182,7 +345287,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"test_connection.py": [
|
"test_connection.py": [
|
||||||
"af1a5cdc58f59c6e998b0d3949aa74f77d2175d8",
|
"427e1c045749f6f8fe1c351800a42d9c82ad8677",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"test_crypto.py": [
|
"test_crypto.py": [
|
||||||
|
@ -345226,7 +345331,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"test_tls.py": [
|
"test_tls.py": [
|
||||||
"72dd56deb8baeac96fcd1a3fe0bb5f9435d7c0c2",
|
"be8a470f74b1ce4f994583ae837ed0ad94837b4c",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"tls_certificate.bin": [
|
"tls_certificate.bin": [
|
||||||
|
@ -353381,7 +353486,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"RTCPeerConnection-helper.js": [
|
"RTCPeerConnection-helper.js": [
|
||||||
"b7ed92a9cd28d88761b71ac476393cafdcbc2130",
|
"531a8a7f4ff9c1ec624d284a4c48f6d776713215",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"RTCRtpCapabilities-helper.js": [
|
"RTCRtpCapabilities-helper.js": [
|
||||||
|
@ -385481,6 +385586,13 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"font-stretch-interpolation.html": [
|
||||||
|
"f8ab6fc4a8b0650c03a2e5206504fe55fbe180ff",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"font-variation-settings-composition.html": [
|
"font-variation-settings-composition.html": [
|
||||||
"58f037415e23801fb2c540e5ae3b032cdd4ff0c8",
|
"58f037415e23801fb2c540e5ae3b032cdd4ff0c8",
|
||||||
[
|
[
|
||||||
|
@ -394276,6 +394388,15 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"contain-intrinsic-size": {
|
"contain-intrinsic-size": {
|
||||||
|
"animation": {
|
||||||
|
"contain-intrinsic-size-interpolation.html": [
|
||||||
|
"b739f3104f679f7ba168b2c775300b633724d5f5",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
"parsing": {
|
"parsing": {
|
||||||
"contain-intrinsic-size-computed.html": [
|
"contain-intrinsic-size-computed.html": [
|
||||||
"68ec4fce76916aab977fc95eb5e07b56d6daccc8",
|
"68ec4fce76916aab977fc95eb5e07b56d6daccc8",
|
||||||
|
@ -406699,14 +406820,14 @@
|
||||||
},
|
},
|
||||||
"font-display": {
|
"font-display": {
|
||||||
"font-display-document-policy-report-only.tentative.html": [
|
"font-display-document-policy-report-only.tentative.html": [
|
||||||
"6111ac5df2152c00b316dc7b7fc5920c203333da",
|
"03fa5b68a3ef8a587a72fba5b37fd5145307e1b0",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"font-display-document-policy-reporting.tentative.html": [
|
"font-display-document-policy-reporting.tentative.html": [
|
||||||
"7ee534e78d11acbae5ca2402b13b0f746791c4d7",
|
"db871d19f7e9f73419aabadb44e978579678990c",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -426673,8 +426794,15 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"response-clone-iframe.window.js": [
|
||||||
|
"da54616c376d9105b024d668846ea5dc1c1cb143",
|
||||||
|
[
|
||||||
|
"fetch/api/response/response-clone-iframe.window.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"response-clone.html": [
|
"response-clone.html": [
|
||||||
"f5ebd7940e1eab290acac9e118c827e9b210ad71",
|
"622514168476f5e297ff3901aba2dfa5a633dfd9",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
|
@ -449903,7 +450031,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"user-interaction-editing-contenteditable.html": [
|
"user-interaction-editing-contenteditable.html": [
|
||||||
"9ef867b2d3f6f41d2b75fb48c4569d13eade214d",
|
"0a12b8c4f51f5c6a3935ed02f8173ea9c45453df",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -457004,6 +457132,13 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"form-double-submit-multiple-targets.html": [
|
||||||
|
"2b5a589b534524fe729c20e5ec2f4092c95a4e0a",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"form-double-submit-to-different-origin-frame.html": [
|
"form-double-submit-to-different-origin-frame.html": [
|
||||||
"17ad1b1899bcc207e9de66a8b08f9341e9f489d1",
|
"17ad1b1899bcc207e9de66a8b08f9341e9f489d1",
|
||||||
[
|
[
|
||||||
|
@ -457055,6 +457190,13 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"jsurl-navigation-then-form-submit.html": [
|
||||||
|
"93a4ea6004a49175a195e2a7844daeed26c70687",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"reparent-form-during-planned-navigation-task.html": [
|
"reparent-form-during-planned-navigation-task.html": [
|
||||||
"6b50bf599b888b1c3273a4e311ba6af69d67e86b",
|
"6b50bf599b888b1c3273a4e311ba6af69d67e86b",
|
||||||
[
|
[
|
||||||
|
@ -476834,6 +476976,15 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"pointerevent_mouseevent_key_pressed.html": [
|
||||||
|
"ea45adee8204c2b4a0563d95a4f54f2338572c9b",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"testdriver": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"pointerevent_touch-action-verification.html": [
|
"pointerevent_touch-action-verification.html": [
|
||||||
"311d24b628e4a7897649205da157683e130dc23a",
|
"311d24b628e4a7897649205da157683e130dc23a",
|
||||||
[
|
[
|
||||||
|
@ -514231,7 +514382,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCDataChannel-bufferedAmount.html": [
|
"RTCDataChannel-bufferedAmount.html": [
|
||||||
"89f6b1b4d7a425f2d05688d14315227454a3d4be",
|
"f663941162d93e511b1a5d6be01ed79fe28c9bbf",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
|
@ -514240,7 +514391,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCDataChannel-close.html": [
|
"RTCDataChannel-close.html": [
|
||||||
"ea7795719c21e2aa6cfa48435f8d62b7d8c842c0",
|
"00b081b2e2fd8cb8bcad2c88fa88746e717d3d26",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
|
@ -514256,14 +514407,14 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCDataChannel-send-blob-order.html": [
|
"RTCDataChannel-send-blob-order.html": [
|
||||||
"f5cdb45e04c9fba648f8b2b92bcd839d43ed41d4",
|
"3fcf116bc8d05036bc07136ad72b3430b4852497",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCDataChannel-send.html": [
|
"RTCDataChannel-send.html": [
|
||||||
"3a4c0f56d656fc88485a90467adfd2c56a9a142a",
|
"1952921fbf26f2c6e9546000a1e9843b440824e8",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
|
@ -514323,7 +514474,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCIceTransport.html": [
|
"RTCIceTransport.html": [
|
||||||
"94dc1c461fb5b2074b4975612251a7814af045e5",
|
"fe12c384e5e5b3f8ab2e2b96b740d91959d16d94",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -514393,7 +514544,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"RTCPeerConnection-createDataChannel.html": [
|
"RTCPeerConnection-createDataChannel.html": [
|
||||||
"dd34561fbc6658d6fb6a146254acd8f36ced210a",
|
"3d2169dffac65ffbc81355b33c4c904bf5e3f067",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -519665,6 +519816,69 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
"constructor.any.js": [
|
||||||
|
"393cefd5d30237141096b2b6d919396047fe545c",
|
||||||
|
[
|
||||||
|
"webtransport/quic/constructor.any.html",
|
||||||
|
{
|
||||||
|
"script_metadata": [
|
||||||
|
[
|
||||||
|
"global",
|
||||||
|
"window,worker"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"script",
|
||||||
|
"/common/get-host-info.sub.js"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"webtransport/quic/constructor.any.serviceworker.html",
|
||||||
|
{
|
||||||
|
"script_metadata": [
|
||||||
|
[
|
||||||
|
"global",
|
||||||
|
"window,worker"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"script",
|
||||||
|
"/common/get-host-info.sub.js"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"webtransport/quic/constructor.any.sharedworker.html",
|
||||||
|
{
|
||||||
|
"script_metadata": [
|
||||||
|
[
|
||||||
|
"global",
|
||||||
|
"window,worker"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"script",
|
||||||
|
"/common/get-host-info.sub.js"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"webtransport/quic/constructor.any.worker.html",
|
||||||
|
{
|
||||||
|
"script_metadata": [
|
||||||
|
[
|
||||||
|
"global",
|
||||||
|
"window,worker"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"script",
|
||||||
|
"/common/get-host-info.sub.js"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -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,2 @@
|
||||||
|
[subpixel-repeat-no-repeat-mix.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,160 @@
|
||||||
|
[font-stretch-interpolation.html]
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0.75) should be [175%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [extra-expanded\] at (0) should be [normal\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [extra-condensed\] to [semi-condensed\] at (0) should be [extra-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (0.3) should be [130%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (1) should be [200%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (-0.25) should be [75%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [ultra-condensed\] to [condensed\] at (0) should be [ultra-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [semi-condensed\] to [semi-expanded\] at (0.5) should be [normal\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (1) should be [200%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (1) should be [expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [ultra-condensed\] to [condensed\] at (1) should be [condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (-0.25) should be [75%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (1) should be [200%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (0) should be [100%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (1.5) should be [250%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (0) should be [100%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [extra-expanded\] at (1) should be [extra-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (0) should be [condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0) should be [normal\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (0.75) should be [semi-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[An interpolation to inherit updates correctly on a parent style change.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (1.5) should be [250%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (1.5) should be [250%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [semi-condensed\] to [semi-expanded\] at (0) should be [semi-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (0.5) should be [normal\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [extra-expanded\] at (0.5) should be [expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (0.3) should be [130%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (0) should be [100%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (1) should be [ultra-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (-2) should be [0%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [extra-condensed\] to [semi-condensed\] at (1) should be [semi-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (1.5) should be [250%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0.25) should be [expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (1) should be [200%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [ultra-condensed\] to [condensed\] at (0.5) should be [extra-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (-0.25) should be [condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [extra-condensed\] to [semi-condensed\] at (0.5) should be [condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (0.6) should be [160%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (-0.25) should be [75%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (-2) should be [0%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [condensed\] to [expanded\] at (0.25) should be [semi-condensed\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (0.3) should be [130%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (-2) should be [0%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [extra-expanded\] at (0.25) should be [semi-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0.125) should be [semi-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [semi-condensed\] to [semi-expanded\] at (1) should be [semi-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (0.3) should be [130%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [normal\] to [ultra-expanded\] at (0.5) should be [extra-expanded\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [100%\] to [200%\] at (-2) should be [0%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (0.6) should be [160%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <font-stretch> from [initial\] to [inherit\] at (0.6) should be [160%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from [initial\] to [inherit\] at (-0.25) should be [75%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <font-stretch> from neutral to [200%\] at (0.6) should be [160%\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -2,6 +2,3 @@
|
||||||
[listeners are called when <iframe> is resized]
|
[listeners are called when <iframe> is resized]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[listeners are called correct number of times]
|
|
||||||
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,18 @@
|
||||||
[<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;charset=gbk text/plain text/html]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/plain */*]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: */* text/html]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: separate response Content-Type: text/html */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,9 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[separate text/javascript error]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -11,9 +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
|
|
||||||
|
|
||||||
[X-Content-Type-Options%3A%20%2Cnosniff]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_1.html]
|
||||||
|
[Multiple history traversals from the same task]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_2.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_3.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[cross-origin-objects-on-new-window.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -14,3 +14,6 @@
|
||||||
[Host element with delegatesFocus should support autofocus]
|
[Host element with delegatesFocus should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Non-HTMLElement should not support autofocus]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iframe_sandbox_popups_escaping-1.html]
|
[iframe_sandbox_popups_escaping-1.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
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,5 @@
|
||||||
[iframe_sandbox_popups_escaping-2.html]
|
[iframe_sandbox_popups_escaping-2.html]
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iframe_sandbox_popups_escaping-3.html]
|
[iframe_sandbox_popups_escaping-3.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
[iframe_sandbox_popups_nonescaping-1.html]
|
[iframe_sandbox_popups_nonescaping-1.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: TIMEOUT
|
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iframe_sandbox_popups_nonescaping-3.html]
|
[iframe_sandbox_popups_nonescaping-3.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: FAIL
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[form-double-submit-3.html]
|
|
||||||
[<button> should have the same double-submit protection as <input type=submit>]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[form-double-submit-multiple-targets.html]
|
||||||
|
expected: ERROR
|
||||||
|
[Verifies that one form used to target multiple frames in succession navigates all of them.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[reset-algorithm-rendering.html]
|
||||||
|
expected: TIMEOUT
|
|
@ -12,3 +12,6 @@
|
||||||
[Check that rel=noopener with target=_top does a normal load]
|
[Check that rel=noopener with target=_top does a normal load]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Check that rel=noopener with target=_self does a normal load]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,3 @@
|
||||||
[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,9 +1,10 @@
|
||||||
[promise-job-entry.html]
|
[promise-job-entry.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Fulfillment handler on fulfilled promise]
|
[Fulfillment handler on fulfilled promise]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Rejection handler on pending-then-rejected promise]
|
[Rejection handler on pending-then-rejected promise]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Sanity check: this all works as expected with no promises involved]
|
[Sanity check: this all works as expected with no promises involved]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
@ -15,5 +16,5 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Fulfillment handler on pending-then-fulfilled promise]
|
[Fulfillment handler on pending-then-fulfilled promise]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
[003.html]
|
[003.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: ERROR
|
||||||
[shared]
|
[shared]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CSS Background Test: Mixing background-repeat: repeat and no-repeat, subpixel sizes, Reference</title>
|
||||||
|
<link rel="author" title="schenney" href="mailto:schenney@chromium.org">
|
||||||
|
<style>
|
||||||
|
div.x {
|
||||||
|
position: absolute;
|
||||||
|
left: 20px;
|
||||||
|
top: 10px;
|
||||||
|
width: 117px;
|
||||||
|
height: 10px;
|
||||||
|
background-image: url("../resources/green-right.png");
|
||||||
|
background-position-x: right;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-size: 117px 1px;
|
||||||
|
}
|
||||||
|
div.y {
|
||||||
|
position: absolute;
|
||||||
|
left: 10px;
|
||||||
|
top: 20px;
|
||||||
|
width: 10px;
|
||||||
|
height: 117px;
|
||||||
|
background-image: url("../resources/green-bottom.png");
|
||||||
|
background-position-y: bottom;
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
background-size: 1px 117px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="y"></div>
|
||||||
|
<div class="x"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Binary file not shown.
After Width: | Height: | Size: 103 B |
Binary file not shown.
After Width: | Height: | Size: 98 B |
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CSS Background Test: Mixing background-repeat: repeat and no-repeat, subpixel sizes</title>
|
||||||
|
<link rel="author" title="schenney" href="mailto:schenney@chromium.org">
|
||||||
|
<link rel="help" href="http://www.w3.org/TR/css3-background/#the-background-size">
|
||||||
|
<link rel="match" href="reference/subpixel-repeat-no-repeat-mix-ref.html">
|
||||||
|
<style>
|
||||||
|
div.x {
|
||||||
|
position: absolute;
|
||||||
|
left: 20px;
|
||||||
|
top: 10px;
|
||||||
|
width: 116.8px;
|
||||||
|
height: 10px;
|
||||||
|
background-image: url("resources/green-right.png");
|
||||||
|
background-position-x: right;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-size: 116.8px 0.8px;
|
||||||
|
}
|
||||||
|
div.y {
|
||||||
|
position: absolute;
|
||||||
|
left: 10px;
|
||||||
|
top: 20px;
|
||||||
|
width: 10px;
|
||||||
|
height: 116.8px;
|
||||||
|
background-image: url("resources/green-bottom.png");
|
||||||
|
background-position-y: bottom;
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
background-size: 0.8px 116.8px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="y"></div>
|
||||||
|
<div class="x"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,164 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>font-size interpolation</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#propdef-font-size">
|
||||||
|
<meta name="assert" content="font-size supports animation as length">
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/interpolation-testcommon.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
font-stretch: ultra-expanded;
|
||||||
|
}
|
||||||
|
.container2 {
|
||||||
|
font-stretch: ultra-condensed;
|
||||||
|
}
|
||||||
|
.target {
|
||||||
|
display: inline-block;
|
||||||
|
font: 100px sans-serif;
|
||||||
|
font-stretch: normal;
|
||||||
|
}
|
||||||
|
.expected {
|
||||||
|
color: green;
|
||||||
|
margin-right: 30px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<template id="target-template">
|
||||||
|
<span class="container">
|
||||||
|
<div class="target">TT</div>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<span id="inv-container" class="container">
|
||||||
|
<div id="inv-target" class="target">TT</div>
|
||||||
|
</span>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: '100%',
|
||||||
|
to: '200%'
|
||||||
|
}, [
|
||||||
|
{at: -2, expect: '0%'}, // CSS font-stretch can't be negative.
|
||||||
|
{at: -0.25, expect: '75%'},
|
||||||
|
{at: 0, expect: '100%'},
|
||||||
|
{at: 0.3, expect: '130%'},
|
||||||
|
{at: 0.6, expect: '160%'},
|
||||||
|
{at: 1, expect: '200%'},
|
||||||
|
{at: 1.5, expect: '250%'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: '200%'
|
||||||
|
}, [
|
||||||
|
{at: -2, expect: '0%'},
|
||||||
|
{at: -0.25, expect: '75%'},
|
||||||
|
{at: 0, expect: '100%'},
|
||||||
|
{at: 0.3, expect: '130%'},
|
||||||
|
{at: 0.6, expect: '160%'},
|
||||||
|
{at: 1, expect: '200%'},
|
||||||
|
{at: 1.5, expect: '250%'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: 'initial',
|
||||||
|
to: 'inherit'
|
||||||
|
}, [
|
||||||
|
{at: -2, expect: '0%'},
|
||||||
|
{at: -0.25, expect: '75%'},
|
||||||
|
{at: 0, expect: '100%'},
|
||||||
|
{at: 0.3, expect: '130%'},
|
||||||
|
{at: 0.6, expect: '160%'},
|
||||||
|
{at: 1, expect: '200%'},
|
||||||
|
{at: 1.5, expect: '250%'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Test interpolation from keywords.
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: 'normal',
|
||||||
|
to: 'ultra-expanded'
|
||||||
|
}, [
|
||||||
|
{at: -0.25, expect: 'condensed'},
|
||||||
|
{at: 0, expect: 'normal'},
|
||||||
|
{at: 0.125, expect: 'semi-expanded'},
|
||||||
|
{at: 0.25, expect: 'expanded'},
|
||||||
|
{at: 0.5, expect: 'extra-expanded'},
|
||||||
|
{at: 0.75, expect: '175%'},
|
||||||
|
{at: 1, expect: 'ultra-expanded'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: 'ultra-condensed',
|
||||||
|
to: 'condensed'
|
||||||
|
}, [
|
||||||
|
{at: 0, expect: 'ultra-condensed'},
|
||||||
|
{at: 0.5, expect: 'extra-condensed'},
|
||||||
|
{at: 1, expect: 'condensed'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: 'extra-condensed',
|
||||||
|
to: 'semi-condensed'
|
||||||
|
}, [
|
||||||
|
{at: 0, expect: 'extra-condensed'},
|
||||||
|
{at: 0.5, expect: 'condensed'},
|
||||||
|
{at: 1, expect: 'semi-condensed'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: 'condensed',
|
||||||
|
to: 'expanded'
|
||||||
|
}, [
|
||||||
|
{at: 0, expect: 'condensed'},
|
||||||
|
{at: 0.25, expect: 'semi-condensed'},
|
||||||
|
{at: 0.5, expect: 'normal'},
|
||||||
|
{at: 0.75, expect: 'semi-expanded'},
|
||||||
|
{at: 1, expect: 'expanded'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: 'semi-condensed',
|
||||||
|
to: 'semi-expanded'
|
||||||
|
}, [
|
||||||
|
{at: 0, expect: 'semi-condensed'},
|
||||||
|
{at: 0.5, expect: 'normal'},
|
||||||
|
{at: 1, expect: 'semi-expanded'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'font-stretch',
|
||||||
|
from: 'normal',
|
||||||
|
to: 'extra-expanded'
|
||||||
|
}, [
|
||||||
|
{at: 0, expect: 'normal'},
|
||||||
|
{at: 0.25, expect: 'semi-expanded'},
|
||||||
|
{at: 0.5, expect: 'expanded'},
|
||||||
|
{at: 1, expect: 'extra-expanded'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
test(t => {
|
||||||
|
var container = document.getElementById('inv-container');
|
||||||
|
var target = document.getElementById('inv-target');
|
||||||
|
var anim = target.animate({fontStretch: ['normal', 'inherit']}, 1000);
|
||||||
|
anim.pause();
|
||||||
|
anim.currentTime = 500;
|
||||||
|
assert_equals(getComputedStyle(target).fontStretch, '150%');
|
||||||
|
|
||||||
|
container.setAttribute('class', 'container2');
|
||||||
|
assert_equals(getComputedStyle(target).fontStretch, '75%');
|
||||||
|
}, "An interpolation to inherit updates correctly on a parent style change.");
|
||||||
|
|
||||||
|
</script>
|
|
@ -2,6 +2,11 @@
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS Reftest Reference: Grid Item Sizing</title>
|
<title>CSS Reftest Reference: Grid Item Sizing</title>
|
||||||
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
|
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
|
||||||
|
<style>
|
||||||
|
button {
|
||||||
|
margin: 0; /* Prevent WebKit from adding some margin */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<p>Test passes if it has the same output than the reference.</p>
|
<p>Test passes if it has the same output than the reference.</p>
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
grid-auto-rows: 200px;
|
grid-auto-rows: 200px;
|
||||||
grid-template-columns: repeat(3, 200px);
|
grid-template-columns: repeat(3, 200px);
|
||||||
}
|
}
|
||||||
|
button {
|
||||||
|
margin: 0; /* Prevent WebKit from adding some margin */
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<p>Test passes if it has the same output than the reference.</p>
|
<p>Test passes if it has the same output than the reference.</p>
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
||||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||||
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
||||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
|
||||||
<style>
|
<style>
|
||||||
body { overflow: hidden; }
|
body { overflow: hidden; }
|
||||||
.flexbox {
|
.flexbox {
|
||||||
|
@ -20,13 +19,11 @@
|
||||||
align-content: flex-start;
|
align-content: flex-start;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
font: 25px/1 Ahem;
|
background: red;
|
||||||
color: green;
|
|
||||||
}
|
}
|
||||||
.grid {
|
.grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
background: red;
|
|
||||||
}
|
}
|
||||||
.gridItem {
|
.gridItem {
|
||||||
background: green;
|
background: green;
|
||||||
|
@ -36,6 +33,6 @@
|
||||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
<div class="flexbox">
|
<div class="flexbox">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="gridItem">XX</div>
|
<div class="gridItem"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,8 +10,7 @@
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
||||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||||
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), so that its grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
|
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), as well as its grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
|
||||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
|
||||||
<style>
|
<style>
|
||||||
body { overflow: hidden; }
|
body { overflow: hidden; }
|
||||||
.flexbox {
|
.flexbox {
|
||||||
|
@ -20,13 +19,11 @@
|
||||||
align-content: stretch;
|
align-content: stretch;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
font: 25px/1 Ahem;
|
background: red;
|
||||||
color: green;
|
|
||||||
}
|
}
|
||||||
.grid {
|
.grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
background: red;
|
|
||||||
}
|
}
|
||||||
.gridItem {
|
.gridItem {
|
||||||
background: green;
|
background: green;
|
||||||
|
@ -36,6 +33,6 @@
|
||||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
<div class="flexbox">
|
<div class="flexbox">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="gridItem">XX</div>
|
<div class="gridItem"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,8 +10,7 @@
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
||||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||||
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The vertical grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
||||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
|
||||||
<style>
|
<style>
|
||||||
body { overflow: hidden; }
|
body { overflow: hidden; }
|
||||||
.flexbox {
|
.flexbox {
|
||||||
|
@ -20,13 +19,11 @@
|
||||||
align-content: flex-start;
|
align-content: flex-start;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
font: 25px/1 Ahem;
|
background: red;
|
||||||
color: green;
|
|
||||||
}
|
}
|
||||||
.grid {
|
.grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
background: red;
|
|
||||||
}
|
}
|
||||||
.gridItem {
|
.gridItem {
|
||||||
background: green;
|
background: green;
|
||||||
|
@ -37,6 +34,6 @@
|
||||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
<div class="flexbox">
|
<div class="flexbox">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="gridItem">XX</div>
|
<div class="gridItem"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,8 +10,7 @@
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
||||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||||
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), so that its grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
|
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), as well as its vertical grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
|
||||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
|
||||||
<style>
|
<style>
|
||||||
body { overflow: hidden; }
|
body { overflow: hidden; }
|
||||||
.flexbox {
|
.flexbox {
|
||||||
|
@ -20,12 +19,10 @@
|
||||||
align-content: stretch;
|
align-content: stretch;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
font: 25px/1 Ahem;
|
background: red;
|
||||||
color: green;
|
|
||||||
}
|
}
|
||||||
.grid {
|
.grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
background: red;
|
|
||||||
}
|
}
|
||||||
.gridItem {
|
.gridItem {
|
||||||
background: green;
|
background: green;
|
||||||
|
@ -36,6 +33,6 @@
|
||||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
<div class="flexbox">
|
<div class="flexbox">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="gridItem">XX</div>
|
<div class="gridItem"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
||||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||||
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
||||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
|
||||||
<style>
|
<style>
|
||||||
body { overflow: hidden; }
|
body { overflow: hidden; }
|
||||||
.flexbox {
|
.flexbox {
|
||||||
|
@ -20,13 +19,11 @@
|
||||||
align-content: flex-start;
|
align-content: flex-start;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
font: 25px/1 Ahem;
|
background: red;
|
||||||
color: green;
|
|
||||||
}
|
}
|
||||||
.grid {
|
.grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
align-items: start;
|
align-items: start;
|
||||||
background: red;
|
|
||||||
}
|
}
|
||||||
.gridItem {
|
.gridItem {
|
||||||
background: green;
|
background: green;
|
||||||
|
@ -36,6 +33,6 @@
|
||||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
<div class="flexbox">
|
<div class="flexbox">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="gridItem">XX</div>
|
<div class="gridItem"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,8 +10,7 @@
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
||||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||||
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), so that its grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
|
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), as well as grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
|
||||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
|
||||||
<style>
|
<style>
|
||||||
body { overflow: hidden; }
|
body { overflow: hidden; }
|
||||||
.flexbox {
|
.flexbox {
|
||||||
|
@ -20,13 +19,11 @@
|
||||||
justify-content: stretch;
|
justify-content: stretch;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
font: 25px/1 Ahem;
|
background: red;
|
||||||
color: green;
|
|
||||||
}
|
}
|
||||||
.grid {
|
.grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
align-items: start;
|
align-items: start;
|
||||||
background: red;
|
|
||||||
}
|
}
|
||||||
.gridItem {
|
.gridItem {
|
||||||
background: green;
|
background: green;
|
||||||
|
@ -36,6 +33,6 @@
|
||||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
<div class="flexbox">
|
<div class="flexbox">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="gridItem">XX</div>
|
<div class="gridItem"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Grid Layout Test: Evaluate the behavior of a grid container as Flexbox item</title>
|
||||||
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-grid/#layout-algorithm">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-lines">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#propdef-flex-wrap">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#propdef-align-content">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#propdef-align-self">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
||||||
|
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||||
|
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's relative block size will be resolved againts the grid's row size, while its inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
||||||
|
<style>
|
||||||
|
body { overflow: hidden; }
|
||||||
|
.flexbox {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column nowrap;
|
||||||
|
align-content: flex-start;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: red;
|
||||||
|
}
|
||||||
|
.grid {
|
||||||
|
display: grid;
|
||||||
|
align-items: baseline;
|
||||||
|
grid-template-rows: 100px;
|
||||||
|
}
|
||||||
|
.gridItem {
|
||||||
|
background: green;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
|
<div class="flexbox">
|
||||||
|
<div class="grid">
|
||||||
|
<div class="gridItem"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Grid Layout Test: Evaluate the behavior of a grid container as Flexbox item</title>
|
||||||
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-grid/#layout-algorithm">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-lines">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#propdef-flex-wrap">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#propdef-align-content">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#propdef-align-self">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
|
||||||
|
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||||
|
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item has a relative inline-size, which should be resolved against the stretched grid's inline-size.">
|
||||||
|
<style>
|
||||||
|
body { overflow: hidden; }
|
||||||
|
.flexbox {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column nowrap;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: red;
|
||||||
|
}
|
||||||
|
.grid {
|
||||||
|
display: grid;
|
||||||
|
justify-self: start;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
.gridItem {
|
||||||
|
background: green;
|
||||||
|
width: 100%;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
|
<div class="flexbox">
|
||||||
|
<div class="grid">
|
||||||
|
<div class="gridItem"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,88 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>contain-intrinsic-size interpolation</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/interpolation-testcommon.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.target {
|
||||||
|
contain: strict;
|
||||||
|
contain-intrinsic-size: 50px 60px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<body></body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// auto doesn't interpolate
|
||||||
|
test_interpolation({
|
||||||
|
property: 'contain-intrinsic-size',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: '20px 10px',
|
||||||
|
}, [
|
||||||
|
{at: -0.3, expect: '59px 75px'},
|
||||||
|
{at: 0, expect: '50px 60px'},
|
||||||
|
{at: 0.3, expect: '41px 45px'},
|
||||||
|
{at: 0.6, expect: '32px 30px'},
|
||||||
|
{at: 1, expect: '20px 10px'},
|
||||||
|
{at: 1.5, expect: '5px 0px'}
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'contain-intrinsic-size',
|
||||||
|
from: 'initial',
|
||||||
|
to: '20px 20px',
|
||||||
|
});
|
||||||
|
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'contain-intrinsic-size',
|
||||||
|
from: 'inherit',
|
||||||
|
to: '20px',
|
||||||
|
});
|
||||||
|
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'contain-intrinsic-size',
|
||||||
|
from: 'unset',
|
||||||
|
to: '20px',
|
||||||
|
});
|
||||||
|
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'contain-intrinsic-size',
|
||||||
|
from: 'auto',
|
||||||
|
to: '20px 20px',
|
||||||
|
});
|
||||||
|
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'contain-intrinsic-size',
|
||||||
|
from: '10px 15px',
|
||||||
|
to: 'auto',
|
||||||
|
});
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'contain-intrinsic-size',
|
||||||
|
from: '0px 0px',
|
||||||
|
to: '10px'
|
||||||
|
}, [
|
||||||
|
{at: -0.3, expect: '0px 0px'}, // contain-intrinsic-size can't be negative.
|
||||||
|
{at: 0, expect: '0px 0px'},
|
||||||
|
{at: 0.3, expect: '3px 3px'},
|
||||||
|
{at: 0.6, expect: '6px 6px'},
|
||||||
|
{at: 1, expect: '10px 10px'},
|
||||||
|
{at: 1.5, expect: '15px 15px'}
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'contain-intrinsic-size',
|
||||||
|
from: '20px 40px',
|
||||||
|
to: '30px 50px'
|
||||||
|
}, [
|
||||||
|
{at: -0.3, expect: '17px 37px'},
|
||||||
|
{at: 0, expect: '20px 40px'},
|
||||||
|
{at: 0.3, expect: '23px 43px'},
|
||||||
|
{at: 0.6, expect: '26px 46px'},
|
||||||
|
{at: 1, expect: '30px 50px'},
|
||||||
|
{at: 1.5, expect: '35px 55px'}
|
||||||
|
]);
|
||||||
|
</script>
|
|
@ -1,17 +1,14 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
<head>
|
||||||
<head>
|
|
||||||
<title>Test for font-display-late-swap feature policy set to report-only</title>
|
<title>Test for font-display-late-swap feature policy set to report-only</title>
|
||||||
<link rel="help"
|
<link rel="help" href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
|
||||||
href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
|
|
||||||
<script src='/resources/testharness.js'></script>
|
<script src='/resources/testharness.js'></script>
|
||||||
<script src='/resources/testharnessreport.js'></script>
|
<script src='/resources/testharnessreport.js'></script>
|
||||||
<style>
|
<style>
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
<body>
|
||||||
<body>
|
|
||||||
<p>
|
<p>
|
||||||
Tests if the correct number of violation reports are generated and each report corresponds to this feature.
|
Tests if the correct number of violation reports are generated and each report corresponds to this feature.
|
||||||
4 reports should be created out of the 6 options below (reports for all except for 'fallback' and 'optional').
|
4 reports should be created out of the 6 options below (reports for all except for 'fallback' and 'optional').
|
||||||
|
@ -27,60 +24,49 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<script>
|
<script>
|
||||||
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
|
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
|
||||||
const table = document.getElementById('container');
|
const table = document.getElementById('container');
|
||||||
const t = async_test('font-display-late-swap Report Format');
|
|
||||||
|
|
||||||
function makeFontFaceDeclaration(family, display) {
|
function makeFontFaceDeclaration(family, display) {
|
||||||
url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over
|
url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over
|
||||||
return `@font-face { font-family: ${family}; src: url("${url}"); font-display: ${display}; }`;
|
return '@font-face { font-family: ' + family + '; src: url("' + url + '"); font-display: ' + display + '; }';
|
||||||
}
|
}
|
||||||
|
|
||||||
window.onload = () => {
|
window.onload = () => {
|
||||||
let tr = document.createElement('tr');
|
let tr = document.createElement('tr');
|
||||||
for (let display of fontDisplayValues) {
|
for (let display of fontDisplayValues) {
|
||||||
const family = display + '-face';
|
const family = display + '-face';
|
||||||
const rule = makeFontFaceDeclaration(family, display);
|
const rule = makeFontFaceDeclaration(family, display);
|
||||||
|
document.styleSheets[0].insertRule(rule, 0);
|
||||||
// Create a separate iframe for testing purpose.
|
|
||||||
// For same document, violation reports with same content might be deduped.
|
|
||||||
let iframe = document.createElement('iframe');
|
|
||||||
iframe.src = 'font-display-document-policy-report-only.tentative.sub.html';
|
|
||||||
iframe.onload = t.step_func(() => {
|
|
||||||
iframe.contentWindow.postMessage({
|
|
||||||
family,
|
|
||||||
rule
|
|
||||||
}, '*');
|
|
||||||
});
|
|
||||||
|
|
||||||
let td = document.createElement('td');
|
let td = document.createElement('td');
|
||||||
td.appendChild(iframe);
|
td.textContent = 'a';
|
||||||
|
td.style.fontFamily = family + ', Arial';
|
||||||
tr.appendChild(td);
|
tr.appendChild(td);
|
||||||
}
|
}
|
||||||
table.appendChild(tr);
|
table.appendChild(tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
let reportCounter = 4;
|
let reportCounter = 4;
|
||||||
window.onmessage = t.step_func((e) => {
|
let t = async_test('font-display-late-swap Report Format');
|
||||||
const reports = JSON.parse(e.data);
|
|
||||||
assert_equals(reports.length, 1);
|
|
||||||
check_report_format(reports[0]);
|
|
||||||
});
|
|
||||||
|
|
||||||
let check_report_format = (report) => {
|
let check_report_format = (reports, observer) => {
|
||||||
reportCounter--;
|
reportCounter -= reports.length;
|
||||||
|
for (let report of reports) {
|
||||||
assert_equals(report.type, 'document-policy-violation');
|
assert_equals(report.type, 'document-policy-violation');
|
||||||
assert_equals(report.url, document.getElementsByTagName('iframe')[0].contentWindow.location.href);
|
assert_equals(report.url, document.location.href, 'Report URL');
|
||||||
assert_equals(report.body.featureId, 'font-display-late-swap');
|
assert_equals(report.body.featureId, 'font-display-late-swap');
|
||||||
assert_equals(report.body.disposition, 'report');
|
assert_equals(report.body.disposition, 'report');
|
||||||
assert_true('sourceFile' in report.body);
|
assert_true('sourceFile' in report.body);
|
||||||
assert_true('lineNumber' in report.body);
|
assert_true('lineNumber' in report.body);
|
||||||
assert_true('columnNumber' in report.body);
|
assert_true('columnNumber' in report.body);
|
||||||
|
}
|
||||||
// Test is done when we have exactly 4 reports for the following
|
// Test is done when we have exactly 4 reports for the following
|
||||||
// font-display values: not set, 'auto', 'block', 'swap'
|
// font-display values: not set, 'auto', 'block', 'swap'
|
||||||
if (reportCounter == 0) t.done();
|
if (reportCounter == 0) t.done();
|
||||||
};
|
};
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
|
new ReportingObserver(t.step_func(check_report_format),
|
||||||
|
{types: ['document-policy-violation'], buffered: true}).observe();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -1,36 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<style></style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<p>This is a subframe with 'no-font-display-late-swap'</p>
|
|
||||||
<p id="text"></p>
|
|
||||||
</body>
|
|
||||||
<script>
|
|
||||||
window.onmessage = (e) => {
|
|
||||||
const rule = e.data.rule;
|
|
||||||
const family = e.data.family;
|
|
||||||
|
|
||||||
function send_report(reports) {
|
|
||||||
// stringify reports because report is not clonable.
|
|
||||||
e.source.postMessage(JSON.stringify(reports), '*');
|
|
||||||
}
|
|
||||||
|
|
||||||
new ReportingObserver(send_report, {
|
|
||||||
types: ['document-policy-violation'],
|
|
||||||
buffered: true
|
|
||||||
})
|
|
||||||
.observe();
|
|
||||||
|
|
||||||
document.styleSheets[0].insertRule(rule, 0);
|
|
||||||
// Trigger font display violation.
|
|
||||||
const p = document.getElementById('text');
|
|
||||||
p.textContent = 'a';
|
|
||||||
p.style.fontFamily = `${family}, Arial`;
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</html>
|
|
|
@ -1,17 +1,14 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
<head>
|
||||||
<head>
|
|
||||||
<title>Test for font-display-late-swap feature policy set to reporting</title>
|
<title>Test for font-display-late-swap feature policy set to reporting</title>
|
||||||
<link rel="help"
|
<link rel="help" href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
|
||||||
href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
|
|
||||||
<script src='/resources/testharness.js'></script>
|
<script src='/resources/testharness.js'></script>
|
||||||
<script src='/resources/testharnessreport.js'></script>
|
<script src='/resources/testharnessreport.js'></script>
|
||||||
<style>
|
<style>
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
<body>
|
||||||
<body>
|
|
||||||
<p>
|
<p>
|
||||||
Tests if the correct number of violation reports are generated and each report corresponds to this feature.
|
Tests if the correct number of violation reports are generated and each report corresponds to this feature.
|
||||||
4 reports should be created out of the 6 options below (reports for all except for 'fallback' and 'optional').
|
4 reports should be created out of the 6 options below (reports for all except for 'fallback' and 'optional').
|
||||||
|
@ -27,60 +24,49 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<script>
|
<script>
|
||||||
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
|
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
|
||||||
const table = document.getElementById('container');
|
const table = document.getElementById('container');
|
||||||
const t = async_test('font-display-late-swap Report Format');
|
|
||||||
|
|
||||||
function makeFontFaceDeclaration(family, display) {
|
function makeFontFaceDeclaration(family, display) {
|
||||||
url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over
|
url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over
|
||||||
return `@font-face { font-family: ${family}; src: url("${url}"); font-display: ${display}; }`;
|
return '@font-face { font-family: ' + family + '; src: url("' + url + '"); font-display: ' + display + '; }';
|
||||||
}
|
}
|
||||||
|
|
||||||
window.onload = () => {
|
window.onload = () => {
|
||||||
let tr = document.createElement('tr');
|
let tr = document.createElement('tr');
|
||||||
for (let display of fontDisplayValues) {
|
for (let display of fontDisplayValues) {
|
||||||
const family = display + '-face';
|
const family = display + '-face';
|
||||||
const rule = makeFontFaceDeclaration(family, display);
|
const rule = makeFontFaceDeclaration(family, display);
|
||||||
|
document.styleSheets[0].insertRule(rule, 0);
|
||||||
// Create a separate iframe for testing purpose.
|
|
||||||
// For same document, violation reports with same content might be deduped.
|
|
||||||
let iframe = document.createElement('iframe');
|
|
||||||
iframe.src = 'font-display-document-policy-reporting.tentative.sub.html';
|
|
||||||
iframe.onload = t.step_func(() => {
|
|
||||||
iframe.contentWindow.postMessage({
|
|
||||||
family,
|
|
||||||
rule
|
|
||||||
}, '*');
|
|
||||||
});
|
|
||||||
|
|
||||||
let td = document.createElement('td');
|
let td = document.createElement('td');
|
||||||
td.appendChild(iframe);
|
td.textContent = 'a';
|
||||||
|
td.style.fontFamily = family + ', Arial';
|
||||||
tr.appendChild(td);
|
tr.appendChild(td);
|
||||||
}
|
}
|
||||||
table.appendChild(tr);
|
table.appendChild(tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
let reportCounter = 4;
|
let reportCounter = 4;
|
||||||
window.onmessage = t.step_func((e) => {
|
let t = async_test('font-display-late-swap Report Format');
|
||||||
const reports = JSON.parse(e.data);
|
|
||||||
assert_equals(reports.length, 1);
|
|
||||||
check_report_format(reports[0]);
|
|
||||||
});
|
|
||||||
|
|
||||||
let check_report_format = (report) => {
|
let check_report_format = (reports, observer) => {
|
||||||
reportCounter--;
|
reportCounter -= reports.length;
|
||||||
|
for (let report of reports) {
|
||||||
assert_equals(report.type, 'document-policy-violation');
|
assert_equals(report.type, 'document-policy-violation');
|
||||||
assert_equals(report.url, document.getElementsByTagName('iframe')[0].contentWindow.location.href);
|
assert_equals(report.url, document.location.href, 'Report URL');
|
||||||
assert_equals(report.body.featureId, 'font-display-late-swap');
|
assert_equals(report.body.featureId, 'font-display-late-swap');
|
||||||
assert_equals(report.body.disposition, 'enforce');
|
assert_equals(report.body.disposition, 'enforce');
|
||||||
assert_true('sourceFile' in report.body);
|
assert_true('sourceFile' in report.body);
|
||||||
assert_true('lineNumber' in report.body);
|
assert_true('lineNumber' in report.body);
|
||||||
assert_true('columnNumber' in report.body);
|
assert_true('columnNumber' in report.body);
|
||||||
|
}
|
||||||
// Test is done when we have exactly 4 reports for the following
|
// Test is done when we have exactly 4 reports for the following
|
||||||
// font-display values: not set, 'auto', 'block', 'swap'
|
// font-display values: not set, 'auto', 'block', 'swap'
|
||||||
if (reportCounter == 0) t.done();
|
if (reportCounter == 0) t.done();
|
||||||
};
|
};
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
|
new ReportingObserver(t.step_func(check_report_format),
|
||||||
|
{types: ['document-policy-violation'], buffered: true}).observe();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -1,36 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<style></style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<p>This is a subframe with 'no-font-display-late-swap'</p>
|
|
||||||
<p id="text"></p>
|
|
||||||
</body>
|
|
||||||
<script>
|
|
||||||
window.onmessage = (e) => {
|
|
||||||
const rule = e.data.rule;
|
|
||||||
const family = e.data.family;
|
|
||||||
|
|
||||||
function send_report(reports) {
|
|
||||||
// stringify reports because report is not clonable.
|
|
||||||
e.source.postMessage(JSON.stringify(reports), '*');
|
|
||||||
}
|
|
||||||
|
|
||||||
new ReportingObserver(send_report, {
|
|
||||||
types: ['document-policy-violation'],
|
|
||||||
buffered: true
|
|
||||||
})
|
|
||||||
.observe();
|
|
||||||
|
|
||||||
document.styleSheets[0].insertRule(rule, 0);
|
|
||||||
// Trigger font display violation.
|
|
||||||
const p = document.getElementById('text');
|
|
||||||
p.textContent = 'a';
|
|
||||||
p.style.fontFamily = `${family}, Arial`;
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</html>
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>DOMImplementation.createDocument()</title>
|
||||||
|
<link rel="author" title="Nate Chapin" href="mailto:japhet@chromium.org">
|
||||||
|
<link rel=help href="https://dom.spec.whatwg.org/#dom-domimplementation-createdocument">
|
||||||
|
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1086801">
|
||||||
|
<meta name="assert" content="Calling on createDocument() on a DOMImplementation from a document with a null browsing context should not crash"/>
|
||||||
|
<iframe id="i"></iframe>
|
||||||
|
<script>
|
||||||
|
var doc = i.contentDocument;
|
||||||
|
i.remove();
|
||||||
|
doc.implementation.createDocument("", "");
|
||||||
|
</script>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>DOMImplementation.createHTMLDocument()</title>
|
||||||
|
<link rel="author" title="Nate Chapin" href="mailto:japhet@chromium.org">
|
||||||
|
<link rel=help href="https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument">
|
||||||
|
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1086800">
|
||||||
|
<meta name="assert" content="Calling on createHTMLDocument() on a DOMImplementation from a document with a null browsing context should not crash"/>
|
||||||
|
<iframe id="i"></iframe>
|
||||||
|
<script>
|
||||||
|
var doc = i.contentDocument;
|
||||||
|
i.remove();
|
||||||
|
doc.implementation.createHTMLDocument();
|
||||||
|
</script>
|
|
@ -0,0 +1,32 @@
|
||||||
|
// Verify that calling Response clone() in a detached iframe doesn't crash.
|
||||||
|
// Regression test for https://crbug.com/1082688.
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
promise_test(async () => {
|
||||||
|
// Wait for the document body to be available.
|
||||||
|
await new Promise(resolve => {
|
||||||
|
onload = resolve;
|
||||||
|
});
|
||||||
|
|
||||||
|
window.iframe = document.createElement('iframe');
|
||||||
|
document.body.appendChild(iframe);
|
||||||
|
iframe.srcdoc = `<!doctype html>
|
||||||
|
<script>
|
||||||
|
const response = new Response('body');
|
||||||
|
window.parent.postMessage('okay', '*');
|
||||||
|
window.parent.iframe.remove();
|
||||||
|
response.clone();
|
||||||
|
</script>
|
||||||
|
`;
|
||||||
|
|
||||||
|
await new Promise(resolve => {
|
||||||
|
onmessage = evt => {
|
||||||
|
if (evt.data === 'okay') {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
// If it got here without crashing, the test passed.
|
||||||
|
}, 'clone within removed iframe should not crash');
|
|
@ -70,13 +70,13 @@
|
||||||
return fetch('../resources/trickle.py?count=2&delay=100').then(function(res) {
|
return fetch('../resources/trickle.py?count=2&delay=100').then(function(res) {
|
||||||
clone = res.clone();
|
clone = res.clone();
|
||||||
response = res;
|
response = res;
|
||||||
return clone.arrayBuffer();
|
return clone.text();
|
||||||
}).then(function(r) {
|
}).then(function(r) {
|
||||||
assert_equals(r.byteLength, 26);
|
assert_equals(r.length, 26);
|
||||||
result = r;
|
result = r;
|
||||||
return response.arrayBuffer();
|
return response.text();
|
||||||
}).then(function(r) {
|
}).then(function(r) {
|
||||||
assert_array_equals(r, result, "cloned responses should provide the same data");
|
assert_equals(r, result, "cloned responses should provide the same data");
|
||||||
});
|
});
|
||||||
}, 'Cloned responses should provide the same data');
|
}, 'Cloned responses should provide the same data');
|
||||||
|
|
||||||
|
|
|
@ -2,53 +2,227 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Editing: contentEditable attribute test</title>
|
<title>Editing: contentEditable attribute test</title>
|
||||||
<link rel="author" title="Baidu" href="mailto: guopengcheng@baidu.com"/>
|
<link rel="author" title="Baidu" href="mailto: guopengcheng@baidu.com" />
|
||||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#contenteditable"/>
|
<link
|
||||||
|
rel="help"
|
||||||
|
href="https://html.spec.whatwg.org/multipage/#contenteditable"
|
||||||
|
/>
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<div id="log"></div>
|
<div id="log"></div>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var testElement = document.createElement("testElement");
|
|
||||||
test(function() {
|
test(function() {
|
||||||
assert_equals(testElement.contentEditable,"inherit", "check for testElement.contentEditable value");
|
const testElement = document.createElement("testElement");
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"inherit",
|
||||||
|
"check for testElement.contentEditable value"
|
||||||
|
);
|
||||||
}, "no contentEditable attribute");
|
}, "no contentEditable attribute");
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
const testElement = document.createElement("testElement");
|
||||||
testElement.setAttribute("contentEditable", "");
|
testElement.setAttribute("contentEditable", "");
|
||||||
test(function() {
|
|
||||||
assert_true(testElement.isContentEditable, "check for testElement.isContentEditable value");
|
assert_true(
|
||||||
assert_equals(testElement.contentEditable,"true", "check for testElement.contentEditable value");
|
testElement.isContentEditable,
|
||||||
|
"check for testElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"true",
|
||||||
|
"check for testElement.contentEditable value"
|
||||||
|
);
|
||||||
}, "empty contentEditable attribute");
|
}, "empty contentEditable attribute");
|
||||||
testElement.contentEditable="true";
|
|
||||||
test(function() {
|
test(function() {
|
||||||
assert_true(testElement.isContentEditable, "check for testElement.isContentEditable value");
|
const testElement = document.createElement("testElement");
|
||||||
assert_equals(testElement.contentEditable,"true", "check for testElement.contentEditable value");
|
testElement.contentEditable = "true";
|
||||||
}, "set contentEditable = \"true\"");
|
|
||||||
testElement.contentEditable="false";
|
assert_true(
|
||||||
|
testElement.isContentEditable,
|
||||||
|
"check for testElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"true",
|
||||||
|
"check for testElement.contentEditable value"
|
||||||
|
);
|
||||||
|
}, 'set contentEditable = "true"');
|
||||||
|
|
||||||
test(function() {
|
test(function() {
|
||||||
assert_false(testElement.isContentEditable, "check for testElement.isContentEditable value");
|
const testElement = document.createElement("testElement");
|
||||||
assert_equals(testElement.contentEditable,"false", "check for testElement.contentEditable value");
|
testElement.contentEditable = "false";
|
||||||
}, "set contentEditable = \"false\"");
|
|
||||||
testElement.contentEditable="inherit";
|
assert_false(
|
||||||
|
testElement.isContentEditable,
|
||||||
|
"check for testElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"false",
|
||||||
|
"check for testElement.contentEditable value"
|
||||||
|
);
|
||||||
|
}, 'set contentEditable = "false"');
|
||||||
|
|
||||||
test(function() {
|
test(function() {
|
||||||
assert_equals(testElement.contentEditable,"inherit", "check for testElement.contentEditable value");
|
const testElement = document.createElement("testElement");
|
||||||
}, "set contentEditable = \"inherit\"");
|
testElement.contentEditable = "inherit";
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"inherit",
|
||||||
|
"check for testElement.contentEditable value"
|
||||||
|
);
|
||||||
|
}, 'set contentEditable = "inherit"');
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
const testElement = document.createElement("testElement");
|
||||||
|
const childElement = document.createElement("childElement");
|
||||||
|
testElement.appendChild(childElement);
|
||||||
|
testElement.contentEditable = "true";
|
||||||
|
|
||||||
|
assert_true(
|
||||||
|
testElement.isContentEditable,
|
||||||
|
"check for testElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"true",
|
||||||
|
"check for testElement.contentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_true(
|
||||||
|
childElement.isContentEditable,
|
||||||
|
"check for childElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
childElement.contentEditable,
|
||||||
|
"inherit",
|
||||||
|
"check for childElement.contentEditable value"
|
||||||
|
);
|
||||||
|
}, 'set parent element contentEditable = "true"');
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
const testElement = document.createElement("testElement");
|
||||||
|
const childElement = document.createElement("childElement");
|
||||||
|
testElement.appendChild(childElement);
|
||||||
|
testElement.contentEditable = "false";
|
||||||
|
|
||||||
|
assert_false(
|
||||||
|
testElement.isContentEditable,
|
||||||
|
"check for testElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"false",
|
||||||
|
"check for testElement.contentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_false(
|
||||||
|
childElement.isContentEditable,
|
||||||
|
"check for childElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
childElement.contentEditable,
|
||||||
|
"inherit",
|
||||||
|
"check for childElement.contentEditable value"
|
||||||
|
);
|
||||||
|
}, 'set parent element contentEditable = "false"');
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
var testElement = document.createElement("testElement");
|
||||||
|
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"inherit",
|
||||||
|
"no contentEditable attribute, so inherit"
|
||||||
|
);
|
||||||
|
testElement.setAttribute("contentEditable", "");
|
||||||
|
|
||||||
|
assert_true(
|
||||||
|
testElement.isContentEditable,
|
||||||
|
"check for testElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"true",
|
||||||
|
"empty contentEditable attribute is 'true'"
|
||||||
|
);
|
||||||
|
|
||||||
|
testElement.contentEditable = "true";
|
||||||
|
assert_true(
|
||||||
|
testElement.isContentEditable,
|
||||||
|
"check for testElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"true",
|
||||||
|
"contentEditable='true' is 'true'"
|
||||||
|
);
|
||||||
|
|
||||||
|
testElement.contentEditable = "false";
|
||||||
|
assert_false(
|
||||||
|
testElement.isContentEditable,
|
||||||
|
"check for testElement.isContentEditable value"
|
||||||
|
);
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"false",
|
||||||
|
"contentEditable = 'false' is 'false'"
|
||||||
|
);
|
||||||
|
|
||||||
|
testElement.contentEditable = "inherit";
|
||||||
|
assert_equals(
|
||||||
|
testElement.contentEditable,
|
||||||
|
"inherit",
|
||||||
|
"contentEditable='inherit' is 'inherit'"
|
||||||
|
);
|
||||||
|
|
||||||
var childElement = document.createElement("childElement");
|
var childElement = document.createElement("childElement");
|
||||||
testElement.appendChild(childElement);
|
testElement.appendChild(childElement);
|
||||||
testElement.contentEditable="true";
|
testElement.contentEditable = "true";
|
||||||
test(function() {
|
assert_true(
|
||||||
assert_true(testElement.isContentEditable, "check for testElement.isContentEditable value");
|
testElement.isContentEditable,
|
||||||
assert_equals(testElement.contentEditable,"true", "check for testElement.contentEditable value");
|
'parent element contentEditable = "true"'
|
||||||
assert_true(childElement.isContentEditable, "check for childElement.isContentEditable value");
|
);
|
||||||
assert_equals(childElement.contentEditable,"inherit", "check for childElement.contentEditable value");
|
assert_equals(testElement.contentEditable, "true");
|
||||||
}, "set parent element contentEditable = \"true\"");
|
assert_true(
|
||||||
testElement.contentEditable="false";
|
childElement.isContentEditable,
|
||||||
test(function() {
|
'parent element contentEditable = "true", so childElement must be editable'
|
||||||
assert_false(testElement.isContentEditable, "check for testElement.isContentEditable value");
|
);
|
||||||
assert_equals(testElement.contentEditable,"false", "check for testElement.contentEditable value");
|
assert_equals(
|
||||||
assert_false(childElement.isContentEditable, "check for childElement.isContentEditable value");
|
childElement.contentEditable,
|
||||||
assert_equals(childElement.contentEditable,"inherit", "check for childElement.contentEditable value");
|
"inherit",
|
||||||
}, "set parent element contentEditable = \"false\"");
|
'parent element contentEditable = "true", so child inherits'
|
||||||
|
);
|
||||||
|
|
||||||
|
testElement.contentEditable = "false";
|
||||||
|
assert_false(
|
||||||
|
testElement.isContentEditable,
|
||||||
|
'parent element contentEditable = "false"'
|
||||||
|
);
|
||||||
|
assert_equals(testElement.contentEditable, "false");
|
||||||
|
assert_false(
|
||||||
|
childElement.isContentEditable,
|
||||||
|
'parent element contentEditable = "false"'
|
||||||
|
);
|
||||||
|
assert_equals(
|
||||||
|
childElement.contentEditable,
|
||||||
|
"inherit",
|
||||||
|
'parent element contentEditable = "false"'
|
||||||
|
);
|
||||||
|
}, "Dynamically changing contentEditable values");
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
|
||||||
|
|
||||||
|
<!-- The expected behavior of this test is not explicitly specified. -->
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<form id=myform name=myform action="/formaction.html"></form>
|
||||||
|
<iframe id=frame1 name=target1></iframe>
|
||||||
|
<iframe id=frame2 name=target2></iframe>
|
||||||
|
<iframe id=frame3 name=target3></iframe>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
promise_test(async () => {
|
||||||
|
const frame1LoadPromise = new Promise(resolve => frame1.onload = resolve);
|
||||||
|
const frame2LoadPromise = new Promise(resolve => frame2.onload = resolve);
|
||||||
|
const frame3LoadPromise = new Promise(resolve => frame3.onload = resolve);
|
||||||
|
|
||||||
|
myform.target = 'target1';
|
||||||
|
myform.submit();
|
||||||
|
myform.target = 'target2';
|
||||||
|
myform.submit();
|
||||||
|
myform.target = 'target3';
|
||||||
|
myform.submit();
|
||||||
|
|
||||||
|
await Promise.all([frame1LoadPromise, frame2LoadPromise, frame3LoadPromise]);
|
||||||
|
|
||||||
|
assert_equals(frame1.contentDocument.location.pathname, '/formaction.html');
|
||||||
|
assert_equals(frame2.contentDocument.location.pathname, '/formaction.html');
|
||||||
|
assert_equals(frame3.contentDocument.location.pathname, '/formaction.html');
|
||||||
|
|
||||||
|
}, 'Verifies that one form used to target multiple frames in succession navigates all of them.');
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
|
||||||
|
|
||||||
|
<!-- The expected behavior of this test is not explicitly specified. -->
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
async_test(t => {
|
||||||
|
window.onload = t.step_func(() => {
|
||||||
|
const iframe = document.createElement('iframe');
|
||||||
|
iframe.name = 'myframe';
|
||||||
|
|
||||||
|
iframe.onload = t.step_func_done(() => {
|
||||||
|
assert_equals(iframe.contentDocument.location.pathname, '/formaction.html');
|
||||||
|
});
|
||||||
|
|
||||||
|
const form = document.createElement('form');
|
||||||
|
form.target = iframe.name;
|
||||||
|
form.action = '/formaction.html';
|
||||||
|
document.body.appendChild(form);
|
||||||
|
|
||||||
|
iframe.src = 'javascript:false';
|
||||||
|
document.body.appendChild(iframe);
|
||||||
|
form.submit();
|
||||||
|
});
|
||||||
|
}, 'Verifies that form submissions cancel javascript navigations to prevent duplicate load events.');
|
||||||
|
</script>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<form>
|
||||||
|
<select>
|
||||||
|
<option>Default</option>
|
||||||
|
<option>Another</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select>
|
||||||
|
<option>Another</option>
|
||||||
|
<option selected>Default</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select multiple>
|
||||||
|
<option>option 1</option>
|
||||||
|
<option>option 2</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</body>
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<title>Invalidation test on resetting <select></title>
|
||||||
|
<link rel="help" href="https://html.spec.whatwg.org/C/#the-select-element:concept-form-reset-control">
|
||||||
|
<link rel="help" href="http://crbug.com/1087031">
|
||||||
|
<link rel="match" href="reset-algorithm-rendering-ref.html">
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<form>
|
||||||
|
<select>
|
||||||
|
<option>Default</option>
|
||||||
|
<option>Another</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select>
|
||||||
|
<option>Another</option>
|
||||||
|
<option selected>Default</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select multiple>
|
||||||
|
<option>option 1</option>
|
||||||
|
<option>option 2</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const selects = document.querySelectorAll('select');
|
||||||
|
selects[0].selectedIndex = 1;
|
||||||
|
selects[1].selectedIndex = 0;
|
||||||
|
selects[2].options[1].selected = true;
|
||||||
|
|
||||||
|
document.documentElement.addEventListener('TestRendered', e => {
|
||||||
|
document.querySelector('form').reset();
|
||||||
|
e.target.removeAttribute('class');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,60 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Mouse events with keys pressed</title>
|
||||||
|
<link rel="author" title="Google" href="http://www.google.com/" />
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/resources/testdriver.js"></script>
|
||||||
|
<script src="/resources/testdriver-vendor.js"></script>
|
||||||
|
<script src="/resources/testdriver-actions.js"></script>
|
||||||
|
<script type="text/javascript" src="../pointerevent_support.js"></script>
|
||||||
|
<script>
|
||||||
|
let testMouseKeyPressed = async_test('Tests that the mouse events with some keys pressed.');
|
||||||
|
let activeKeys = false;
|
||||||
|
|
||||||
|
window.addEventListener('pointermove', function(e) {
|
||||||
|
activeKeys = e.getModifierState("Alt") &&
|
||||||
|
e.getModifierState("Control") &&
|
||||||
|
e.getModifierState("Meta") &&
|
||||||
|
e.getModifierState("Shift");
|
||||||
|
});
|
||||||
|
|
||||||
|
async function runTest(){
|
||||||
|
let event_watcher = new EventWatcher(testMouseKeyPressed, window, ["pointermove"],
|
||||||
|
()=>waitForAnimationFrames(200));
|
||||||
|
await Promise.all([event_watcher.wait_for(["pointermove"]), inject_input()]);
|
||||||
|
testMouseKeyPressed.step_func_done(()=>{
|
||||||
|
assert_true(activeKeys, "Modifier keys not reflected in the pointermove event!");
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
|
function inject_input() {
|
||||||
|
const x = 100;
|
||||||
|
const y = 100;
|
||||||
|
const altKey = '\uE00A';
|
||||||
|
const ctrlKey = '\uE009';
|
||||||
|
const metaKey = '\uE03d';
|
||||||
|
const shiftKey = '\uE008'
|
||||||
|
|
||||||
|
// First press Alt, Control, Meta, Shift keys and then send a mouse move.
|
||||||
|
return new test_driver.Actions()
|
||||||
|
.keyDown(altKey)
|
||||||
|
.keyDown(ctrlKey)
|
||||||
|
.keyDown(metaKey)
|
||||||
|
.keyDown(shiftKey)
|
||||||
|
.pointerMove(x,y)
|
||||||
|
.send();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body id="target" onload="runTest()">
|
||||||
|
<h4>Test Description: Tests that the mouse events with some keys pressed.
|
||||||
|
<ol>
|
||||||
|
<li>Press Alt, Control, Meta, Shift keys and move the mouse</li>
|
||||||
|
</ol>
|
||||||
|
</h4>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -392,3 +392,13 @@ function resolveWhen(condition) {
|
||||||
tick();
|
tick();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns a promise that only gets resolved after n animation frames
|
||||||
|
function waitForAnimationFrames(n){
|
||||||
|
let p = 0;
|
||||||
|
function next(){
|
||||||
|
p++;
|
||||||
|
return p === n;
|
||||||
|
}
|
||||||
|
return resolveWhen(next);
|
||||||
|
}
|
||||||
|
|
|
@ -1209,29 +1209,22 @@ IdlArray.prototype.assert_type_is = function(value, type)
|
||||||
assert_regexp_match(value, /^([\x00-\ud7ff\ue000-\uffff]|[\ud800-\udbff][\udc00-\udfff])*$/);
|
assert_regexp_match(value, /^([\x00-\ud7ff\ue000-\uffff]|[\ud800-\udbff][\udc00-\udfff])*$/);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case "Int8Array":
|
|
||||||
case "Int16Array":
|
|
||||||
case "Int32Array":
|
|
||||||
case "Uint8Array":
|
|
||||||
case "Uint16Array":
|
|
||||||
case "Uint32Array":
|
|
||||||
case "Uint8ClampedArray":
|
|
||||||
case "Float32Array":
|
|
||||||
case "Float64Array":
|
|
||||||
case "ArrayBuffer":
|
|
||||||
case "DataView":
|
|
||||||
case "Function":
|
|
||||||
assert_true(value instanceof self[type], "wrong type: not a " + type);
|
|
||||||
return;
|
|
||||||
|
|
||||||
case "object":
|
case "object":
|
||||||
assert_in_array(typeof value, ["object", "function"], "wrong type: not object or function");
|
assert_in_array(typeof value, ["object", "function"], "wrong type: not object or function");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is a catch-all for any IDL type name which follows JS class
|
||||||
|
// semantics. This includes some non-interface IDL types (e.g. Int8Array,
|
||||||
|
// Function, ...), as well as any interface types that are not in the IDL
|
||||||
|
// that is fed to the harness. If an IDL type does not follow JS class
|
||||||
|
// semantics then it should go in the switch statement above. If an IDL
|
||||||
|
// type needs full checking, then the test should include it in the IDL it
|
||||||
|
// feeds to the harness.
|
||||||
if (!(type in this.members))
|
if (!(type in this.members))
|
||||||
{
|
{
|
||||||
throw new IdlHarnessError("Unrecognized type " + type);
|
assert_true(value instanceof self[type], "wrong type: not a " + type);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.members[type] instanceof IdlInterface)
|
if (this.members[type] instanceof IdlInterface)
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<title>Layout changes on percentage-based scroll timeline</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/scroll-animations/">
|
||||||
|
<meta name="assert" content="Scroll timeline should properly handle
|
||||||
|
layout changes on percentage-based scroll offset">
|
||||||
|
<link rel="match" href="animation-ref.html">
|
||||||
|
|
||||||
|
<script src="/web-animations/testcommon.js"></script>
|
||||||
|
<script src="/common/reftest-wait.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#box {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
#covered {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroller {
|
||||||
|
overflow: auto;
|
||||||
|
height: 100px;
|
||||||
|
width: 100px;
|
||||||
|
will-change: transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
#contents {
|
||||||
|
height: 500px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#spacer {
|
||||||
|
height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.invisible {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="box"></div>
|
||||||
|
<div id="covered"></div>
|
||||||
|
<div id="scroller">
|
||||||
|
<div id="contents"></div>
|
||||||
|
<div id="spacer" class="invisible"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const box = document.getElementById('box');
|
||||||
|
const effect = new KeyframeEffect(box,
|
||||||
|
[
|
||||||
|
{ transform: 'translateY(0)', opacity: 1 },
|
||||||
|
{ transform: 'translateY(200px)', opacity: 0 }
|
||||||
|
], {
|
||||||
|
duration: 1000,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const scroller = document.getElementById('scroller');
|
||||||
|
const timeline = new ScrollTimeline({
|
||||||
|
scrollSource: scroller,
|
||||||
|
timeRange: 1000,
|
||||||
|
startScrollOffset: '20%',
|
||||||
|
endScrollOffset: '80%'
|
||||||
|
});
|
||||||
|
const animation = new Animation(effect, timeline);
|
||||||
|
animation.play();
|
||||||
|
|
||||||
|
// Moves the scroller to the end point (400px).
|
||||||
|
const maxScroll = scroller.scrollHeight - scroller.clientHeight;
|
||||||
|
scroller.scrollTop = maxScroll;
|
||||||
|
|
||||||
|
// Adds 400px to scroll height which pushes scroll progress back to 50%.
|
||||||
|
const spacer = document.getElementById('spacer');
|
||||||
|
spacer.classList.remove('invisible');
|
||||||
|
|
||||||
|
waitForAnimationFrames(2).then(_ => {
|
||||||
|
takeScreenshot();
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -1,10 +1,10 @@
|
||||||
cask 'safari-technology-preview' do
|
cask 'safari-technology-preview' do
|
||||||
if MacOS.version <= :mojave
|
if MacOS.version <= :mojave
|
||||||
version '106,001-05966-20200513-86571be6-878e-411b-a5b9-65a971573fae'
|
version '107,001-09573-20200527-5319cd41-1eb4-412a-817a-bf376957b539'
|
||||||
sha256 '8518c8917a9172aeb75deeb61060d353229760fd54dc85bd38a0897cc1d12105'
|
sha256 'c06f7ecd3fb310bc59e06010d1f8c6dbdb57dbc671070fa0d9fc69c295eb0190'
|
||||||
else
|
else
|
||||||
version '106,001-05890-20200513-321a69b4-de58-440e-8182-8ac03d65f6ce'
|
version '107,001-09514-20200527-05f7a42c-d9a0-4a60-ba12-97f2145db993'
|
||||||
sha256 'f3c073d9b60ff6d11f82abbc6cc131e5913e6d0f2a11f0968ae77db1b51e1e35'
|
sha256 '50baba474a0f0c773e4907ba8b06c80171de79f15b2ee653301cfe8230d0a0ef'
|
||||||
end
|
end
|
||||||
|
|
||||||
url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"
|
url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
aioquic==0.8.7
|
aioquic==0.8.8
|
||||||
|
|
|
@ -47,7 +47,7 @@ jobs:
|
||||||
echo "::set-env name=LINK::/LIBPATH:C:\Progra~1\OpenSSL-Win64\lib"
|
echo "::set-env name=LINK::/LIBPATH:C:\Progra~1\OpenSSL-Win64\lib"
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: |
|
run: |
|
||||||
pip install -U pip setuptools wheel
|
python -m pip install -U pip setuptools wheel
|
||||||
pip install coverage
|
pip install coverage
|
||||||
pip install .
|
pip install .
|
||||||
coverage run -m unittest discover -v
|
coverage run -m unittest discover -v
|
||||||
|
@ -84,20 +84,10 @@ jobs:
|
||||||
- uses: actions/setup-python@v1
|
- uses: actions/setup-python@v1
|
||||||
with:
|
with:
|
||||||
python-version: 3.7
|
python-version: 3.7
|
||||||
- name: Install nasm
|
|
||||||
if: matrix.os == 'windows-latest'
|
|
||||||
run: choco install -y nasm
|
|
||||||
- name: Install nmake
|
|
||||||
if: matrix.os == 'windows-latest'
|
|
||||||
run: |
|
|
||||||
& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe" modify `
|
|
||||||
--installPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise" `
|
|
||||||
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --passive --norestart
|
|
||||||
shell: powershell
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
env:
|
env:
|
||||||
CIBW_BEFORE_BUILD: scripts/build-openssl /tmp/vendor
|
CIBW_BEFORE_BUILD: python scripts/fetch-vendor /tmp/vendor
|
||||||
CIBW_BEFORE_BUILD_WINDOWS: scripts\build-openssl.bat C:\cibw\vendor
|
CIBW_BEFORE_BUILD_WINDOWS: python scripts\fetch-vendor C:\cibw\vendor
|
||||||
CIBW_ENVIRONMENT: AIOQUIC_SKIP_TESTS=ipv6,loss CFLAGS=-I/tmp/vendor/include LDFLAGS=-L/tmp/vendor/lib
|
CIBW_ENVIRONMENT: AIOQUIC_SKIP_TESTS=ipv6,loss CFLAGS=-I/tmp/vendor/include LDFLAGS=-L/tmp/vendor/lib
|
||||||
CIBW_ENVIRONMENT_WINDOWS: AIOQUIC_SKIP_TESTS=ipv6,loss CL="/IC:\cibw\vendor\include" LINK="/LIBPATH:C:\cibw\vendor\lib"
|
CIBW_ENVIRONMENT_WINDOWS: AIOQUIC_SKIP_TESTS=ipv6,loss CL="/IC:\cibw\vendor\include" LINK="/LIBPATH:C:\cibw\vendor\lib"
|
||||||
CIBW_SKIP: cp27-* cp33-* cp34-* cp35-* pp27-*
|
CIBW_SKIP: cp27-* cp33-* cp34-* cp35-* pp27-*
|
||||||
|
|
|
@ -115,42 +115,9 @@ You will need to set some environment variables to link against OpenSSL:
|
||||||
Running the examples
|
Running the examples
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
After checking out the code using git you can run:
|
`aioquic` comes with a number of examples illustrating various QUIC usecases.
|
||||||
|
|
||||||
.. code-block:: console
|
You can browse these examples here: https://github.com/aiortc/aioquic/tree/master/examples
|
||||||
|
|
||||||
$ pip install -e .
|
|
||||||
$ pip install aiofiles asgiref httpbin starlette wsproto
|
|
||||||
|
|
||||||
HTTP/3 server
|
|
||||||
.............
|
|
||||||
|
|
||||||
You can run the example server, which handles both HTTP/0.9 and HTTP/3:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ python examples/http3_server.py --certificate tests/ssl_cert.pem --private-key tests/ssl_key.pem
|
|
||||||
|
|
||||||
HTTP/3 client
|
|
||||||
.............
|
|
||||||
|
|
||||||
You can run the example client to perform an HTTP/3 request:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ python examples/http3_client.py --ca-certs tests/pycacert.pem https://localhost:4433/
|
|
||||||
|
|
||||||
Alternatively you can perform an HTTP/0.9 request:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ python examples/http3_client.py --ca-certs tests/pycacert.pem --legacy-http https://localhost:4433/
|
|
||||||
|
|
||||||
You can also open a WebSocket over HTTP/3:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ python examples/http3_client.py --ca-certs tests/pycacert.pem wss://localhost:4433/ws
|
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
|
62
tests/wpt/web-platform-tests/tools/third_party/aioquic/examples/README.rst
vendored
Normal file
62
tests/wpt/web-platform-tests/tools/third_party/aioquic/examples/README.rst
vendored
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
Examples
|
||||||
|
========
|
||||||
|
|
||||||
|
After checking out the code using git you can run:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ pip install -e .
|
||||||
|
$ pip install aiofiles asgiref dnslib httpbin starlette wsproto
|
||||||
|
|
||||||
|
|
||||||
|
HTTP/3
|
||||||
|
------
|
||||||
|
|
||||||
|
HTTP/3 server
|
||||||
|
.............
|
||||||
|
|
||||||
|
You can run the example server, which handles both HTTP/0.9 and HTTP/3:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python examples/http3_server.py --certificate tests/ssl_cert.pem --private-key tests/ssl_key.pem
|
||||||
|
|
||||||
|
HTTP/3 client
|
||||||
|
.............
|
||||||
|
|
||||||
|
You can run the example client to perform an HTTP/3 request:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python examples/http3_client.py --ca-certs tests/pycacert.pem https://localhost:4433/
|
||||||
|
|
||||||
|
Alternatively you can perform an HTTP/0.9 request:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python examples/http3_client.py --ca-certs tests/pycacert.pem --legacy-http https://localhost:4433/
|
||||||
|
|
||||||
|
You can also open a WebSocket over HTTP/3:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python examples/http3_client.py --ca-certs tests/pycacert.pem wss://localhost:4433/ws
|
||||||
|
|
||||||
|
|
||||||
|
DNS over QUIC
|
||||||
|
-------------
|
||||||
|
|
||||||
|
By default the server will use the `Google Public DNS`_ service, you can
|
||||||
|
override this with the ``--resolver`` argument.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python examples/doq_server.py --certificate tests/ssl_cert.pem --private-key tests/ssl_key.pem
|
||||||
|
|
||||||
|
You can then run the client with a specific query:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python examples/doq_client.py --ca-certs tests/pycacert.pem --dns_type "A" --query "quic.aiortc.org" --port 4784
|
||||||
|
|
||||||
|
.. _Google Public DNS: https://developers.google.com/speed/public-dns
|
162
tests/wpt/web-platform-tests/tools/third_party/aioquic/examples/doq_client.py
vendored
Normal file
162
tests/wpt/web-platform-tests/tools/third_party/aioquic/examples/doq_client.py
vendored
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
import argparse
|
||||||
|
import asyncio
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import pickle
|
||||||
|
import ssl
|
||||||
|
from typing import Optional, cast
|
||||||
|
|
||||||
|
from dnslib.dns import QTYPE, DNSQuestion, DNSRecord
|
||||||
|
|
||||||
|
from aioquic.asyncio.client import connect
|
||||||
|
from aioquic.asyncio.protocol import QuicConnectionProtocol
|
||||||
|
from aioquic.quic.configuration import QuicConfiguration
|
||||||
|
from aioquic.quic.events import QuicEvent, StreamDataReceived
|
||||||
|
from aioquic.quic.logger import QuicLogger
|
||||||
|
|
||||||
|
logger = logging.getLogger("client")
|
||||||
|
|
||||||
|
|
||||||
|
class DoQClient(QuicConnectionProtocol):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self._ack_waiter: Optional[asyncio.Future[None]] = None
|
||||||
|
|
||||||
|
async def query(self, query_type: str, dns_query: str) -> None:
|
||||||
|
query = DNSRecord(q=DNSQuestion(dns_query, getattr(QTYPE, query_type)))
|
||||||
|
stream_id = self._quic.get_next_available_stream_id()
|
||||||
|
logger.debug(f"Stream ID: {stream_id}")
|
||||||
|
end_stream = False
|
||||||
|
self._quic.send_stream_data(stream_id, bytes(query.pack()), end_stream)
|
||||||
|
waiter = self._loop.create_future()
|
||||||
|
self._ack_waiter = waiter
|
||||||
|
self.transmit()
|
||||||
|
|
||||||
|
return await asyncio.shield(waiter)
|
||||||
|
|
||||||
|
def quic_event_received(self, event: QuicEvent) -> None:
|
||||||
|
if self._ack_waiter is not None:
|
||||||
|
if isinstance(event, StreamDataReceived):
|
||||||
|
answer = DNSRecord.parse(event.data)
|
||||||
|
logger.info(answer)
|
||||||
|
waiter = self._ack_waiter
|
||||||
|
self._ack_waiter = None
|
||||||
|
waiter.set_result(None)
|
||||||
|
|
||||||
|
|
||||||
|
def save_session_ticket(ticket):
|
||||||
|
"""
|
||||||
|
Callback which is invoked by the TLS engine when a new session ticket
|
||||||
|
is received.
|
||||||
|
"""
|
||||||
|
logger.info("New session ticket received")
|
||||||
|
if args.session_ticket:
|
||||||
|
with open(args.session_ticket, "wb") as fp:
|
||||||
|
pickle.dump(ticket, fp)
|
||||||
|
|
||||||
|
|
||||||
|
async def run(
|
||||||
|
configuration: QuicConfiguration,
|
||||||
|
host: str,
|
||||||
|
port: int,
|
||||||
|
query_type: str,
|
||||||
|
dns_query: str,
|
||||||
|
) -> None:
|
||||||
|
logger.debug(f"Connecting to {host}:{port}")
|
||||||
|
async with connect(
|
||||||
|
host,
|
||||||
|
port,
|
||||||
|
configuration=configuration,
|
||||||
|
session_ticket_handler=save_session_ticket,
|
||||||
|
create_protocol=DoQClient,
|
||||||
|
) as client:
|
||||||
|
client = cast(DoQClient, client)
|
||||||
|
logger.debug("Sending DNS query")
|
||||||
|
await client.query(query_type, dns_query)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser(description="DNS over QUIC client")
|
||||||
|
parser.add_argument("-t", "--type", type=str, help="Type of record to ")
|
||||||
|
parser.add_argument(
|
||||||
|
"--host",
|
||||||
|
type=str,
|
||||||
|
default="localhost",
|
||||||
|
help="The remote peer's host name or IP address",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--port", type=int, default=784, help="The remote peer's port number"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-k",
|
||||||
|
"--insecure",
|
||||||
|
action="store_true",
|
||||||
|
help="do not validate server certificate",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--ca-certs", type=str, help="load CA certificates from the specified file"
|
||||||
|
)
|
||||||
|
parser.add_argument("--dns_type", help="The DNS query type to send")
|
||||||
|
parser.add_argument("--query", help="Domain to query")
|
||||||
|
parser.add_argument(
|
||||||
|
"-q", "--quic-log", type=str, help="log QUIC events to a file in QLOG format"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-l",
|
||||||
|
"--secrets-log",
|
||||||
|
type=str,
|
||||||
|
help="log secrets to a file, for use with Wireshark",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-s",
|
||||||
|
"--session-ticket",
|
||||||
|
type=str,
|
||||||
|
help="read and write session ticket from the specified file",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-v", "--verbose", action="store_true", help="increase logging verbosity"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
format="%(asctime)s %(levelname)s %(name)s %(message)s",
|
||||||
|
level=logging.DEBUG if args.verbose else logging.INFO,
|
||||||
|
)
|
||||||
|
|
||||||
|
configuration = QuicConfiguration(
|
||||||
|
alpn_protocols=["dq"], is_client=True, max_datagram_frame_size=65536
|
||||||
|
)
|
||||||
|
if args.ca_certs:
|
||||||
|
configuration.load_verify_locations(args.ca_certs)
|
||||||
|
if args.insecure:
|
||||||
|
configuration.verify_mode = ssl.CERT_NONE
|
||||||
|
if args.quic_log:
|
||||||
|
configuration.quic_logger = QuicLogger()
|
||||||
|
if args.secrets_log:
|
||||||
|
configuration.secrets_log_file = open(args.secrets_log, "a")
|
||||||
|
if args.session_ticket:
|
||||||
|
try:
|
||||||
|
with open(args.session_ticket, "rb") as fp:
|
||||||
|
configuration.session_ticket = pickle.load(fp)
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.debug(f"Unable to read {args.session_ticket}")
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
logger.debug("No session ticket defined...")
|
||||||
|
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
try:
|
||||||
|
loop.run_until_complete(
|
||||||
|
run(
|
||||||
|
configuration=configuration,
|
||||||
|
host=args.host,
|
||||||
|
port=args.port,
|
||||||
|
query_type=args.dns_type,
|
||||||
|
dns_query=args.query,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
if configuration.quic_logger is not None:
|
||||||
|
with open(args.quic_log, "w") as logger_fp:
|
||||||
|
json.dump(configuration.quic_logger.to_dict(), logger_fp, indent=4)
|
167
tests/wpt/web-platform-tests/tools/third_party/aioquic/examples/doq_server.py
vendored
Normal file
167
tests/wpt/web-platform-tests/tools/third_party/aioquic/examples/doq_server.py
vendored
Normal file
|
@ -0,0 +1,167 @@
|
||||||
|
import argparse
|
||||||
|
import asyncio
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
from typing import Dict, Optional
|
||||||
|
|
||||||
|
from dnslib.dns import DNSRecord
|
||||||
|
|
||||||
|
from aioquic.asyncio import QuicConnectionProtocol, serve
|
||||||
|
from aioquic.quic.configuration import QuicConfiguration
|
||||||
|
from aioquic.quic.connection import QuicConnection
|
||||||
|
from aioquic.quic.events import ProtocolNegotiated, QuicEvent, StreamDataReceived
|
||||||
|
from aioquic.quic.logger import QuicLogger
|
||||||
|
from aioquic.tls import SessionTicket
|
||||||
|
|
||||||
|
try:
|
||||||
|
import uvloop
|
||||||
|
except ImportError:
|
||||||
|
uvloop = None
|
||||||
|
|
||||||
|
|
||||||
|
class DnsConnection:
|
||||||
|
def __init__(self, quic: QuicConnection):
|
||||||
|
self._quic = quic
|
||||||
|
|
||||||
|
def do_query(self, payload) -> bytes:
|
||||||
|
q = DNSRecord.parse(payload)
|
||||||
|
return q.send(self.resolver(), 53)
|
||||||
|
|
||||||
|
def resolver(self) -> str:
|
||||||
|
return args.resolver
|
||||||
|
|
||||||
|
def handle_event(self, event: QuicEvent) -> None:
|
||||||
|
if isinstance(event, StreamDataReceived):
|
||||||
|
data = self.do_query(event.data)
|
||||||
|
end_stream = False
|
||||||
|
self._quic.send_stream_data(event.stream_id, data, end_stream)
|
||||||
|
|
||||||
|
|
||||||
|
class DnsServerProtocol(QuicConnectionProtocol):
|
||||||
|
|
||||||
|
# -00 specifies 'dq', 'doq', and 'doq-h00' (the latter obviously tying to
|
||||||
|
# the version of the draft it matches). This is confusing, so we'll just
|
||||||
|
# support them all, until future drafts define conflicting behaviour.
|
||||||
|
SUPPORTED_ALPNS = ["dq", "doq", "doq-h00"]
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self._dns: Optional[DnsConnection] = None
|
||||||
|
|
||||||
|
def quic_event_received(self, event: QuicEvent):
|
||||||
|
if isinstance(event, ProtocolNegotiated):
|
||||||
|
if event.alpn_protocol in DnsServerProtocol.SUPPORTED_ALPNS:
|
||||||
|
self._dns = DnsConnection(self._quic)
|
||||||
|
if self._dns is not None:
|
||||||
|
self._dns.handle_event(event)
|
||||||
|
|
||||||
|
|
||||||
|
class SessionTicketStore:
|
||||||
|
"""
|
||||||
|
Simple in-memory store for session tickets.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.tickets: Dict[bytes, SessionTicket] = {}
|
||||||
|
|
||||||
|
def add(self, ticket: SessionTicket) -> None:
|
||||||
|
self.tickets[ticket.ticket] = ticket
|
||||||
|
|
||||||
|
def pop(self, label: bytes) -> Optional[SessionTicket]:
|
||||||
|
return self.tickets.pop(label, None)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="DNS over QUIC server")
|
||||||
|
parser.add_argument(
|
||||||
|
"--host",
|
||||||
|
type=str,
|
||||||
|
default="::",
|
||||||
|
help="listen on the specified address (defaults to ::)",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--port",
|
||||||
|
type=int,
|
||||||
|
default=4784,
|
||||||
|
help="listen on the specified port (defaults to 4784)",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-k",
|
||||||
|
"--private-key",
|
||||||
|
type=str,
|
||||||
|
required=True,
|
||||||
|
help="load the TLS private key from the specified file",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-c",
|
||||||
|
"--certificate",
|
||||||
|
type=str,
|
||||||
|
required=True,
|
||||||
|
help="load the TLS certificate from the specified file",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-r",
|
||||||
|
"--resolver",
|
||||||
|
type=str,
|
||||||
|
default="8.8.8.8",
|
||||||
|
help="Upstream Classic DNS resolver to use",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-s",
|
||||||
|
"--stateless-retry",
|
||||||
|
action="store_true",
|
||||||
|
help="send a stateless retry for new connections",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-q", "--quic-log", type=str, help="log QUIC events to a file in QLOG format"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-v", "--verbose", action="store_true", help="increase logging verbosity"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
format="%(asctime)s %(levelname)s %(name)s %(message)s",
|
||||||
|
level=logging.DEBUG if args.verbose else logging.INFO,
|
||||||
|
)
|
||||||
|
|
||||||
|
if args.quic_log:
|
||||||
|
quic_logger = QuicLogger()
|
||||||
|
else:
|
||||||
|
quic_logger = None
|
||||||
|
|
||||||
|
configuration = QuicConfiguration(
|
||||||
|
alpn_protocols=["dq"],
|
||||||
|
is_client=False,
|
||||||
|
max_datagram_frame_size=65536,
|
||||||
|
quic_logger=quic_logger,
|
||||||
|
)
|
||||||
|
|
||||||
|
configuration.load_cert_chain(args.certificate, args.private_key)
|
||||||
|
|
||||||
|
ticket_store = SessionTicketStore()
|
||||||
|
|
||||||
|
if uvloop is not None:
|
||||||
|
uvloop.install()
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
loop.run_until_complete(
|
||||||
|
serve(
|
||||||
|
args.host,
|
||||||
|
args.port,
|
||||||
|
configuration=configuration,
|
||||||
|
create_protocol=DnsServerProtocol,
|
||||||
|
session_ticket_fetcher=ticket_store.pop,
|
||||||
|
session_ticket_handler=ticket_store.add,
|
||||||
|
stateless_retry=args.stateless_retry,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
loop.run_forever()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
if configuration.quic_logger is not None:
|
||||||
|
with open(args.quic_log, "w") as logger_fp:
|
||||||
|
json.dump(configuration.quic_logger.to_dict(), logger_fp, indent=4)
|
|
@ -1,29 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
destdir=$1
|
|
||||||
cachedir=$1.$PYTHON_ARCH
|
|
||||||
|
|
||||||
for d in openssl $destdir; do
|
|
||||||
if [ -e $d ]; then
|
|
||||||
rm -rf $d
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ ! -e $cachedir ]; then
|
|
||||||
# build openssl
|
|
||||||
mkdir openssl
|
|
||||||
curl -L https://www.openssl.org/source/openssl-1.1.1f.tar.gz | tar xz -C openssl --strip-components 1
|
|
||||||
cd openssl
|
|
||||||
|
|
||||||
./config no-comp no-shared no-tests
|
|
||||||
make
|
|
||||||
|
|
||||||
mkdir $cachedir
|
|
||||||
mkdir $cachedir/lib
|
|
||||||
cp -R include $cachedir
|
|
||||||
cp libcrypto.a libssl.a $cachedir/lib
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp -R $cachedir $destdir
|
|
|
@ -1,39 +0,0 @@
|
||||||
set destdir=%1
|
|
||||||
set cachedir=%1.%PYTHON_ARCH%
|
|
||||||
|
|
||||||
for %%d in (openssl %destdir%) do (
|
|
||||||
if exist %%d (
|
|
||||||
rmdir /s /q %%d
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if %PYTHON_ARCH% == 64 (
|
|
||||||
set OPENSSL_CONFIG=VC-WIN64A
|
|
||||||
set VC_ARCH=x64
|
|
||||||
) else (
|
|
||||||
set OPENSSL_CONFIG=VC-WIN32
|
|
||||||
set VC_ARCH=x86
|
|
||||||
)
|
|
||||||
|
|
||||||
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %VC_ARCH%
|
|
||||||
SET PATH=%PATH%;C:\Program Files\NASM
|
|
||||||
|
|
||||||
if not exist %cachedir% (
|
|
||||||
mkdir openssl
|
|
||||||
curl -L https://www.openssl.org/source/openssl-1.1.1f.tar.gz -o openssl.tar.gz
|
|
||||||
tar xzf openssl.tar.gz -C openssl --strip-components 1
|
|
||||||
cd openssl
|
|
||||||
|
|
||||||
perl Configure no-comp no-shared no-tests %OPENSSL_CONFIG%
|
|
||||||
nmake
|
|
||||||
|
|
||||||
mkdir %cachedir%
|
|
||||||
mkdir %cachedir%\include
|
|
||||||
mkdir %cachedir%\lib
|
|
||||||
xcopy include %cachedir%\include\ /E
|
|
||||||
copy libcrypto.lib %cachedir%\lib\
|
|
||||||
copy libssl.lib %cachedir%\lib\
|
|
||||||
)
|
|
||||||
|
|
||||||
mkdir %destdir%
|
|
||||||
xcopy %cachedir% %destdir% /E
|
|
61
tests/wpt/web-platform-tests/tools/third_party/aioquic/scripts/fetch-vendor
vendored
Executable file
61
tests/wpt/web-platform-tests/tools/third_party/aioquic/scripts/fetch-vendor
vendored
Executable file
|
@ -0,0 +1,61 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import logging
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import struct
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def get_platform():
|
||||||
|
if sys.platform == "linux":
|
||||||
|
return "manylinux_%s" % os.uname().machine
|
||||||
|
elif sys.platform == "darwin":
|
||||||
|
return "macosx_%s" % os.uname().machine
|
||||||
|
elif sys.platform == "win32":
|
||||||
|
return "win%s" % (struct.calcsize("P") * 8)
|
||||||
|
else:
|
||||||
|
raise Exception("Unsupported platfom %s" % sys.platform)
|
||||||
|
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="Fetch and extract tarballs")
|
||||||
|
parser.add_argument("destination_dir")
|
||||||
|
parser.add_argument("--cache-dir", default="tarballs")
|
||||||
|
parser.add_argument("--config-file", default=__file__ + ".json")
|
||||||
|
args = parser.parse_args()
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
# work around buggy 'tar' executable on Windows
|
||||||
|
if sys.platform == "win32":
|
||||||
|
os.environ["PATH"] = "C:\\Program Files\\Git\\usr\\bin;" + os.environ["PATH"]
|
||||||
|
|
||||||
|
# read config file
|
||||||
|
with open(args.config_file, "r") as fp:
|
||||||
|
config = json.load(fp)
|
||||||
|
|
||||||
|
# create fresh destination directory
|
||||||
|
logging.info("Creating directory %s" % args.destination_dir)
|
||||||
|
if os.path.exists(args.destination_dir):
|
||||||
|
shutil.rmtree(args.destination_dir)
|
||||||
|
os.mkdir(args.destination_dir)
|
||||||
|
|
||||||
|
for url_template in config["urls"]:
|
||||||
|
tarball_url = url_template.replace("{platform}", get_platform())
|
||||||
|
|
||||||
|
# download tarball
|
||||||
|
tarball_name = tarball_url.split("/")[-1]
|
||||||
|
tarball_file = os.path.join(args.cache_dir, tarball_name)
|
||||||
|
if not os.path.exists(tarball_file):
|
||||||
|
logging.info("Downloading %s" % tarball_url)
|
||||||
|
if not os.path.exists(args.cache_dir):
|
||||||
|
os.mkdir(args.cache_dir)
|
||||||
|
subprocess.check_call(
|
||||||
|
["curl", "--location", "--output", tarball_file, "--silent", tarball_url]
|
||||||
|
)
|
||||||
|
|
||||||
|
# extract tarball
|
||||||
|
logging.info("Extracting %s" % tarball_name)
|
||||||
|
subprocess.check_call(["tar", "-C", args.destination_dir, "-xf", tarball_file])
|
3
tests/wpt/web-platform-tests/tools/third_party/aioquic/scripts/fetch-vendor.json
vendored
Normal file
3
tests/wpt/web-platform-tests/tools/third_party/aioquic/scripts/fetch-vendor.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"urls": ["https://github.com/aiortc/aioquic-openssl/releases/download/1.1.1f-1/openssl-{platform}.tar.bz2"]
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue