Update web-platform-tests to revision e529eb9501876273c9612f5602bc530723a01147

This commit is contained in:
WPT Sync Bot 2020-05-29 08:21:43 +00:00
parent d7d56454b0
commit 4702cbe05c
113 changed files with 2705 additions and 1008 deletions

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[subpixel-repeat-no-repeat-mix.html]
expected: FAIL

View file

@ -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

View file

@ -2,6 +2,3 @@
[listeners are called when <iframe> is resized] [listeners are called when <iframe> is resized]
expected: FAIL expected: FAIL
[listeners are called correct number of times]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -11,9 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20'NosniFF']
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

@ -14,3 +14,6 @@
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: FAIL
[Non-HTMLElement should not support autofocus]
expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-1.html] [iframe_sandbox_popups_escaping-1.html]
expected: TIMEOUT expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html] [iframe_sandbox_popups_escaping-2.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

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

View file

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

View file

@ -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

View file

@ -0,0 +1,2 @@
[reset-algorithm-rendering.html]
expected: TIMEOUT

View file

@ -8,3 +8,6 @@
[Check that rel=noopener with target=_top does a normal load] [Check that rel=noopener with target=_top does a normal load]
expected: FAIL expected: FAIL
[Check that rel=noopener with target=_self does a normal load]
expected: FAIL

View file

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

View file

@ -1,9 +1,10 @@
[promise-job-entry.html] [promise-job-entry.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise] [Fulfillment handler on fulfilled promise]
expected: FAIL expected: FAIL
[Rejection handler on pending-then-rejected promise] [Rejection handler on pending-then-rejected promise]
expected: FAIL expected: TIMEOUT
[Sanity check: this all works as expected with no promises involved] [Sanity check: this all works as expected with no promises involved]
expected: FAIL expected: FAIL
@ -15,5 +16,5 @@
expected: FAIL expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise] [Fulfillment handler on pending-then-fulfilled promise]
expected: FAIL expected: TIMEOUT

View file

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

View file

@ -0,0 +1,5 @@
[003.html]
expected: ERROR
[shared]
expected: FAIL

View file

