mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +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]
|
||||
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]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
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]
|
||||
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
|
||||
|
||||
|
|
|
@ -11,9 +11,3 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20'NosniFF']
|
||||
expected: FAIL
|
||||
|
||||
[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]
|
||||
expected: FAIL
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
expected: TIMEOUT
|
||||
[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]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[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]
|
||||
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]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Sanity check: this all works as expected with no promises involved]
|
||||
expected: FAIL
|
||||
|
@ -15,5 +16,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[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": [
|
||||
"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": [
|
||||
"e52aa26ef209dccb54f0362ca4a30964904ce7b0",
|
||||
[
|
||||
|
@ -143633,7 +143662,7 @@
|
|||
]
|
||||
],
|
||||
"grid-items-sizing-alignment-001.html": [
|
||||
"3f5aa32e81e1489533b336eb9d08f6047eb6dd02",
|
||||
"033d292ce61026251ada1812d195412e5d0f5672",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -144965,7 +144994,7 @@
|
|||
]
|
||||
],
|
||||
"grid-as-flex-item-should-not-shrink-to-fit-001.html": [
|
||||
"439cb2d665d28c6f6d3100c52d3688013c9267b8",
|
||||
"e0665d56a1a55ecd41a9ae384e822c8662740d39",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -144978,7 +145007,7 @@
|
|||
]
|
||||
],
|
||||
"grid-as-flex-item-should-not-shrink-to-fit-002.html": [
|
||||
"a8ddc06aec7de434f8e15a59dac10c8b121b8f7e",
|
||||
"4ddafecb849aae77d6637939bd52b958392d44ab",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -144991,7 +145020,7 @@
|
|||
]
|
||||
],
|
||||
"grid-as-flex-item-should-not-shrink-to-fit-003.html": [
|
||||
"2a3da508f3fb311f37d75420d2f6b7f941cecfa6",
|
||||
"73d204490ac82ec1a8ef32adb0c1480e534260dc",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -145004,7 +145033,7 @@
|
|||
]
|
||||
],
|
||||
"grid-as-flex-item-should-not-shrink-to-fit-004.html": [
|
||||
"70fc92c1d0d28d26c8bcf3b8f927c2a0c2c88aa3",
|
||||
"c3f9d9c0d161e1dc6ff0b8d7dc19638e0c28fd15",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -145017,7 +145046,7 @@
|
|||
]
|
||||
],
|
||||
"grid-as-flex-item-should-not-shrink-to-fit-005.html": [
|
||||
"4ca1525dcc8a1ae33af375a59660330f593133cb",
|
||||
"4443314950835c4586f2edd805b47a4074f36c7b",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -145030,7 +145059,33 @@
|
|||
]
|
||||
],
|
||||
"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,
|
||||
[
|
||||
|
@ -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": {
|
||||
"multiline-placeholder-cr.html": [
|
||||
"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": [
|
||||
"194de216d38580ec5f1fc187b99c225ca5c95b6d",
|
||||
[
|
||||
|
@ -287222,6 +287305,10 @@
|
|||
"439747a9ff2e21613c7cb5a6cb8fc8cb1311fd1e",
|
||||
[]
|
||||
],
|
||||
"subpixel-repeat-no-repeat-mix-ref.html": [
|
||||
"d2c2722627e38d7a9ca1b3cbf1eda45e0eef62f7",
|
||||
[]
|
||||
],
|
||||
"ttwf-reftest-borderRadius-ref.html": [
|
||||
"dcb590dfea60d956f7c945519396d2434e21d298",
|
||||
[]
|
||||
|
@ -287236,6 +287323,14 @@
|
|||
"e45bbbe5c5760d905db4bf015b5b7faa27467c7f",
|
||||
[]
|
||||
],
|
||||
"green-bottom.png": [
|
||||
"edd853b1796f377b5a8b5eb125ed343f61295b0d",
|
||||
[]
|
||||
],
|
||||
"green-right.png": [
|
||||
"a6eda0a121822909a888902ed4bee16a0f92fe88",
|
||||
[]
|
||||
],
|
||||
"green1x50.png": [
|
||||
"4540a11478baaeaa40bf8797bfa0d0e382d13777",
|
||||
[]
|
||||
|
@ -297519,7 +297614,7 @@
|
|||
[]
|
||||
],
|
||||
"grid-items-sizing-alignment-001-ref.html": [
|
||||
"859483cf5d19dc53c1b1d047a6a3bfac2ed753e3",
|
||||
"c3eccf48eb29c531f0397502a0d5faf0a8223f76",
|
||||
[]
|
||||
],
|
||||
"percentage-size-replaced-subitems-001-ref.html": [
|
||||
|
@ -317353,19 +317448,11 @@
|
|||
"e1387f50deead65859267b376367a5eb2a92482d",
|
||||
[]
|
||||
],
|
||||
"font-display-document-policy-report-only.tentative.sub.html": [
|
||||
"e298896b2f51d7780dc0a8b50c636e83d79d2693",
|
||||
[]
|
||||
],
|
||||
"font-display-document-policy-report-only.tentative.sub.html.headers": [
|
||||
"font-display-document-policy-report-only.tentative.html.headers": [
|
||||
"e090edd0da42f4e98c400f84fb42232adbe95ab6",
|
||||
[]
|
||||
],
|
||||
"font-display-document-policy-reporting.tentative.sub.html": [
|
||||
"e298896b2f51d7780dc0a8b50c636e83d79d2693",
|
||||
[]
|
||||
],
|
||||
"font-display-document-policy-reporting.tentative.sub.html.headers": [
|
||||
"font-display-document-policy-reporting.tentative.html.headers": [
|
||||
"84ad7cbf97bcbfd9f56bfeef5bc5928b8819ae4e",
|
||||
[]
|
||||
]
|
||||
|
@ -330906,6 +330993,12 @@
|
|||
[]
|
||||
]
|
||||
},
|
||||
"the-select-element": {
|
||||
"reset-algorithm-rendering-ref.html": [
|
||||
"acf192d1d55b7da110d04651093e3ebe0cd48214",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"the-textarea-element": {
|
||||
"multiline-placeholder-ref.html": [
|
||||
"0234ed64c9ad7155a42b254a5fe35a39535cbff8",
|
||||
|
@ -337005,7 +337098,7 @@
|
|||
[]
|
||||
],
|
||||
"pointerevent_support.js": [
|
||||
"8dbedf21686c0466578ef21abcfc8b3d80727156",
|
||||
"7f291d7609a10be9756bbafd7a5672f5c215a6a1",
|
||||
[]
|
||||
],
|
||||
"pointerlock": {
|
||||
|
@ -339513,7 +339606,7 @@
|
|||
]
|
||||
},
|
||||
"idlharness.js": [
|
||||
"02233ee0d33de23a5bdfb36db550c751b1c2cabd",
|
||||
"cb66fcaa98c06d4f9b0b8136649c1f7119fe75b7",
|
||||
[]
|
||||
],
|
||||
"idlharness.js.headers": [
|
||||
|
@ -344151,7 +344244,7 @@
|
|||
[]
|
||||
],
|
||||
"safari-technology-preview.rb": [
|
||||
"eae03474a49ff7bece32daf482390025c3ce9e2a",
|
||||
"c7d83bab9be5a2e152b0f4d0e81f37a387348f8f",
|
||||
[]
|
||||
],
|
||||
"system_info.yml": [
|
||||
|
@ -344736,7 +344829,7 @@
|
|||
[]
|
||||
],
|
||||
"requirements.txt": [
|
||||
"165260c78f7ac8579bd911bcf9cce63645c80e45",
|
||||
"c66414cb7512860211049fc85feae6dac458e517",
|
||||
[]
|
||||
],
|
||||
"serve.py": [
|
||||
|
@ -344867,7 +344960,7 @@
|
|||
".github": {
|
||||
"workflows": {
|
||||
"tests.yml": [
|
||||
"d19b21d74588e0b517d6e97e47c6aec6faef06a7",
|
||||
"c244de93569b7784005641a658171d9c7aa526a9",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -344885,7 +344978,7 @@
|
|||
[]
|
||||
],
|
||||
"README.rst": [
|
||||
"2322042c24dd266dea1b7284364e9a5cceb66a7e",
|
||||
"20d502a7700ba79d57b4267991241781dd9a7469",
|
||||
[]
|
||||
],
|
||||
"docs": {
|
||||
|
@ -344923,10 +345016,22 @@
|
|||
]
|
||||
},
|
||||
"examples": {
|
||||
"README.rst": [
|
||||
"5d4af57d5144af13e42d797ba309f974c635758b",
|
||||
[]
|
||||
],
|
||||
"demo.py": [
|
||||
"fd4f9752f14c797f429277379d076dd56ace9203",
|
||||
[]
|
||||
],
|
||||
"doq_client.py": [
|
||||
"06c1a44f028cb59692c940719517f13dcb4f10a3",
|
||||
[]
|
||||
],
|
||||
"doq_server.py": [
|
||||
"f3347fe6c18963e0596a8688a5ec6eba284d0256",
|
||||
[]
|
||||
],
|
||||
"htdocs": {
|
||||
"robots.txt": [
|
||||
"51aa0bdeaace6372a7eb13010fd1666c65546864",
|
||||
|
@ -344975,12 +345080,12 @@
|
|||
]
|
||||
},
|
||||
"scripts": {
|
||||
"build-openssl": [
|
||||
"94ded72c1724bb00432328c5e229ba73762c5e40",
|
||||
"fetch-vendor": [
|
||||
"a06d62371478d427c95f5225db4300f7a1a85822",
|
||||
[]
|
||||
],
|
||||
"build-openssl.bat": [
|
||||
"610079ddf8320f754bd9422157e6543946d600e5",
|
||||
"fetch-vendor.json": [
|
||||
"f280235beb03848a3486aa97b1c39f46f9b927cf",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -345015,7 +345120,7 @@
|
|||
[]
|
||||
],
|
||||
"about.py": [
|
||||
"82cd8f33d65dcbf2397d12c83c651cc899e91556",
|
||||
"98eed8d6bcc3eb357a7b00ac546942d51cc3df64",
|
||||
[]
|
||||
],
|
||||
"asyncio": {
|
||||
|
@ -345086,7 +345191,7 @@
|
|||
[]
|
||||
],
|
||||
"connection.py": [
|
||||
"461df4fc1916fda3efb461e66734ec359ae0c327",
|
||||
"0e1372cc08ba03dcb473d02ad349dcb9b34d0991",
|
||||
[]
|
||||
],
|
||||
"crypto.py": [
|
||||
|
@ -345127,7 +345232,7 @@
|
|||
]
|
||||
},
|
||||
"tls.py": [
|
||||
"30b69ff2d3227416e715dfe18b80269e0b1c259b",
|
||||
"94b10cbba5d90eb2cfe9e2ba316a437fd7784f46",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -345182,7 +345287,7 @@
|
|||
[]
|
||||
],
|
||||
"test_connection.py": [
|
||||
"af1a5cdc58f59c6e998b0d3949aa74f77d2175d8",
|
||||
"427e1c045749f6f8fe1c351800a42d9c82ad8677",
|
||||
[]
|
||||
],
|
||||
"test_crypto.py": [
|
||||
|
@ -345226,7 +345331,7 @@
|
|||
[]
|
||||
],
|
||||
"test_tls.py": [
|
||||
"72dd56deb8baeac96fcd1a3fe0bb5f9435d7c0c2",
|
||||
"be8a470f74b1ce4f994583ae837ed0ad94837b4c",
|
||||
[]
|
||||
],
|
||||
"tls_certificate.bin": [
|
||||
|
@ -353381,7 +353486,7 @@
|
|||
[]
|
||||
],
|
||||
"RTCPeerConnection-helper.js": [
|
||||
"b7ed92a9cd28d88761b71ac476393cafdcbc2130",
|
||||
"531a8a7f4ff9c1ec624d284a4c48f6d776713215",
|
||||
[]
|
||||
],
|
||||
"RTCRtpCapabilities-helper.js": [
|
||||
|
@ -385481,6 +385586,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"font-stretch-interpolation.html": [
|
||||
"f8ab6fc4a8b0650c03a2e5206504fe55fbe180ff",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"font-variation-settings-composition.html": [
|
||||
"58f037415e23801fb2c540e5ae3b032cdd4ff0c8",
|
||||
[
|
||||
|
@ -394276,6 +394388,15 @@
|
|||
]
|
||||
],
|
||||
"contain-intrinsic-size": {
|
||||
"animation": {
|
||||
"contain-intrinsic-size-interpolation.html": [
|
||||
"b739f3104f679f7ba168b2c775300b633724d5f5",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"parsing": {
|
||||
"contain-intrinsic-size-computed.html": [
|
||||
"68ec4fce76916aab977fc95eb5e07b56d6daccc8",
|
||||
|
@ -406699,14 +406820,14 @@
|
|||
},
|
||||
"font-display": {
|
||||
"font-display-document-policy-report-only.tentative.html": [
|
||||
"6111ac5df2152c00b316dc7b7fc5920c203333da",
|
||||
"03fa5b68a3ef8a587a72fba5b37fd5145307e1b0",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"font-display-document-policy-reporting.tentative.html": [
|
||||
"7ee534e78d11acbae5ca2402b13b0f746791c4d7",
|
||||
"db871d19f7e9f73419aabadb44e978579678990c",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -426673,8 +426794,15 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"response-clone-iframe.window.js": [
|
||||
"da54616c376d9105b024d668846ea5dc1c1cb143",
|
||||
[
|
||||
"fetch/api/response/response-clone-iframe.window.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"response-clone.html": [
|
||||
"f5ebd7940e1eab290acac9e118c827e9b210ad71",
|
||||
"622514168476f5e297ff3901aba2dfa5a633dfd9",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -449903,7 +450031,7 @@
|
|||
]
|
||||
],
|
||||
"user-interaction-editing-contenteditable.html": [
|
||||
"9ef867b2d3f6f41d2b75fb48c4569d13eade214d",
|
||||
"0a12b8c4f51f5c6a3935ed02f8173ea9c45453df",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -457004,6 +457132,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"form-double-submit-multiple-targets.html": [
|
||||
"2b5a589b534524fe729c20e5ec2f4092c95a4e0a",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"form-double-submit-to-different-origin-frame.html": [
|
||||
"17ad1b1899bcc207e9de66a8b08f9341e9f489d1",
|
||||
[
|
||||
|
@ -457055,6 +457190,13 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"jsurl-navigation-then-form-submit.html": [
|
||||
"93a4ea6004a49175a195e2a7844daeed26c70687",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"reparent-form-during-planned-navigation-task.html": [
|
||||
"6b50bf599b888b1c3273a4e311ba6af69d67e86b",
|
||||
[
|
||||
|
@ -476834,6 +476976,15 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"pointerevent_mouseevent_key_pressed.html": [
|
||||
"ea45adee8204c2b4a0563d95a4f54f2338572c9b",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"pointerevent_touch-action-verification.html": [
|
||||
"311d24b628e4a7897649205da157683e130dc23a",
|
||||
[
|
||||
|
@ -514231,7 +514382,7 @@
|
|||
]
|
||||
],
|
||||
"RTCDataChannel-bufferedAmount.html": [
|
||||
"89f6b1b4d7a425f2d05688d14315227454a3d4be",
|
||||
"f663941162d93e511b1a5d6be01ed79fe28c9bbf",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -514240,7 +514391,7 @@
|
|||
]
|
||||
],
|
||||
"RTCDataChannel-close.html": [
|
||||
"ea7795719c21e2aa6cfa48435f8d62b7d8c842c0",
|
||||
"00b081b2e2fd8cb8bcad2c88fa88746e717d3d26",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -514256,14 +514407,14 @@
|
|||
]
|
||||
],
|
||||
"RTCDataChannel-send-blob-order.html": [
|
||||
"f5cdb45e04c9fba648f8b2b92bcd839d43ed41d4",
|
||||
"3fcf116bc8d05036bc07136ad72b3430b4852497",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"RTCDataChannel-send.html": [
|
||||
"3a4c0f56d656fc88485a90467adfd2c56a9a142a",
|
||||
"1952921fbf26f2c6e9546000a1e9843b440824e8",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -514323,7 +514474,7 @@
|
|||
]
|
||||
],
|
||||
"RTCIceTransport.html": [
|
||||
"94dc1c461fb5b2074b4975612251a7814af045e5",
|
||||
"fe12c384e5e5b3f8ab2e2b96b740d91959d16d94",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -514393,7 +514544,7 @@
|
|||
]
|
||||
],
|
||||
"RTCPeerConnection-createDataChannel.html": [
|
||||
"dd34561fbc6658d6fb6a146254acd8f36ced210a",
|
||||
"3d2169dffac65ffbc81355b33c4c904bf5e3f067",
|
||||
[
|
||||
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]
|
||||
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]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
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]
|
||||
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
|
||||
|
||||
|
|
|
@ -11,9 +11,3 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20'NosniFF']
|
||||
expected: FAIL
|
||||
|
||||
[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]
|
||||
expected: FAIL
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[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]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[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]
|
||||
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]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Sanity check: this all works as expected with no promises involved]
|
||||
expected: FAIL
|
||||
|
@ -15,5 +16,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[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]
|
||||
type: testharness
|
||||
expected: ERROR
|
||||
[shared]
|
||||
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">
|
||||
<title>CSS Reftest Reference: Grid Item Sizing</title>
|
||||
<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>
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
grid-auto-rows: 200px;
|
||||
grid-template-columns: repeat(3, 200px);
|
||||
}
|
||||
button {
|
||||
margin: 0; /* Prevent WebKit from adding some margin */
|
||||
}
|
||||
</style>
|
||||
|
||||
<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="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')">
|
||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
||||
<style>
|
||||
body { overflow: hidden; }
|
||||
.flexbox {
|
||||
|
@ -20,13 +19,11 @@
|
|||
align-content: flex-start;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
font: 25px/1 Ahem;
|
||||
color: green;
|
||||
background: red;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
align-items: baseline;
|
||||
background: red;
|
||||
}
|
||||
.gridItem {
|
||||
background: green;
|
||||
|
@ -36,6 +33,6 @@
|
|||
<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">XX</div>
|
||||
<div class="gridItem"></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-grid">
|
||||
<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') ">
|
||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
||||
<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') ">
|
||||
<style>
|
||||
body { overflow: hidden; }
|
||||
.flexbox {
|
||||
|
@ -20,13 +19,11 @@
|
|||
align-content: stretch;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
font: 25px/1 Ahem;
|
||||
color: green;
|
||||
background: red;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
align-items: baseline;
|
||||
background: red;
|
||||
}
|
||||
.gridItem {
|
||||
background: green;
|
||||
|
@ -36,6 +33,6 @@
|
|||
<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">XX</div>
|
||||
<div class="gridItem"></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-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 inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
||||
<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')">
|
||||
<style>
|
||||
body { overflow: hidden; }
|
||||
.flexbox {
|
||||
|
@ -20,13 +19,11 @@
|
|||
align-content: flex-start;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
font: 25px/1 Ahem;
|
||||
color: green;
|
||||
background: red;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
align-items: baseline;
|
||||
background: red;
|
||||
}
|
||||
.gridItem {
|
||||
background: green;
|
||||
|
@ -37,6 +34,6 @@
|
|||
<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">XX</div>
|
||||
<div class="gridItem"></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-grid">
|
||||
<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') ">
|
||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
||||
<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') ">
|
||||
<style>
|
||||
body { overflow: hidden; }
|
||||
.flexbox {
|
||||
|
@ -20,12 +19,10 @@
|
|||
align-content: stretch;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
font: 25px/1 Ahem;
|
||||
color: green;
|
||||
background: red;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
background: red;
|
||||
}
|
||||
.gridItem {
|
||||
background: green;
|
||||
|
@ -36,6 +33,6 @@
|
|||
<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">XX</div>
|
||||
<div class="gridItem"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
<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 inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
|
||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
||||
<style>
|
||||
body { overflow: hidden; }
|
||||
.flexbox {
|
||||
|
@ -20,13 +19,11 @@
|
|||
align-content: flex-start;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
font: 25px/1 Ahem;
|
||||
color: green;
|
||||
background: red;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
align-items: start;
|
||||
background: red;
|
||||
}
|
||||
.gridItem {
|
||||
background: green;
|
||||
|
@ -36,6 +33,6 @@
|
|||
<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">XX</div>
|
||||
<div class="gridItem"></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-grid">
|
||||
<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') ">
|
||||
<link rel="stylesheet" href="/fonts/ahem.css">
|
||||
<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') ">
|
||||
<style>
|
||||
body { overflow: hidden; }
|
||||
.flexbox {
|
||||
|
@ -20,13 +19,11 @@
|
|||
justify-content: stretch;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
font: 25px/1 Ahem;
|
||||
color: green;
|
||||
background: red;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
align-items: start;
|
||||
background: red;
|
||||
}
|
||||
.gridItem {
|
||||
background: green;
|
||||
|
@ -36,6 +33,6 @@
|
|||
<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">XX</div>
|
||||
<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'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,86 +1,72 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Test for font-display-late-swap feature policy set to report-only</title>
|
||||
<link rel="help"
|
||||
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/testharnessreport.js'></script>
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p>
|
||||
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').
|
||||
</p>
|
||||
<table id="container">
|
||||
<tr>
|
||||
<head>
|
||||
<title>Test for font-display-late-swap feature policy set to report-only</title>
|
||||
<link rel="help" 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/testharnessreport.js'></script>
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
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').
|
||||
</p>
|
||||
<table id="container">
|
||||
<tr>
|
||||
<th>not-set</th>
|
||||
<th>auto</th>
|
||||
<th>block</th>
|
||||
<th>swap</th>
|
||||
<th>fallback</th>
|
||||
<th>optional</th>
|
||||
</tr>
|
||||
</table>
|
||||
<script>
|
||||
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
|
||||
const table = document.getElementById('container');
|
||||
const t = async_test('font-display-late-swap Report Format');
|
||||
</tr>
|
||||
</table>
|
||||
<script>
|
||||
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
|
||||
const table = document.getElementById('container');
|
||||
|
||||
function makeFontFaceDeclaration(family, display) {
|
||||
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}; }`;
|
||||
}
|
||||
function makeFontFaceDeclaration(family, display) {
|
||||
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 + '; }';
|
||||
}
|
||||
|
||||
window.onload = () => {
|
||||
let tr = document.createElement('tr');
|
||||
for (let display of fontDisplayValues) {
|
||||
window.onload = () => {
|
||||
let tr = document.createElement('tr');
|
||||
for (let display of fontDisplayValues) {
|
||||
const family = display + '-face';
|
||||
const rule = makeFontFaceDeclaration(family, display);
|
||||
|
||||
// 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
|
||||
}, '*');
|
||||
});
|
||||
|
||||
document.styleSheets[0].insertRule(rule, 0);
|
||||
let td = document.createElement('td');
|
||||
td.appendChild(iframe);
|
||||
td.textContent = 'a';
|
||||
td.style.fontFamily = family + ', Arial';
|
||||
tr.appendChild(td);
|
||||
}
|
||||
table.appendChild(tr);
|
||||
}
|
||||
table.appendChild(tr);
|
||||
}
|
||||
|
||||
let reportCounter = 4;
|
||||
window.onmessage = t.step_func((e) => {
|
||||
const reports = JSON.parse(e.data);
|
||||
assert_equals(reports.length, 1);
|
||||
check_report_format(reports[0]);
|
||||
});
|
||||
let reportCounter = 4;
|
||||
let t = async_test('font-display-late-swap Report Format');
|
||||
|
||||
let check_report_format = (report) => {
|
||||
reportCounter--;
|
||||
assert_equals(report.type, 'document-policy-violation');
|
||||
assert_equals(report.url, document.getElementsByTagName('iframe')[0].contentWindow.location.href);
|
||||
assert_equals(report.body.featureId, 'font-display-late-swap');
|
||||
assert_equals(report.body.disposition, 'report');
|
||||
assert_true('sourceFile' in report.body);
|
||||
assert_true('lineNumber' in report.body);
|
||||
assert_true('columnNumber' in report.body);
|
||||
// Test is done when we have exactly 4 reports for the following
|
||||
// font-display values: not set, 'auto', 'block', 'swap'
|
||||
if (reportCounter == 0) t.done();
|
||||
};
|
||||
</script>
|
||||
</body>
|
||||
let check_report_format = (reports, observer) => {
|
||||
reportCounter -= reports.length;
|
||||
for (let report of reports) {
|
||||
assert_equals(report.type, 'document-policy-violation');
|
||||
assert_equals(report.url, document.location.href, 'Report URL');
|
||||
assert_equals(report.body.featureId, 'font-display-late-swap');
|
||||
assert_equals(report.body.disposition, 'report');
|
||||
assert_true('sourceFile' in report.body);
|
||||
assert_true('lineNumber' in report.body);
|
||||
assert_true('columnNumber' in report.body);
|
||||
}
|
||||
// Test is done when we have exactly 4 reports for the following
|
||||
// font-display values: not set, 'auto', 'block', 'swap'
|
||||
if (reportCounter == 0) t.done();
|
||||
};
|
||||
|
||||
new ReportingObserver(t.step_func(check_report_format),
|
||||
{types: ['document-policy-violation'], buffered: true}).observe();
|
||||
</script>
|
||||
</body>
|
||||
</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,86 +1,72 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Test for font-display-late-swap feature policy set to reporting</title>
|
||||
<link rel="help"
|
||||
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/testharnessreport.js'></script>
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p>
|
||||
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').
|
||||
</p>
|
||||
<table id="container">
|
||||
<tr>
|
||||
<head>
|
||||
<title>Test for font-display-late-swap feature policy set to reporting</title>
|
||||
<link rel="help" 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/testharnessreport.js'></script>
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
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').
|
||||
</p>
|
||||
<table id="container">
|
||||
<tr>
|
||||
<th>not-set</th>
|
||||
<th>auto</th>
|
||||
<th>block</th>
|
||||
<th>swap</th>
|
||||
<th>fallback</th>
|
||||
<th>optional</th>
|
||||
</tr>
|
||||
</table>
|
||||
<script>
|
||||
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
|
||||
const table = document.getElementById('container');
|
||||
const t = async_test('font-display-late-swap Report Format');
|
||||
</tr>
|
||||
</table>
|
||||
<script>
|
||||
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
|
||||
const table = document.getElementById('container');
|
||||
|
||||
function makeFontFaceDeclaration(family, display) {
|
||||
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}; }`;
|
||||
}
|
||||
function makeFontFaceDeclaration(family, display) {
|
||||
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 + '; }';
|
||||
}
|
||||
|
||||
window.onload = () => {
|
||||
let tr = document.createElement('tr');
|
||||
for (let display of fontDisplayValues) {
|
||||
window.onload = () => {
|
||||
let tr = document.createElement('tr');
|
||||
for (let display of fontDisplayValues) {
|
||||
const family = display + '-face';
|
||||
const rule = makeFontFaceDeclaration(family, display);
|
||||
|
||||
// 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
|
||||
}, '*');
|
||||
});
|
||||
|
||||
document.styleSheets[0].insertRule(rule, 0);
|
||||
let td = document.createElement('td');
|
||||
td.appendChild(iframe);
|
||||
td.textContent = 'a';
|
||||
td.style.fontFamily = family + ', Arial';
|
||||
tr.appendChild(td);
|
||||
}
|
||||
table.appendChild(tr);
|
||||
}
|
||||
table.appendChild(tr);
|
||||
}
|
||||
|
||||
let reportCounter = 4;
|
||||
window.onmessage = t.step_func((e) => {
|
||||
const reports = JSON.parse(e.data);
|
||||
assert_equals(reports.length, 1);
|
||||
check_report_format(reports[0]);
|
||||
});
|
||||
let reportCounter = 4;
|
||||
let t = async_test('font-display-late-swap Report Format');
|
||||
|
||||
let check_report_format = (report) => {
|
||||
reportCounter--;
|
||||
assert_equals(report.type, 'document-policy-violation');
|
||||
assert_equals(report.url, document.getElementsByTagName('iframe')[0].contentWindow.location.href);
|
||||
assert_equals(report.body.featureId, 'font-display-late-swap');
|
||||
assert_equals(report.body.disposition, 'enforce');
|
||||
assert_true('sourceFile' in report.body);
|
||||
assert_true('lineNumber' in report.body);
|
||||
assert_true('columnNumber' in report.body);
|
||||
// Test is done when we have exactly 4 reports for the following
|
||||
// font-display values: not set, 'auto', 'block', 'swap'
|
||||
if (reportCounter == 0) t.done();
|
||||
};
|
||||
</script>
|
||||
</body>
|
||||
let check_report_format = (reports, observer) => {
|
||||
reportCounter -= reports.length;
|
||||
for (let report of reports) {
|
||||
assert_equals(report.type, 'document-policy-violation');
|
||||
assert_equals(report.url, document.location.href, 'Report URL');
|
||||
assert_equals(report.body.featureId, 'font-display-late-swap');
|
||||
assert_equals(report.body.disposition, 'enforce');
|
||||
assert_true('sourceFile' in report.body);
|
||||
assert_true('lineNumber' in report.body);
|
||||
assert_true('columnNumber' in report.body);
|
||||
}
|
||||
// Test is done when we have exactly 4 reports for the following
|
||||
// font-display values: not set, 'auto', 'block', 'swap'
|
||||
if (reportCounter == 0) t.done();
|
||||
};
|
||||
|
||||
new ReportingObserver(t.step_func(check_report_format),
|
||||
{types: ['document-policy-violation'], buffered: true}).observe();
|
||||
</script>
|
||||
</body>
|
||||
</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) {
|
||||
clone = res.clone();
|
||||
response = res;
|
||||
return clone.arrayBuffer();
|
||||
return clone.text();
|
||||
}).then(function(r) {
|
||||
assert_equals(r.byteLength, 26);
|
||||
assert_equals(r.length, 26);
|
||||
result = r;
|
||||
return response.arrayBuffer();
|
||||
return response.text();
|
||||
}).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');
|
||||
|
||||
|
|
|
@ -1,54 +1,228 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Editing: contentEditable attribute test</title>
|
||||
<link rel="author" title="Baidu" href="mailto: guopengcheng@baidu.com"/>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#contenteditable"/>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="log"></div>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
var testElement = document.createElement("testElement");
|
||||
test(function() {
|
||||
assert_equals(testElement.contentEditable,"inherit", "check for testElement.contentEditable value");
|
||||
}, "no contentEditable attribute");
|
||||
testElement.setAttribute("contentEditable", "");
|
||||
test(function() {
|
||||
assert_true(testElement.isContentEditable, "check for testElement.isContentEditable value");
|
||||
assert_equals(testElement.contentEditable,"true", "check for testElement.contentEditable value");
|
||||
}, "empty contentEditable attribute");
|
||||
testElement.contentEditable="true";
|
||||
test(function() {
|
||||
assert_true(testElement.isContentEditable, "check for testElement.isContentEditable value");
|
||||
assert_equals(testElement.contentEditable,"true", "check for testElement.contentEditable value");
|
||||
}, "set contentEditable = \"true\"");
|
||||
testElement.contentEditable="false";
|
||||
test(function() {
|
||||
assert_false(testElement.isContentEditable, "check for testElement.isContentEditable value");
|
||||
assert_equals(testElement.contentEditable,"false", "check for testElement.contentEditable value");
|
||||
}, "set contentEditable = \"false\"");
|
||||
testElement.contentEditable="inherit";
|
||||
test(function() {
|
||||
assert_equals(testElement.contentEditable,"inherit", "check for testElement.contentEditable value");
|
||||
}, "set contentEditable = \"inherit\"");
|
||||
var childElement = document.createElement("childElement");
|
||||
testElement.appendChild(childElement);
|
||||
testElement.contentEditable="true";
|
||||
test(function() {
|
||||
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\"");
|
||||
testElement.contentEditable="false";
|
||||
test(function() {
|
||||
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\"");
|
||||
</script>
|
||||
</body>
|
||||
<head>
|
||||
<title>Editing: contentEditable attribute test</title>
|
||||
<link rel="author" title="Baidu" href="mailto: guopengcheng@baidu.com" />
|
||||
<link
|
||||
rel="help"
|
||||
href="https://html.spec.whatwg.org/multipage/#contenteditable"
|
||||
/>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="log"></div>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
test(function() {
|
||||
const testElement = document.createElement("testElement");
|
||||
|
||||
assert_equals(
|
||||
testElement.contentEditable,
|
||||
"inherit",
|
||||
"check for testElement.contentEditable value"
|
||||
);
|
||||
}, "no contentEditable attribute");
|
||||
|
||||
test(function() {
|
||||
const testElement = document.createElement("testElement");
|
||||
testElement.setAttribute("contentEditable", "");
|
||||
|
||||
assert_true(
|
||||
testElement.isContentEditable,
|
||||
"check for testElement.isContentEditable value"
|
||||
);
|
||||
|
||||
assert_equals(
|
||||
testElement.contentEditable,
|
||||
"true",
|
||||
"check for testElement.contentEditable value"
|
||||
);
|
||||
}, "empty contentEditable attribute");
|
||||
|
||||
test(function() {
|
||||
const testElement = document.createElement("testElement");
|
||||
testElement.contentEditable = "true";
|
||||
|
||||
assert_true(
|
||||
testElement.isContentEditable,
|
||||
"check for testElement.isContentEditable value"
|
||||
);
|
||||
|
||||
assert_equals(
|
||||
testElement.contentEditable,
|
||||
"true",
|
||||
"check for testElement.contentEditable value"
|
||||
);
|
||||
}, 'set contentEditable = "true"');
|
||||
|
||||
test(function() {
|
||||
const testElement = document.createElement("testElement");
|
||||
testElement.contentEditable = "false";
|
||||
|
||||
assert_false(
|
||||
testElement.isContentEditable,
|
||||
"check for testElement.isContentEditable value"
|
||||
);
|
||||
|
||||
assert_equals(
|
||||
testElement.contentEditable,
|
||||
"false",
|
||||
"check for testElement.contentEditable value"
|
||||
);
|
||||
}, 'set contentEditable = "false"');
|
||||
|
||||
test(function() {
|
||||
const testElement = document.createElement("testElement");
|
||||
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");
|
||||
testElement.appendChild(childElement);
|
||||
testElement.contentEditable = "true";
|
||||
assert_true(
|
||||
testElement.isContentEditable,
|
||||
'parent element contentEditable = "true"'
|
||||
);
|
||||
assert_equals(testElement.contentEditable, "true");
|
||||
assert_true(
|
||||
childElement.isContentEditable,
|
||||
'parent element contentEditable = "true", so childElement must be editable'
|
||||
);
|
||||
assert_equals(
|
||||
childElement.contentEditable,
|
||||
"inherit",
|
||||
'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>
|
||||
</body>
|
||||
</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();
|
||||
});
|
||||
}
|
||||
|
||||
// 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])*$/);
|
||||
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":
|
||||
assert_in_array(typeof value, ["object", "function"], "wrong type: not object or function");
|
||||
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))
|
||||
{
|
||||
throw new IdlHarnessError("Unrecognized type " + type);
|
||||
assert_true(value instanceof self[type], "wrong type: not a " + type);
|
||||
return;
|
||||
}
|
||||
|
||||
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
|
||||
if MacOS.version <= :mojave
|
||||
version '106,001-05966-20200513-86571be6-878e-411b-a5b9-65a971573fae'
|
||||
sha256 '8518c8917a9172aeb75deeb61060d353229760fd54dc85bd38a0897cc1d12105'
|
||||
version '107,001-09573-20200527-5319cd41-1eb4-412a-817a-bf376957b539'
|
||||
sha256 'c06f7ecd3fb310bc59e06010d1f8c6dbdb57dbc671070fa0d9fc69c295eb0190'
|
||||
else
|
||||
version '106,001-05890-20200513-321a69b4-de58-440e-8182-8ac03d65f6ce'
|
||||
sha256 'f3c073d9b60ff6d11f82abbc6cc131e5913e6d0f2a11f0968ae77db1b51e1e35'
|
||||
version '107,001-09514-20200527-05f7a42c-d9a0-4a60-ba12-97f2145db993'
|
||||
sha256 '50baba474a0f0c773e4907ba8b06c80171de79f15b2ee653301cfe8230d0a0ef'
|
||||
end
|
||||
|
||||
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"
|
||||
- name: Run tests
|
||||
run: |
|
||||
pip install -U pip setuptools wheel
|
||||
python -m pip install -U pip setuptools wheel
|
||||
pip install coverage
|
||||
pip install .
|
||||
coverage run -m unittest discover -v
|
||||
|
@ -84,20 +84,10 @@ jobs:
|
|||
- uses: actions/setup-python@v1
|
||||
with:
|
||||
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
|
||||
env:
|
||||
CIBW_BEFORE_BUILD: scripts/build-openssl /tmp/vendor
|
||||
CIBW_BEFORE_BUILD_WINDOWS: scripts\build-openssl.bat C:\cibw\vendor
|
||||
CIBW_BEFORE_BUILD: python scripts/fetch-vendor /tmp/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_WINDOWS: AIOQUIC_SKIP_TESTS=ipv6,loss CL="/IC:\cibw\vendor\include" LINK="/LIBPATH:C:\cibw\vendor\lib"
|
||||
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
|
||||
--------------------
|
||||
|
||||
After checking out the code using git you can run:
|
||||
`aioquic` comes with a number of examples illustrating various QUIC usecases.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ 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
|
||||
You can browse these examples here: https://github.com/aiortc/aioquic/tree/master/examples
|
||||
|
||||
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