@ -481,6 +481,22 @@
] ]
] ]
}, },
"nodes": {
"DOMImplementation-createDocument-with-null-browsing-context-crash.html": [
"c9393d0a095b00efc71b4030ea2cfcecaa94d805",
[
null,
{}
]
],
"DOMImplementation-createHTMLDocument-with-null-browsing-context-crash.html": [
"d0cd6f1f74b22aa0785922769030094f1bcd8ec2",
[
null,
{}
]
]
},
"svg-insert-crash.html": [ "svg-insert-crash.html": [
"539fb1fae7057a2d331d6c5f8e4a07efab6bc98a", "539fb1fae7057a2d331d6c5f8e4a07efab6bc98a",
[ [
@ -122846,6 +122862,19 @@
{} {}
] ]
], ],
"subpixel-repeat-no-repeat-mix.html": [
"1828b974877c2dc780388f044126d0499cc5f9fb",
[
null,
[
[
"/css/css-backgrounds/reference/subpixel-repeat-no-repeat-mix-ref.html",
"=="
]
],
{}
]
],
"table-cell-background-local.html": [ "table-cell-background-local.html": [
"e52aa26ef209dccb54f0362ca4a30964904ce7b0", "e52aa26ef209dccb54f0362ca4a30964904ce7b0",
[ [
@ -143633,7 +143662,7 @@
] ]
], ],
"grid-items-sizing-alignment-001.html": [ "grid-items-sizing-alignment-001.html": [
"3f5aa32e81e1489533b336eb9d08f6047eb6dd02", "033d292ce61026251ada1812d195412e5d0f5672",
[ [
null, null,
[ [
@ -144965,7 +144994,7 @@
] ]
], ],
"grid-as-flex-item-should-not-shrink-to-fit-001.html": [ "grid-as-flex-item-should-not-shrink-to-fit-001.html": [
"439cb2d665d28c6f6d3100c52d3688013c9267b8", "e0665d56a1a55ecd41a9ae384e822c8662740d39",
[ [
null, null,
[ [
@ -144978,7 +145007,7 @@
] ]
], ],
"grid-as-flex-item-should-not-shrink-to-fit-002.html": [ "grid-as-flex-item-should-not-shrink-to-fit-002.html": [
"a8ddc06aec7de434f8e15a59dac10c8b121b8f7e", "4ddafecb849aae77d6637939bd52b958392d44ab",
[ [
null, null,
[ [
@ -144991,7 +145020,7 @@
] ]
], ],
"grid-as-flex-item-should-not-shrink-to-fit-003.html": [ "grid-as-flex-item-should-not-shrink-to-fit-003.html": [
"2a3da508f3fb311f37d75420d2f6b7f941cecfa6", "73d204490ac82ec1a8ef32adb0c1480e534260dc",
[ [
null, null,
[ [
@ -145004,7 +145033,7 @@
] ]
], ],
"grid-as-flex-item-should-not-shrink-to-fit-004.html": [ "grid-as-flex-item-should-not-shrink-to-fit-004.html": [
"70fc92c1d0d28d26c8bcf3b8f927c2a0c2c88aa3", "c3f9d9c0d161e1dc6ff0b8d7dc19638e0c28fd15",
[ [
null, null,
[ [
@ -145017,7 +145046,7 @@
] ]
], ],
"grid-as-flex-item-should-not-shrink-to-fit-005.html": [ "grid-as-flex-item-should-not-shrink-to-fit-005.html": [
"4ca1525dcc8a1ae33af375a59660330f593133cb", "4443314950835c4586f2edd805b47a4074f36c7b",
[ [
null, null,
[ [
@ -145030,7 +145059,33 @@
] ]
], ],
"grid-as-flex-item-should-not-shrink-to-fit-006.html": [ "grid-as-flex-item-should-not-shrink-to-fit-006.html": [
"43051f9ac3d94d21e944c6e18df3c1dbf0b2f110", "7be46cd3b682af613dd9bd0a1daf4a293ba80619",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"grid-as-flex-item-should-not-shrink-to-fit-007.html": [
"ab0e591b8fc39a9b08018effb488a34b324fcafa",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"grid-as-flex-item-should-not-shrink-to-fit-008.html": [
"183a607f53a99b3172cc844828684043bd5555de",
[ [
null, null,
[ [
@ -233955,6 +234010,21 @@
] ]
] ]
}, },
"the-select-element": {
"reset-algorithm-rendering.html": [
"67da173ff2eb0d90c063294db486eaa34ea8878a",
[
null,
[
[
"/html/semantics/forms/the-select-element/reset-algorithm-rendering-ref.html",
"=="
]
],
{}
]
]
},
"the-textarea-element": { "the-textarea-element": {
"multiline-placeholder-cr.html": [ "multiline-placeholder-cr.html": [
"08d0982ba53ac4e21a419c2aacc8540e890418e7", "08d0982ba53ac4e21a419c2aacc8540e890418e7",
@ -237451,6 +237521,19 @@
{} {}
] ]
], ],
"layout-changes-on-percentage-based-timeline.html": [
"82b67018622c3868f952658e6a0572a744960537",
[
null,
[
[
"/scroll-animations/animation-ref.html",
"=="
]
],
{}
]
],
"set-current-time-before-play.html": [ "set-current-time-before-play.html": [
"194de216d38580ec5f1fc187b99c225ca5c95b6d", "194de216d38580ec5f1fc187b99c225ca5c95b6d",
[ [
@ -287222,6 +287305,10 @@
"439747a9ff2e21613c7cb5a6cb8fc8cb1311fd1e", "439747a9ff2e21613c7cb5a6cb8fc8cb1311fd1e",
[] []
], ],
"subpixel-repeat-no-repeat-mix-ref.html": [
"d2c2722627e38d7a9ca1b3cbf1eda45e0eef62f7",
[]
],
"ttwf-reftest-borderRadius-ref.html": [ "ttwf-reftest-borderRadius-ref.html": [
"dcb590dfea60d956f7c945519396d2434e21d298", "dcb590dfea60d956f7c945519396d2434e21d298",
[] []
@ -287236,6 +287323,14 @@
"e45bbbe5c5760d905db4bf015b5b7faa27467c7f", "e45bbbe5c5760d905db4bf015b5b7faa27467c7f",
[] []
], ],
"green-bottom.png": [
"edd853b1796f377b5a8b5eb125ed343f61295b0d",
[]
],
"green-right.png": [
"a6eda0a121822909a888902ed4bee16a0f92fe88",
[]
],
"green1x50.png": [ "green1x50.png": [
"4540a11478baaeaa40bf8797bfa0d0e382d13777", "4540a11478baaeaa40bf8797bfa0d0e382d13777",
[] []
@ -297519,7 +297614,7 @@
[] []
], ],
"grid-items-sizing-alignment-001-ref.html": [ "grid-items-sizing-alignment-001-ref.html": [
"859483cf5d19dc53c1b1d047a6a3bfac2ed753e3", "c3eccf48eb29c531f0397502a0d5faf0a8223f76",
[] []
], ],
"percentage-size-replaced-subitems-001-ref.html": [ "percentage-size-replaced-subitems-001-ref.html": [
@ -317353,19 +317448,11 @@
"e1387f50deead65859267b376367a5eb2a92482d", "e1387f50deead65859267b376367a5eb2a92482d",
[] []
], ],
"font-display-document-policy-report-only.tentative.sub.html": [ "font-display-document-policy-report-only.tentative.html.headers": [
"e298896b2f51d7780dc0a8b50c636e83d79d2693",
[]
],
"font-display-document-policy-report-only.tentative.sub.html.headers": [
"e090edd0da42f4e98c400f84fb42232adbe95ab6", "e090edd0da42f4e98c400f84fb42232adbe95ab6",
[] []
], ],
"font-display-document-policy-reporting.tentative.sub.html": [ "font-display-document-policy-reporting.tentative.html.headers": [
"e298896b2f51d7780dc0a8b50c636e83d79d2693",
[]
],
"font-display-document-policy-reporting.tentative.sub.html.headers": [
"84ad7cbf97bcbfd9f56bfeef5bc5928b8819ae4e", "84ad7cbf97bcbfd9f56bfeef5bc5928b8819ae4e",
[] []
] ]
@ -330906,6 +330993,12 @@
[] []
] ]
}, },
"the-select-element": {
"reset-algorithm-rendering-ref.html": [
"acf192d1d55b7da110d04651093e3ebe0cd48214",
[]
]
},
"the-textarea-element": { "the-textarea-element": {
"multiline-placeholder-ref.html": [ "multiline-placeholder-ref.html": [
"0234ed64c9ad7155a42b254a5fe35a39535cbff8", "0234ed64c9ad7155a42b254a5fe35a39535cbff8",
@ -337005,7 +337098,7 @@
[] []
], ],
"pointerevent_support.js": [ "pointerevent_support.js": [
"8dbedf21686c0466578ef21abcfc8b3d80727156", "7f291d7609a10be9756bbafd7a5672f5c215a6a1",
[] []
], ],
"pointerlock": { "pointerlock": {
@ -339513,7 +339606,7 @@
] ]
}, },
"idlharness.js": [ "idlharness.js": [
"02233ee0d33de23a5bdfb36db550c751b1c2cabd", "cb66fcaa98c06d4f9b0b8136649c1f7119fe75b7",
[] []
], ],
"idlharness.js.headers": [ "idlharness.js.headers": [
@ -344151,7 +344244,7 @@
[] []
], ],
"safari-technology-preview.rb": [ "safari-technology-preview.rb": [
"eae03474a49ff7bece32daf482390025c3ce9e2a", "c7d83bab9be5a2e152b0f4d0e81f37a387348f8f",
[] []
], ],
"system_info.yml": [ "system_info.yml": [
@ -344736,7 +344829,7 @@
[] []
], ],
"requirements.txt": [ "requirements.txt": [
"165260c78f7ac8579bd911bcf9cce63645c80e45", "c66414cb7512860211049fc85feae6dac458e517",
[] []
], ],
"serve.py": [ "serve.py": [
@ -344867,7 +344960,7 @@
".github": { ".github": {
"workflows": { "workflows": {
"tests.yml": [ "tests.yml": [
"d19b21d74588e0b517d6e97e47c6aec6faef06a7", "c244de93569b7784005641a658171d9c7aa526a9",
[] []
] ]
} }
@ -344885,7 +344978,7 @@
[] []
], ],
"README.rst": [ "README.rst": [
"2322042c24dd266dea1b7284364e9a5cceb66a7e", "20d502a7700ba79d57b4267991241781dd9a7469",
[] []
], ],
"docs": { "docs": {
@ -344923,10 +345016,22 @@
] ]
}, },
"examples": { "examples": {
"README.rst": [
"5d4af57d5144af13e42d797ba309f974c635758b",
[]
],
"demo.py": [ "demo.py": [
"fd4f9752f14c797f429277379d076dd56ace9203", "fd4f9752f14c797f429277379d076dd56ace9203",
[] []
], ],
"doq_client.py": [
"06c1a44f028cb59692c940719517f13dcb4f10a3",
[]
],
"doq_server.py": [
"f3347fe6c18963e0596a8688a5ec6eba284d0256",
[]
],
"htdocs": { "htdocs": {
"robots.txt": [ "robots.txt": [
"51aa0bdeaace6372a7eb13010fd1666c65546864", "51aa0bdeaace6372a7eb13010fd1666c65546864",
@ -344975,12 +345080,12 @@
] ]
}, },
"scripts": { "scripts": {
"build-openssl": [ "fetch-vendor": [
"94ded72c1724bb00432328c5e229ba73762c5e40", "a06d62371478d427c95f5225db4300f7a1a85822",
[] []
], ],
"build-openssl.bat": [ "fetch-vendor.json": [
"610079ddf8320f754bd9422157e6543946d600e5", "f280235beb03848a3486aa97b1c39f46f9b927cf",
[] []
] ]
}, },
@ -345015,7 +345120,7 @@
[] []
], ],
"about.py": [ "about.py": [
"82cd8f33d65dcbf2397d12c83c651cc899e91556", "98eed8d6bcc3eb357a7b00ac546942d51cc3df64",
[] []
], ],
"asyncio": { "asyncio": {
@ -345086,7 +345191,7 @@
[] []
], ],
"connection.py": [ "connection.py": [
"461df4fc1916fda3efb461e66734ec359ae0c327", "0e1372cc08ba03dcb473d02ad349dcb9b34d0991",
[] []
], ],
"crypto.py": [ "crypto.py": [
@ -345127,7 +345232,7 @@
] ]
}, },
"tls.py": [ "tls.py": [
"30b69ff2d3227416e715dfe18b80269e0b1c259b", "94b10cbba5d90eb2cfe9e2ba316a437fd7784f46",
[] []
] ]
} }
@ -345182,7 +345287,7 @@
[] []
], ],
"test_connection.py": [ "test_connection.py": [
"af1a5cdc58f59c6e998b0d3949aa74f77d2175d8", "427e1c045749f6f8fe1c351800a42d9c82ad8677",
[] []
], ],
"test_crypto.py": [ "test_crypto.py": [
@ -345226,7 +345331,7 @@
[] []
], ],
"test_tls.py": [ "test_tls.py": [
"72dd56deb8baeac96fcd1a3fe0bb5f9435d7c0c2", "be8a470f74b1ce4f994583ae837ed0ad94837b4c",
[] []
], ],
"tls_certificate.bin": [ "tls_certificate.bin": [
@ -353381,7 +353486,7 @@
[] []
], ],
"RTCPeerConnection-helper.js": [ "RTCPeerConnection-helper.js": [
"b7ed92a9cd28d88761b71ac476393cafdcbc2130", "531a8a7f4ff9c1ec624d284a4c48f6d776713215",
[] []
], ],
"RTCRtpCapabilities-helper.js": [ "RTCRtpCapabilities-helper.js": [
@ -385481,6 +385586,13 @@
{} {}
] ]
], ],
"font-stretch-interpolation.html": [
"f8ab6fc4a8b0650c03a2e5206504fe55fbe180ff",
[
null,
{}
]
],
"font-variation-settings-composition.html": [ "font-variation-settings-composition.html": [
"58f037415e23801fb2c540e5ae3b032cdd4ff0c8", "58f037415e23801fb2c540e5ae3b032cdd4ff0c8",
[ [
@ -394276,6 +394388,15 @@
] ]
], ],
"contain-intrinsic-size": { "contain-intrinsic-size": {
"animation": {
"contain-intrinsic-size-interpolation.html": [
"b739f3104f679f7ba168b2c775300b633724d5f5",
[
null,
{}
]
]
},
"parsing": { "parsing": {
"contain-intrinsic-size-computed.html": [ "contain-intrinsic-size-computed.html": [
"68ec4fce76916aab977fc95eb5e07b56d6daccc8", "68ec4fce76916aab977fc95eb5e07b56d6daccc8",
@ -406699,14 +406820,14 @@
}, },
"font-display": { "font-display": {
"font-display-document-policy-report-only.tentative.html": [ "font-display-document-policy-report-only.tentative.html": [
"6111ac5df2152c00b316dc7b7fc5920c203333da", "03fa5b68a3ef8a587a72fba5b37fd5145307e1b0",
[ [
null, null,
{} {}
] ]
], ],
"font-display-document-policy-reporting.tentative.html": [ "font-display-document-policy-reporting.tentative.html": [
"7ee534e78d11acbae5ca2402b13b0f746791c4d7", "db871d19f7e9f73419aabadb44e978579678990c",
[ [
null, null,
{} {}
@ -426673,8 +426794,15 @@
{} {}
] ]
], ],
"response-clone-iframe.window.js": [
"da54616c376d9105b024d668846ea5dc1c1cb143",
[
"fetch/api/response/response-clone-iframe.window.html",
{}
]
],
"response-clone.html": [ "response-clone.html": [
"f5ebd7940e1eab290acac9e118c827e9b210ad71", "622514168476f5e297ff3901aba2dfa5a633dfd9",
[ [
null, null,
{ {
@ -449903,7 +450031,7 @@
] ]
], ],
"user-interaction-editing-contenteditable.html": [ "user-interaction-editing-contenteditable.html": [
"9ef867b2d3f6f41d2b75fb48c4569d13eade214d", "0a12b8c4f51f5c6a3935ed02f8173ea9c45453df",
[ [
null, null,
{} {}
@ -457004,6 +457132,13 @@
{} {}
] ]
], ],
"form-double-submit-multiple-targets.html": [
"2b5a589b534524fe729c20e5ec2f4092c95a4e0a",
[
null,
{}
]
],
"form-double-submit-to-different-origin-frame.html": [ "form-double-submit-to-different-origin-frame.html": [
"17ad1b1899bcc207e9de66a8b08f9341e9f489d1", "17ad1b1899bcc207e9de66a8b08f9341e9f489d1",
[ [
@ -457055,6 +457190,13 @@
} }
] ]
], ],
"jsurl-navigation-then-form-submit.html": [
"93a4ea6004a49175a195e2a7844daeed26c70687",
[
null,
{}
]
],
"reparent-form-during-planned-navigation-task.html": [ "reparent-form-during-planned-navigation-task.html": [
"6b50bf599b888b1c3273a4e311ba6af69d67e86b", "6b50bf599b888b1c3273a4e311ba6af69d67e86b",
[ [
@ -476834,6 +476976,15 @@
} }
] ]
], ],
"pointerevent_mouseevent_key_pressed.html": [
"ea45adee8204c2b4a0563d95a4f54f2338572c9b",
[
null,
{
"testdriver": true
}
]
],
"pointerevent_touch-action-verification.html": [ "pointerevent_touch-action-verification.html": [
"311d24b628e4a7897649205da157683e130dc23a", "311d24b628e4a7897649205da157683e130dc23a",
[ [
@ -514231,7 +514382,7 @@
] ]
], ],
"RTCDataChannel-bufferedAmount.html": [ "RTCDataChannel-bufferedAmount.html": [
"89f6b1b4d7a425f2d05688d14315227454a3d4be", "f663941162d93e511b1a5d6be01ed79fe28c9bbf",
[ [
null, null,
{ {
@ -514240,7 +514391,7 @@
] ]
], ],
"RTCDataChannel-close.html": [ "RTCDataChannel-close.html": [
"ea7795719c21e2aa6cfa48435f8d62b7d8c842c0", "00b081b2e2fd8cb8bcad2c88fa88746e717d3d26",
[ [
null, null,
{ {
@ -514256,14 +514407,14 @@
] ]
], ],
"RTCDataChannel-send-blob-order.html": [ "RTCDataChannel-send-blob-order.html": [
"f5cdb45e04c9fba648f8b2b92bcd839d43ed41d4", "3fcf116bc8d05036bc07136ad72b3430b4852497",
[ [
null, null,
{} {}
] ]
], ],
"RTCDataChannel-send.html": [ "RTCDataChannel-send.html": [
"3a4c0f56d656fc88485a90467adfd2c56a9a142a", "1952921fbf26f2c6e9546000a1e9843b440824e8",
[ [
null, null,
{ {
@ -514323,7 +514474,7 @@
] ]
], ],
"RTCIceTransport.html": [ "RTCIceTransport.html": [
"94dc1c461fb5b2074b4975612251a7814af045e5", "fe12c384e5e5b3f8ab2e2b96b740d91959d16d94",
[ [
null, null,
{} {}
@ -514393,7 +514544,7 @@
] ]
], ],
"RTCPeerConnection-createDataChannel.html": [ "RTCPeerConnection-createDataChannel.html": [
"dd34561fbc6658d6fb6a146254acd8f36ced210a", "3d2169dffac65ffbc81355b33c4c904bf5e3f067",
[ [
null, null,
{} {}
@ -519665,6 +519816,69 @@
] ]
} }
] ]
],
"constructor.any.js": [
"393cefd5d30237141096b2b6d919396047fe545c",
[
"webtransport/quic/constructor.any.html",
{
"script_metadata": [
[
"global",
"window,worker"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
],
[
"webtransport/quic/constructor.any.serviceworker.html",
{
"script_metadata": [
[
"global",
"window,worker"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
],
[
"webtransport/quic/constructor.any.sharedworker.html",
{
"script_metadata": [
[
"global",
"window,worker"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
],
[
"webtransport/quic/constructor.any.worker.html",
{
"script_metadata": [
[
"global",
"window,worker"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
]
] ]
} }
}, },

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[subpixel-repeat-no-repeat-mix.html]
expected: FAIL

View file

@ -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

View file

@ -2,6 +2,3 @@
[listeners are called when <iframe> is resized] [listeners are called when <iframe> is resized]
expected: FAIL expected: FAIL
[listeners are called correct number of times]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -11,9 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20'NosniFF']
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

@ -14,3 +14,6 @@
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: FAIL
[Non-HTMLElement should not support autofocus]
expected: FAIL

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-1.html] [iframe_sandbox_popups_escaping-1.html]
type: testharness type: testharness
expected: TIMEOUT expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-2.html] [iframe_sandbox_popups_escaping-2.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

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

View file

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

View file

@ -1,4 +0,0 @@
[form-double-submit-3.html]
[<button> should have the same double-submit protection as <input type=submit>]
expected: FAIL

View file

@ -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

View file

@ -0,0 +1,2 @@
[reset-algorithm-rendering.html]
expected: TIMEOUT

View file

@ -12,3 +12,6 @@
[Check that rel=noopener with target=_top does a normal load] [Check that rel=noopener with target=_top does a normal load]
expected: FAIL expected: FAIL
[Check that rel=noopener with target=_self does a normal load]
expected: FAIL

View file

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

View file

@ -1,9 +1,10 @@
[promise-job-entry.html] [promise-job-entry.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise] [Fulfillment handler on fulfilled promise]
expected: FAIL expected: FAIL
[Rejection handler on pending-then-rejected promise] [Rejection handler on pending-then-rejected promise]
expected: FAIL expected: TIMEOUT
[Sanity check: this all works as expected with no promises involved] [Sanity check: this all works as expected with no promises involved]
expected: FAIL expected: FAIL
@ -15,5 +16,5 @@
expected: FAIL expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise] [Fulfillment handler on pending-then-fulfilled promise]
expected: FAIL expected: TIMEOUT

View file

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

View file

@ -1,5 +1,6 @@
[003.html] [003.html]
type: testharness type: testharness
expected: ERROR
[shared] [shared]
expected: FAIL expected: FAIL

View file

@ -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

View file

@ -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>

View file

@ -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>

View file

@ -2,6 +2,11 @@
<meta charset="utf-8"> <meta charset="utf-8">
<title>CSS Reftest Reference: Grid Item Sizing</title> <title>CSS Reftest Reference: Grid Item Sizing</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<style>
button {
margin: 0; /* Prevent WebKit from adding some margin */
}
</style>
<p>Test passes if it has the same output than the reference.</p> <p>Test passes if it has the same output than the reference.</p>

View file

@ -11,6 +11,9 @@
grid-auto-rows: 200px; grid-auto-rows: 200px;
grid-template-columns: repeat(3, 200px); grid-template-columns: repeat(3, 200px);
} }
button {
margin: 0; /* Prevent WebKit from adding some margin */
}
</style> </style>
<p>Test passes if it has the same output than the reference.</p> <p>Test passes if it has the same output than the reference.</p>

View file

@ -11,7 +11,6 @@
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> <link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')"> <meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
<link rel="stylesheet" href="/fonts/ahem.css">
<style> <style>
body { overflow: hidden; } body { overflow: hidden; }
.flexbox { .flexbox {
@ -20,13 +19,11 @@
align-content: flex-start; align-content: flex-start;
width: 100px; width: 100px;
height: 100px; height: 100px;
font: 25px/1 Ahem; background: red;
color: green;
} }
.grid { .grid {
display: grid; display: grid;
align-items: baseline; align-items: baseline;
background: red;
} }
.gridItem { .gridItem {
background: green; background: green;
@ -36,6 +33,6 @@
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flexbox"> <div class="flexbox">
<div class="grid"> <div class="grid">
<div class="gridItem">XX</div> <div class="gridItem"></div>
</div> </div>
</div> </div>

View file

@ -10,8 +10,7 @@
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> <link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), so that its grid item, honoring its justify-self: 'normal' (behaves as 'stretch') "> <meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), as well as its grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
<link rel="stylesheet" href="/fonts/ahem.css">
<style> <style>
body { overflow: hidden; } body { overflow: hidden; }
.flexbox { .flexbox {
@ -20,13 +19,11 @@
align-content: stretch; align-content: stretch;
width: 100px; width: 100px;
height: 100px; height: 100px;
font: 25px/1 Ahem; background: red;
color: green;
} }
.grid { .grid {
display: grid; display: grid;
align-items: baseline; align-items: baseline;
background: red;
} }
.gridItem { .gridItem {
background: green; background: green;
@ -36,6 +33,6 @@
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flexbox"> <div class="flexbox">
<div class="grid"> <div class="grid">
<div class="gridItem">XX</div> <div class="gridItem"></div>
</div> </div>
</div> </div>

View file

@ -10,8 +10,7 @@
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> <link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')"> <meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The vertical grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
<link rel="stylesheet" href="/fonts/ahem.css">
<style> <style>
body { overflow: hidden; } body { overflow: hidden; }
.flexbox { .flexbox {
@ -20,13 +19,11 @@
align-content: flex-start; align-content: flex-start;
width: 100px; width: 100px;
height: 100px; height: 100px;
font: 25px/1 Ahem; background: red;
color: green;
} }
.grid { .grid {
display: grid; display: grid;
align-items: baseline; align-items: baseline;
background: red;
} }
.gridItem { .gridItem {
background: green; background: green;
@ -37,6 +34,6 @@
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flexbox"> <div class="flexbox">
<div class="grid"> <div class="grid">
<div class="gridItem">XX</div> <div class="gridItem"></div>
</div> </div>
</div> </div>

View file

@ -10,8 +10,7 @@
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> <link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), so that its grid item, honoring its justify-self: 'normal' (behaves as 'stretch') "> <meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), as well as its vertical grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
<link rel="stylesheet" href="/fonts/ahem.css">
<style> <style>
body { overflow: hidden; } body { overflow: hidden; }
.flexbox { .flexbox {
@ -20,12 +19,10 @@
align-content: stretch; align-content: stretch;
width: 100px; width: 100px;
height: 100px; height: 100px;
font: 25px/1 Ahem; background: red;
color: green;
} }
.grid { .grid {
display: grid; display: grid;
background: red;
} }
.gridItem { .gridItem {
background: green; background: green;
@ -36,6 +33,6 @@
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flexbox"> <div class="flexbox">
<div class="grid"> <div class="grid">
<div class="gridItem">XX</div> <div class="gridItem"></div>
</div> </div>
</div> </div>

View file

@ -11,7 +11,6 @@
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> <link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')"> <meta name="assert" content="A single-line column flexbox shouldn't shrink-to-fit since its flex item is stretching in the main-axis, honoring the 'align-self: normal (behaves as 'stretch')'. The grid item's inline-size should be stretched as well, honoring its justify-self: 'normal' (behaves as 'stretch')">
<link rel="stylesheet" href="/fonts/ahem.css">
<style> <style>
body { overflow: hidden; } body { overflow: hidden; }
.flexbox { .flexbox {
@ -20,13 +19,11 @@
align-content: flex-start; align-content: flex-start;
width: 100px; width: 100px;
height: 100px; height: 100px;
font: 25px/1 Ahem; background: red;
color: green;
} }
.grid { .grid {
display: grid; display: grid;
align-items: start; align-items: start;
background: red;
} }
.gridItem { .gridItem {
background: green; background: green;
@ -36,6 +33,6 @@
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flexbox"> <div class="flexbox">
<div class="grid"> <div class="grid">
<div class="gridItem">XX</div> <div class="gridItem"></div>
</div> </div>
</div> </div>

View file

@ -10,8 +10,7 @@
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-flex">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid"> <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-grid">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> <link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), so that its grid item, honoring its justify-self: 'normal' (behaves as 'stretch') "> <meta name="assert" content="The align-content: 'stretch' prevents the multi-line column flexbox to shrink-to-fit (default behavior), hence the grid container will be stretched, honoring its align-self: 'normal (behaves as 'stretch'), as well as grid item, honoring its justify-self: 'normal' (behaves as 'stretch') ">
<link rel="stylesheet" href="/fonts/ahem.css">
<style> <style>
body { overflow: hidden; } body { overflow: hidden; }
.flexbox { .flexbox {
@ -20,13 +19,11 @@
justify-content: stretch; justify-content: stretch;
width: 100px; width: 100px;
height: 100px; height: 100px;
font: 25px/1 Ahem; background: red;
color: green;
} }
.grid { .grid {
display: grid; display: grid;
align-items: start; align-items: start;
background: red;
} }
.gridItem { .gridItem {
background: green; background: green;
@ -36,6 +33,6 @@
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flexbox"> <div class="flexbox">
<div class="grid"> <div class="grid">
<div class="gridItem">XX</div> <div class="gridItem"></div>
</div> </div>
</div> </div>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -1,16 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Test for font-display-late-swap feature policy set to report-only</title> <title>Test for font-display-late-swap feature policy set to report-only</title>
<link rel="help" <link rel="help" href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
<script src='/resources/testharness.js'></script> <script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script> <script src='/resources/testharnessreport.js'></script>
<style> <style>
</style> </style>
</head> </head>
<body> <body>
<p> <p>
Tests if the correct number of violation reports are generated and each report corresponds to this feature. Tests if the correct number of violation reports are generated and each report corresponds to this feature.
@ -29,11 +26,10 @@
<script> <script>
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional']; const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
const table = document.getElementById('container'); const table = document.getElementById('container');
const t = async_test('font-display-late-swap Report Format');
function makeFontFaceDeclaration(family, display) { function makeFontFaceDeclaration(family, display) {
url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over
return `@font-face { font-family: ${family}; src: url("${url}"); font-display: ${display}; }`; return '@font-face { font-family: ' + family + '; src: url("' + url + '"); font-display: ' + display + '; }';
} }
window.onload = () => { window.onload = () => {
@ -41,46 +37,36 @@
for (let display of fontDisplayValues) { for (let display of fontDisplayValues) {
const family = display + '-face'; const family = display + '-face';
const rule = makeFontFaceDeclaration(family, display); const rule = makeFontFaceDeclaration(family, display);
document.styleSheets[0].insertRule(rule, 0);
// Create a separate iframe for testing purpose.
// For same document, violation reports with same content might be deduped.
let iframe = document.createElement('iframe');
iframe.src = 'font-display-document-policy-report-only.tentative.sub.html';
iframe.onload = t.step_func(() => {
iframe.contentWindow.postMessage({
family,
rule
}, '*');
});
let td = document.createElement('td'); let td = document.createElement('td');
td.appendChild(iframe); td.textContent = 'a';
td.style.fontFamily = family + ', Arial';
tr.appendChild(td); tr.appendChild(td);
} }
table.appendChild(tr); table.appendChild(tr);
} }
let reportCounter = 4; let reportCounter = 4;
window.onmessage = t.step_func((e) => { let t = async_test('font-display-late-swap Report Format');
const reports = JSON.parse(e.data);
assert_equals(reports.length, 1);
check_report_format(reports[0]);
});
let check_report_format = (report) => { let check_report_format = (reports, observer) => {
reportCounter--; reportCounter -= reports.length;
for (let report of reports) {
assert_equals(report.type, 'document-policy-violation'); assert_equals(report.type, 'document-policy-violation');
assert_equals(report.url, document.getElementsByTagName('iframe')[0].contentWindow.location.href); assert_equals(report.url, document.location.href, 'Report URL');
assert_equals(report.body.featureId, 'font-display-late-swap'); assert_equals(report.body.featureId, 'font-display-late-swap');
assert_equals(report.body.disposition, 'report'); assert_equals(report.body.disposition, 'report');
assert_true('sourceFile' in report.body); assert_true('sourceFile' in report.body);
assert_true('lineNumber' in report.body); assert_true('lineNumber' in report.body);
assert_true('columnNumber' in report.body); assert_true('columnNumber' in report.body);
}
// Test is done when we have exactly 4 reports for the following // Test is done when we have exactly 4 reports for the following
// font-display values: not set, 'auto', 'block', 'swap' // font-display values: not set, 'auto', 'block', 'swap'
if (reportCounter == 0) t.done(); if (reportCounter == 0) t.done();
}; };
new ReportingObserver(t.step_func(check_report_format),
{types: ['document-policy-violation'], buffered: true}).observe();
</script> </script>
</body> </body>
</html> </html>

View file

@ -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>

View file

@ -1,16 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Test for font-display-late-swap feature policy set to reporting</title> <title>Test for font-display-late-swap feature policy set to reporting</title>
<link rel="help" <link rel="help" href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
<script src='/resources/testharness.js'></script> <script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script> <script src='/resources/testharnessreport.js'></script>
<style> <style>
</style> </style>
</head> </head>
<body> <body>
<p> <p>
Tests if the correct number of violation reports are generated and each report corresponds to this feature. Tests if the correct number of violation reports are generated and each report corresponds to this feature.
@ -29,11 +26,10 @@
<script> <script>
const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional']; const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
const table = document.getElementById('container'); const table = document.getElementById('container');
const t = async_test('font-display-late-swap Report Format');
function makeFontFaceDeclaration(family, display) { function makeFontFaceDeclaration(family, display) {
url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over
return `@font-face { font-family: ${family}; src: url("${url}"); font-display: ${display}; }`; return '@font-face { font-family: ' + family + '; src: url("' + url + '"); font-display: ' + display + '; }';
} }
window.onload = () => { window.onload = () => {
@ -41,46 +37,36 @@
for (let display of fontDisplayValues) { for (let display of fontDisplayValues) {
const family = display + '-face'; const family = display + '-face';
const rule = makeFontFaceDeclaration(family, display); const rule = makeFontFaceDeclaration(family, display);
document.styleSheets[0].insertRule(rule, 0);
// Create a separate iframe for testing purpose.
// For same document, violation reports with same content might be deduped.
let iframe = document.createElement('iframe');
iframe.src = 'font-display-document-policy-reporting.tentative.sub.html';
iframe.onload = t.step_func(() => {
iframe.contentWindow.postMessage({
family,
rule
}, '*');
});
let td = document.createElement('td'); let td = document.createElement('td');
td.appendChild(iframe); td.textContent = 'a';
td.style.fontFamily = family + ', Arial';
tr.appendChild(td); tr.appendChild(td);
} }
table.appendChild(tr); table.appendChild(tr);
} }
let reportCounter = 4; let reportCounter = 4;
window.onmessage = t.step_func((e) => { let t = async_test('font-display-late-swap Report Format');
const reports = JSON.parse(e.data);
assert_equals(reports.length, 1);
check_report_format(reports[0]);
});
let check_report_format = (report) => { let check_report_format = (reports, observer) => {
reportCounter--; reportCounter -= reports.length;
for (let report of reports) {
assert_equals(report.type, 'document-policy-violation'); assert_equals(report.type, 'document-policy-violation');
assert_equals(report.url, document.getElementsByTagName('iframe')[0].contentWindow.location.href); assert_equals(report.url, document.location.href, 'Report URL');
assert_equals(report.body.featureId, 'font-display-late-swap'); assert_equals(report.body.featureId, 'font-display-late-swap');
assert_equals(report.body.disposition, 'enforce'); assert_equals(report.body.disposition, 'enforce');
assert_true('sourceFile' in report.body); assert_true('sourceFile' in report.body);
assert_true('lineNumber' in report.body); assert_true('lineNumber' in report.body);
assert_true('columnNumber' in report.body); assert_true('columnNumber' in report.body);
}
// Test is done when we have exactly 4 reports for the following // Test is done when we have exactly 4 reports for the following
// font-display values: not set, 'auto', 'block', 'swap' // font-display values: not set, 'auto', 'block', 'swap'
if (reportCounter == 0) t.done(); if (reportCounter == 0) t.done();
}; };
new ReportingObserver(t.step_func(check_report_format),
{types: ['document-policy-violation'], buffered: true}).observe();
</script> </script>
</body> </body>
</html> </html>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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');

View file

@ -70,13 +70,13 @@
return fetch('../resources/trickle.py?count=2&delay=100').then(function(res) { return fetch('../resources/trickle.py?count=2&delay=100').then(function(res) {
clone = res.clone(); clone = res.clone();
response = res; response = res;
return clone.arrayBuffer(); return clone.text();
}).then(function(r) { }).then(function(r) {
assert_equals(r.byteLength, 26); assert_equals(r.length, 26);
result = r; result = r;
return response.arrayBuffer(); return response.text();
}).then(function(r) { }).then(function(r) {
assert_array_equals(r, result, "cloned responses should provide the same data"); assert_equals(r, result, "cloned responses should provide the same data");
}); });
}, 'Cloned responses should provide the same data'); }, 'Cloned responses should provide the same data');

View file

@ -3,52 +3,226 @@
<head> <head>
<title>Editing: contentEditable attribute test</title> <title>Editing: contentEditable attribute test</title>
<link rel="author" title="Baidu" href="mailto: guopengcheng@baidu.com" /> <link rel="author" title="Baidu" href="mailto: guopengcheng@baidu.com" />
<link rel="help" href="https://html.spec.whatwg.org/multipage/#contenteditable"/> <link
rel="help"
href="https://html.spec.whatwg.org/multipage/#contenteditable"
/>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<div id="log"></div> <div id="log"></div>
</head> </head>
<body> <body>
<script type="text/javascript"> <script type="text/javascript">
var testElement = document.createElement("testElement");
test(function() { test(function() {
assert_equals(testElement.contentEditable,"inherit", "check for testElement.contentEditable value"); const testElement = document.createElement("testElement");
assert_equals(
testElement.contentEditable,
"inherit",
"check for testElement.contentEditable value"
);
}, "no contentEditable attribute"); }, "no contentEditable attribute");
test(function() {
const testElement = document.createElement("testElement");
testElement.setAttribute("contentEditable", ""); testElement.setAttribute("contentEditable", "");
test(function() {
assert_true(testElement.isContentEditable, "check for testElement.isContentEditable value"); assert_true(
assert_equals(testElement.contentEditable,"true", "check for testElement.contentEditable value"); testElement.isContentEditable,
"check for testElement.isContentEditable value"
);
assert_equals(
testElement.contentEditable,
"true",
"check for testElement.contentEditable value"
);
}, "empty contentEditable attribute"); }, "empty contentEditable attribute");
test(function() {
const testElement = document.createElement("testElement");
testElement.contentEditable = "true"; 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() { test(function() {
assert_true(testElement.isContentEditable, "check for testElement.isContentEditable value"); const testElement = document.createElement("testElement");
assert_equals(testElement.contentEditable,"true", "check for testElement.contentEditable value");
}, "set contentEditable = \"true\"");
testElement.contentEditable = "false"; 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() { test(function() {
assert_false(testElement.isContentEditable, "check for testElement.isContentEditable value"); const testElement = document.createElement("testElement");
assert_equals(testElement.contentEditable,"false", "check for testElement.contentEditable value");
}, "set contentEditable = \"false\"");
testElement.contentEditable = "inherit"; testElement.contentEditable = "inherit";
assert_equals(
testElement.contentEditable,
"inherit",
"check for testElement.contentEditable value"
);
}, 'set contentEditable = "inherit"');
test(function() { test(function() {
assert_equals(testElement.contentEditable,"inherit", "check for testElement.contentEditable value"); const testElement = document.createElement("testElement");
}, "set contentEditable = \"inherit\""); const childElement = document.createElement("childElement");
testElement.appendChild(childElement);
testElement.contentEditable = "true";
assert_true(
testElement.isContentEditable,
"check for testElement.isContentEditable value"
);
assert_equals(
testElement.contentEditable,
"true",
"check for testElement.contentEditable value"
);
assert_true(
childElement.isContentEditable,
"check for childElement.isContentEditable value"
);
assert_equals(
childElement.contentEditable,
"inherit",
"check for childElement.contentEditable value"
);
}, 'set parent element contentEditable = "true"');
test(function() {
const testElement = document.createElement("testElement");
const childElement = document.createElement("childElement");
testElement.appendChild(childElement);
testElement.contentEditable = "false";
assert_false(
testElement.isContentEditable,
"check for testElement.isContentEditable value"
);
assert_equals(
testElement.contentEditable,
"false",
"check for testElement.contentEditable value"
);
assert_false(
childElement.isContentEditable,
"check for childElement.isContentEditable value"
);
assert_equals(
childElement.contentEditable,
"inherit",
"check for childElement.contentEditable value"
);
}, 'set parent element contentEditable = "false"');
test(function() {
var testElement = document.createElement("testElement");
assert_equals(
testElement.contentEditable,
"inherit",
"no contentEditable attribute, so inherit"
);
testElement.setAttribute("contentEditable", "");
assert_true(
testElement.isContentEditable,
"check for testElement.isContentEditable value"
);
assert_equals(
testElement.contentEditable,
"true",
"empty contentEditable attribute is 'true'"
);
testElement.contentEditable = "true";
assert_true(
testElement.isContentEditable,
"check for testElement.isContentEditable value"
);
assert_equals(
testElement.contentEditable,
"true",
"contentEditable='true' is 'true'"
);
testElement.contentEditable = "false";
assert_false(
testElement.isContentEditable,
"check for testElement.isContentEditable value"
);
assert_equals(
testElement.contentEditable,
"false",
"contentEditable = 'false' is 'false'"
);
testElement.contentEditable = "inherit";
assert_equals(
testElement.contentEditable,
"inherit",
"contentEditable='inherit' is 'inherit'"
);
var childElement = document.createElement("childElement"); var childElement = document.createElement("childElement");
testElement.appendChild(childElement); testElement.appendChild(childElement);
testElement.contentEditable = "true"; testElement.contentEditable = "true";
test(function() { assert_true(
assert_true(testElement.isContentEditable, "check for testElement.isContentEditable value"); testElement.isContentEditable,
assert_equals(testElement.contentEditable,"true", "check for testElement.contentEditable value"); 'parent element contentEditable = "true"'
assert_true(childElement.isContentEditable, "check for childElement.isContentEditable value"); );
assert_equals(childElement.contentEditable,"inherit", "check for childElement.contentEditable value"); assert_equals(testElement.contentEditable, "true");
}, "set parent element contentEditable = \"true\""); assert_true(
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"; testElement.contentEditable = "false";
test(function() { assert_false(
assert_false(testElement.isContentEditable, "check for testElement.isContentEditable value"); testElement.isContentEditable,
assert_equals(testElement.contentEditable,"false", "check for testElement.contentEditable value"); 'parent element contentEditable = "false"'
assert_false(childElement.isContentEditable, "check for childElement.isContentEditable value"); );
assert_equals(childElement.contentEditable,"inherit", "check for childElement.contentEditable value"); assert_equals(testElement.contentEditable, "false");
}, "set parent element contentEditable = \"false\""); assert_false(
childElement.isContentEditable,
'parent element contentEditable = "false"'
);
assert_equals(
childElement.contentEditable,
"inherit",
'parent element contentEditable = "false"'
);
}, "Dynamically changing contentEditable values");
</script> </script>
</body> </body>
</html> </html>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html class="reftest-wait">
<title>Invalidation test on resetting &lt;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>

View file

@ -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>

View file

@ -392,3 +392,13 @@ function resolveWhen(condition) {
tick(); tick();
}); });
} }
// Returns a promise that only gets resolved after n animation frames
function waitForAnimationFrames(n){
let p = 0;
function next(){
p++;
return p === n;
}
return resolveWhen(next);
}

View file

@ -1209,29 +1209,22 @@ IdlArray.prototype.assert_type_is = function(value, type)
assert_regexp_match(value, /^([\x00-\ud7ff\ue000-\uffff]|[\ud800-\udbff][\udc00-\udfff])*$/); assert_regexp_match(value, /^([\x00-\ud7ff\ue000-\uffff]|[\ud800-\udbff][\udc00-\udfff])*$/);
return; return;
case "Int8Array":
case "Int16Array":
case "Int32Array":
case "Uint8Array":
case "Uint16Array":
case "Uint32Array":
case "Uint8ClampedArray":
case "Float32Array":
case "Float64Array":
case "ArrayBuffer":
case "DataView":
case "Function":
assert_true(value instanceof self[type], "wrong type: not a " + type);
return;
case "object": case "object":
assert_in_array(typeof value, ["object", "function"], "wrong type: not object or function"); assert_in_array(typeof value, ["object", "function"], "wrong type: not object or function");
return; return;
} }
// This is a catch-all for any IDL type name which follows JS class
// semantics. This includes some non-interface IDL types (e.g. Int8Array,
// Function, ...), as well as any interface types that are not in the IDL
// that is fed to the harness. If an IDL type does not follow JS class
// semantics then it should go in the switch statement above. If an IDL
// type needs full checking, then the test should include it in the IDL it
// feeds to the harness.
if (!(type in this.members)) if (!(type in this.members))
{ {
throw new IdlHarnessError("Unrecognized type " + type); assert_true(value instanceof self[type], "wrong type: not a " + type);
return;
} }
if (this.members[type] instanceof IdlInterface) if (this.members[type] instanceof IdlInterface)

View file

@ -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>

View file

@ -1,10 +1,10 @@
cask 'safari-technology-preview' do cask 'safari-technology-preview' do
if MacOS.version <= :mojave if MacOS.version <= :mojave
version '106,001-05966-20200513-86571be6-878e-411b-a5b9-65a971573fae' version '107,001-09573-20200527-5319cd41-1eb4-412a-817a-bf376957b539'
sha256 '8518c8917a9172aeb75deeb61060d353229760fd54dc85bd38a0897cc1d12105' sha256 'c06f7ecd3fb310bc59e06010d1f8c6dbdb57dbc671070fa0d9fc69c295eb0190'
else else
version '106,001-05890-20200513-321a69b4-de58-440e-8182-8ac03d65f6ce' version '107,001-09514-20200527-05f7a42c-d9a0-4a60-ba12-97f2145db993'
sha256 'f3c073d9b60ff6d11f82abbc6cc131e5913e6d0f2a11f0968ae77db1b51e1e35' sha256 '50baba474a0f0c773e4907ba8b06c80171de79f15b2ee653301cfe8230d0a0ef'
end end
url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg" url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg"

View file

@ -1 +1 @@
aioquic==0.8.7 aioquic==0.8.8

View file

@ -47,7 +47,7 @@ jobs:
echo "::set-env name=LINK::/LIBPATH:C:\Progra~1\OpenSSL-Win64\lib" echo "::set-env name=LINK::/LIBPATH:C:\Progra~1\OpenSSL-Win64\lib"
- name: Run tests - name: Run tests
run: | run: |
pip install -U pip setuptools wheel python -m pip install -U pip setuptools wheel
pip install coverage pip install coverage
pip install . pip install .
coverage run -m unittest discover -v coverage run -m unittest discover -v
@ -84,20 +84,10 @@ jobs:
- uses: actions/setup-python@v1 - uses: actions/setup-python@v1
with: with:
python-version: 3.7 python-version: 3.7
- name: Install nasm
if: matrix.os == 'windows-latest'
run: choco install -y nasm
- name: Install nmake
if: matrix.os == 'windows-latest'
run: |
& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe" modify `
--installPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise" `
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --passive --norestart
shell: powershell
- name: Build wheels - name: Build wheels
env: env:
CIBW_BEFORE_BUILD: scripts/build-openssl /tmp/vendor CIBW_BEFORE_BUILD: python scripts/fetch-vendor /tmp/vendor
CIBW_BEFORE_BUILD_WINDOWS: scripts\build-openssl.bat C:\cibw\vendor CIBW_BEFORE_BUILD_WINDOWS: python scripts\fetch-vendor C:\cibw\vendor
CIBW_ENVIRONMENT: AIOQUIC_SKIP_TESTS=ipv6,loss CFLAGS=-I/tmp/vendor/include LDFLAGS=-L/tmp/vendor/lib CIBW_ENVIRONMENT: AIOQUIC_SKIP_TESTS=ipv6,loss CFLAGS=-I/tmp/vendor/include LDFLAGS=-L/tmp/vendor/lib
CIBW_ENVIRONMENT_WINDOWS: AIOQUIC_SKIP_TESTS=ipv6,loss CL="/IC:\cibw\vendor\include" LINK="/LIBPATH:C:\cibw\vendor\lib" CIBW_ENVIRONMENT_WINDOWS: AIOQUIC_SKIP_TESTS=ipv6,loss CL="/IC:\cibw\vendor\include" LINK="/LIBPATH:C:\cibw\vendor\lib"
CIBW_SKIP: cp27-* cp33-* cp34-* cp35-* pp27-* CIBW_SKIP: cp27-* cp33-* cp34-* cp35-* pp27-*

View file

@ -115,42 +115,9 @@ You will need to set some environment variables to link against OpenSSL:
Running the examples Running the examples
-------------------- --------------------
After checking out the code using git you can run: `aioquic` comes with a number of examples illustrating various QUIC usecases.
.. code-block:: console You can browse these examples here: https://github.com/aiortc/aioquic/tree/master/examples
$ pip install -e .
$ pip install aiofiles asgiref httpbin starlette wsproto
HTTP/3 server
.............
You can run the example server, which handles both HTTP/0.9 and HTTP/3:
.. code-block:: console
$ python examples/http3_server.py --certificate tests/ssl_cert.pem --private-key tests/ssl_key.pem
HTTP/3 client
.............
You can run the example client to perform an HTTP/3 request:
.. code-block:: console
$ python examples/http3_client.py --ca-certs tests/pycacert.pem https://localhost:4433/
Alternatively you can perform an HTTP/0.9 request:
.. code-block:: console
$ python examples/http3_client.py --ca-certs tests/pycacert.pem --legacy-http https://localhost:4433/
You can also open a WebSocket over HTTP/3:
.. code-block:: console
$ python examples/http3_client.py --ca-certs tests/pycacert.pem wss://localhost:4433/ws
License License
------- -------

View 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

View 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)

View 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)

View file

@ -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

View file

@ -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

View 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])

View 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