Update web-platform-tests to revision b'94be51cc50986018ab25e8a952bf234862ef3e5f'

This commit is contained in:
WPT Sync Bot 2023-01-31 01:38:06 +00:00
parent fbc2ac00fb
commit 48c9556bb6
84 changed files with 1318 additions and 367 deletions

View file

@ -1,4 +0,0 @@
[url-charset.window.html]
expected: TIMEOUT
[Blob charset should override any auto-detected charset.]
expected: TIMEOUT

View file

@ -140010,6 +140010,19 @@
{} {}
] ]
], ],
"single-line-column-flex-fragmentation-059.html": [
"ff91f373ec756ac8c101629a7199d75a600d8a96",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"single-line-row-flex-fragmentation-001.html": [ "single-line-row-flex-fragmentation-001.html": [
"379327a4aff584192f076d3f9d8f3ead232c0f5c", "379327a4aff584192f076d3f9d8f3ead232c0f5c",
[ [
@ -176569,7 +176582,7 @@
] ]
], ],
"font-synthesis-style-first-letter.html": [ "font-synthesis-style-first-letter.html": [
"32f037bdb721dc3315787d37dce5c66b7cf1e37c", "1296baf05f9c430cda6c52e5a63e813c79862b9a",
[ [
null, null,
[ [
@ -176621,7 +176634,7 @@
] ]
], ],
"font-synthesis-weight-first-letter.html": [ "font-synthesis-weight-first-letter.html": [
"52865540a791189e0adf89fb17f8b43fb830334b", "3d60b2a22847e1b99f1ee53d27c231a41bbc60da",
[ [
null, null,
[ [
@ -206862,6 +206875,19 @@
{} {}
] ]
], ],
"nest-containing-forgiving.html": [
"d399142f7efb998db7ff8dffae0770c5bcea0cc2",
[
null,
[
[
"/css/css-nesting/nest-containing-forgiving-ref.html",
"=="
]
],
{}
]
],
"nesting-basic.html": [ "nesting-basic.html": [
"6bc727a73195122f6f2abca1a07a289c99376f5c", "6bc727a73195122f6f2abca1a07a289c99376f5c",
[ [
@ -371061,7 +371087,7 @@
[] []
], ],
"font-synthesis-style-first-letter-ref.html": [ "font-synthesis-style-first-letter-ref.html": [
"f1abcb7bb3f4681ecfc2b135dc5ca6dd6b6b9896", "c4f9b175de79052ad0f29df3be07a33c1072f245",
[] []
], ],
"font-synthesis-style-first-line-ref.html": [ "font-synthesis-style-first-line-ref.html": [
@ -371077,7 +371103,7 @@
[] []
], ],
"font-synthesis-weight-first-letter-ref.html": [ "font-synthesis-weight-first-letter-ref.html": [
"7ec42f07b7c2bfbd329534bc8401acb5ee33d5f2", "fd29f4134d67d22b6e344dcc7ec8315a32dac2e5",
[] []
], ],
"font-synthesis-weight-first-line-ref.html": [ "font-synthesis-weight-first-line-ref.html": [
@ -383166,6 +383192,10 @@
"006216b60e71d2d1af9c3d6c9fc81ea4c53f1d1d", "006216b60e71d2d1af9c3d6c9fc81ea4c53f1d1d",
[] []
], ],
"nest-containing-forgiving-ref.html": [
"36b07c92b6fdcbb9bca66a4292bd871af7e7d696",
[]
],
"nesting-basic-ref.html": [ "nesting-basic-ref.html": [
"c2f7c669497d363e868cb96d2c2bb1ee315fff49", "c2f7c669497d363e868cb96d2c2bb1ee315fff49",
[] []
@ -395425,7 +395455,7 @@
[] []
], ],
"content-visibility-auto-shared-element-ref.html": [ "content-visibility-auto-shared-element-ref.html": [
"5c3fb1616d6e01276eced88d3a97b784ba1deb59", "f4a34967ec066c67b5f8b486b7079411a9adb884",
[] []
], ],
"content-with-clip-max-texture-size-ref.html": [ "content-with-clip-max-texture-size-ref.html": [
@ -402031,7 +402061,7 @@
[] []
], ],
"delete.js": [ "delete.js": [
"c1f48a74b2010bd44ff71a33f9f9f4b4cbb5caac", "94611e65767647353f4864f65c7ee0ece93f375d",
[] []
], ],
"fontname.js": [ "fontname.js": [
@ -402051,7 +402081,7 @@
[] []
], ],
"forwarddelete.js": [ "forwarddelete.js": [
"832ba608a04587feeb85308f23f6b530b3e65b79", "524d43274e51f0ec2b870c4bf9b4bc64334ec104",
[] []
], ],
"hilitecolor.js": [ "hilitecolor.js": [
@ -402123,7 +402153,7 @@
[] []
], ],
"multitest.js": [ "multitest.js": [
"89f5eebdb666c896e0c549bf0683894d0b64e8f8", "118ae4b3a41f753433b76fabaa17e22a28ae6059",
[] []
], ],
"outdent.js": [ "outdent.js": [
@ -410306,11 +410336,11 @@
[] []
], ],
"gentestutils.py": [ "gentestutils.py": [
"2517568a5a83c9e8539a7c93e69aaf8a085504f4", "59fa9e73e51bc19c5c1bcc827684e078ee132058",
[] []
], ],
"gentestutilsunion.py": [ "gentestutilsunion.py": [
"4c65d688c25f27d6d29f4732f1f250323385a945", "3afb54de477e6fbfff4bf5790376153128b79741",
[] []
], ],
"name2dir-canvas.yaml": [ "name2dir-canvas.yaml": [
@ -424162,11 +424192,11 @@
[] []
], ],
"early-hints-helpers.sub.js": [ "early-hints-helpers.sub.js": [
"3991e8fe9da479dd0f5b4cea537542ba948a8540", "faf6119cf1edd5454aaabd643ffe40d33c589463",
[] []
], ],
"early-hints-test-loader.h2.py": [ "early-hints-test-loader.h2.py": [
"aa9188c6dbc3920055095421bc880ec5595b0bbb", "bb987209c50f41f260cc7e5d43901c8777ee8779",
[] []
], ],
"empty-corp-absent.js": [ "empty-corp-absent.js": [
@ -424185,6 +424215,14 @@
"1738466bcb3225df2ec2dc7f58459784ce426a84", "1738466bcb3225df2ec2dc7f58459784ce426a84",
[] []
], ],
"empty.json": [
"0967ef424bce6791893e9a57bb952f80fd536e93",
[]
],
"empty.json.headers": [
"1738466bcb3225df2ec2dc7f58459784ce426a84",
[]
],
"example.pdf": [ "example.pdf": [
"7bad251ba7e08efc9c383d88518367a6f204cdd6", "7bad251ba7e08efc9c383d88518367a6f204cdd6",
[] []
@ -424245,6 +424283,10 @@
"daea33160ae4e7b7bd074fb1849f1ba40ce8e715", "daea33160ae4e7b7bd074fb1849f1ba40ce8e715",
[] []
], ],
"preload-fetch.html": [
"2e90f76af143fce7f05eb77bb71f00e0d880ff88",
[]
],
"preload-finished-before-final-response.h2.py": [ "preload-finished-before-final-response.h2.py": [
"d0b12408d9cff01352380cec5727145dbed6dded", "d0b12408d9cff01352380cec5727145dbed6dded",
[] []
@ -444734,7 +444776,7 @@
[] []
], ],
"webtransport_h3_server.py": [ "webtransport_h3_server.py": [
"d3031b4c0c2f531f97720249a0596f04c8c63d75", "4b49c90d816adf577147c7263e90c2cc05170160",
[] []
] ]
}, },
@ -445868,7 +445910,11 @@
"tentative": { "tentative": {
"resources": { "resources": {
"requestStorageAccessForOrigin-iframe.html": [ "requestStorageAccessForOrigin-iframe.html": [
"3e2f6d5b6288993714f3ee56ae89631e03d563b9", "43d16705c8515b48685420c8d14925af90afb62a",
[]
],
"requestStorageAccessForOrigin-iframe.https.html": [
"db03b25e14d7883a89cac79746c11b280ec24dae",
[] []
] ]
} }
@ -490959,7 +491005,7 @@
] ]
], ],
"color-computed-color-function.html": [ "color-computed-color-function.html": [
"e610754c644a4e9f32a7adceffd49690c23157e7", "530a605bc9292f061dca5a053eb61f77349534ee",
[ [
null, null,
{} {}
@ -491036,7 +491082,7 @@
] ]
], ],
"color-invalid-color-function.html": [ "color-invalid-color-function.html": [
"75d9ff7c21764bb1e011e0f93bfbf46d4b08e5c5", "51f393747c19a257045b2d9f7537ef6c8ff85b11",
[ [
null, null,
{} {}
@ -491113,7 +491159,7 @@
] ]
], ],
"color-valid-color-function.html": [ "color-valid-color-function.html": [
"79e0bde059013de349faf36852f15f7177c67a29", "1eb7c744b2aceea1234801706babdba155e35c9f",
[ [
null, null,
{} {}
@ -503216,6 +503262,13 @@
{} {}
] ]
], ],
"custom-property-animation-list-type-mismatch.html": [
"95757445ae79121893e02d3f37153e197ac4fbd3",
[
null,
{}
]
],
"custom-property-animation-non-inherited-used-by-standard-property.html": [ "custom-property-animation-non-inherited-used-by-standard-property.html": [
"11d3f6740d950b8f86536515242869e468e1a1c3", "11d3f6740d950b8f86536515242869e468e1a1c3",
[ [
@ -529303,6 +529356,23 @@
} }
] ]
], ],
"typing-around-link-element-after-joining-paragraphs.html": [
"4934530c9b842dfe9e1259c0d7541427279eb2f2",
[
"editing/other/typing-around-link-element-after-joining-paragraphs.html?action=Backspace",
{
"testdriver": true,
"timeout": "long"
}
],
[
"editing/other/typing-around-link-element-after-joining-paragraphs.html?action=Delete",
{
"testdriver": true,
"timeout": "long"
}
]
],
"typing-around-link-element-at-collapsed-selection.tentative.html": [ "typing-around-link-element-at-collapsed-selection.tentative.html": [
"2b2e304aba47e4b1ffb4679209afb32debcf94cc", "2b2e304aba47e4b1ffb4679209afb32debcf94cc",
[ [
@ -616364,6 +616434,20 @@
} }
] ]
], ],
"preload-fetch.h2.window.js": [
"121913ed3175d552acf83ba3cb4b19e54b51d75a",
[
"loading/early-hints/preload-fetch.h2.window.html",
{
"script_metadata": [
[
"script",
"resources/early-hints-helpers.sub.js"
]
]
}
]
],
"preload-finished-before-final-response.h2.window.js": [ "preload-finished-before-final-response.h2.window.js": [
"c63239be1f59426b35760c26ef47453c9248c59b", "c63239be1f59426b35760c26ef47453c9248c59b",
[ [
@ -622704,6 +622788,20 @@
{} {}
] ]
], ],
"same-url-replace-cross-document.html": [
"0a976cd51fdcb3205d2a71cc9dc1a9853e417eee",
[
null,
{}
]
],
"same-url-replace-same-document.html": [
"839c687934238d594013ec6ca009532df440d269",
[
null,
{}
]
],
"signal-abort-detach-in-onnavigate.html": [ "signal-abort-detach-in-onnavigate.html": [
"467ea88899323bbf47e9a12fd3a03ee577963a43", "467ea88899323bbf47e9a12fd3a03ee577963a43",
[ [
@ -647141,6 +647239,13 @@
{} {}
] ]
], ],
"scroll-timeline-with-percent-delay.tentative.html": [
"4f2e1761de29d80c8377926f734e0cfbfe831a8c",
[
null,
{}
]
],
"timeline-range-name-offset-in-keyframes.tentative.html": [ "timeline-range-name-offset-in-keyframes.tentative.html": [
"993046c5f2b8d3eb62dcda1adb33ad7a82137524", "993046c5f2b8d3eb62dcda1adb33ad7a82137524",
[ [
@ -647252,6 +647357,13 @@
null, null,
{} {}
] ]
],
"view-timeline-with-delay-and-range.tentative.html": [
"40548bf5cd4548c105872d1066a05e5848c4bfce",
[
null,
{}
]
] ]
}, },
"scroll-timelines": { "scroll-timelines": {
@ -664572,10 +664684,32 @@
}, },
"top-level-storage-access-api": { "top-level-storage-access-api": {
"tentative": { "tentative": {
"requestStorageAccessForOrigin.sub.window.js": [ "requestStorageAccessForOrigin-insecure.sub.window.js": [
"b4bcb2cd34074a6d6d182fef470df88590bb7ca6",
[
"top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.html",
{
"script_metadata": [
[
"script",
"/storage-access-api/helpers.js"
],
[
"script",
"/resources/testdriver.js"
],
[
"script",
"/resources/testdriver-vendor.js"
]
]
}
]
],
"requestStorageAccessForOrigin.sub.https.window.js": [
"f7dd478a7078673643d91fece6f64bf0148c7ec6", "f7dd478a7078673643d91fece6f64bf0148c7ec6",
[ [
"top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.html", "top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.html",
{ {
"script_metadata": [ "script_metadata": [
[ [

View file

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

View file

@ -1,6 +1,3 @@
[block-in-inline-hittest-002.html] [block-in-inline-hittest-002.html]
[elementsFromPoint] [elementsFromPoint]
expected: FAIL expected: FAIL
[elementFromPoint]
expected: FAIL

View file

@ -1,3 +0,0 @@
[block-in-inline-hittest-float-002.html]
[block-in-inline-hittest-float-002]
expected: FAIL

View file

@ -1,3 +1,6 @@
[block-in-inline-hittest-relpos-zindex.html] [block-in-inline-hittest-relpos-zindex.html]
[position: relative; z-index: -1;] [position: relative; z-index: -1;]
expected: FAIL expected: FAIL
[block-in-inline-hittest-relpos-zindex]
expected: FAIL

View file

@ -0,0 +1,2 @@
[opacity-animation-ending-correctly-001.html]
expected: TIMEOUT

View file

@ -194,9 +194,6 @@
[Matching font-style: 'oblique -21deg' should prefer 'oblique -10deg' over 'italic'] [Matching font-style: 'oblique -21deg' should prefer 'oblique -10deg' over 'italic']
expected: FAIL expected: FAIL
[Matching font-style: 'oblique -21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
expected: FAIL
[Matching font-style: 'oblique 21deg' should prefer 'oblique -50deg -20deg' over 'oblique -40deg -30deg'] [Matching font-style: 'oblique 21deg' should prefer 'oblique -50deg -20deg' over 'oblique -40deg -30deg']
expected: FAIL expected: FAIL
@ -206,9 +203,6 @@
[Matching font-style: 'oblique -21deg' should prefer 'italic' over 'oblique 0deg'] [Matching font-style: 'oblique -21deg' should prefer 'italic' over 'oblique 0deg']
expected: FAIL expected: FAIL
[Matching font-style: 'oblique 10deg' should prefer 'oblique 40deg 50deg' over 'italic']
expected: FAIL
[Matching font-style: 'italic' should prefer 'italic' over 'oblique 20deg'] [Matching font-style: 'italic' should prefer 'italic' over 'oblique 20deg']
expected: FAIL expected: FAIL
@ -272,9 +266,6 @@
[Matching font-weight: '500' should prefer '500' over '450 460'] [Matching font-weight: '500' should prefer '500' over '450 460']
expected: FAIL expected: FAIL
[Matching font-style: 'oblique 20deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg']
expected: FAIL
[Matching font-style: 'oblique 0deg' should prefer 'oblique 0deg' over 'oblique 5deg'] [Matching font-style: 'oblique 0deg' should prefer 'oblique 0deg' over 'oblique 5deg']
expected: FAIL expected: FAIL
@ -311,17 +302,20 @@
[Matching font-stretch: '90%' should prefer '60% 70%' over '110% 140%'] [Matching font-stretch: '90%' should prefer '60% 70%' over '110% 140%']
expected: FAIL expected: FAIL
[Matching font-style: 'oblique -21deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg']
expected: FAIL
[Matching font-style: 'oblique 21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg'] [Matching font-style: 'oblique 21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
expected: FAIL expected: FAIL
[Matching font-style: 'oblique 21deg' should prefer 'oblique 40deg 50deg' over 'oblique 20deg'] [Matching font-style: 'oblique 21deg' should prefer 'oblique 40deg 50deg' over 'oblique 20deg']
expected: FAIL expected: FAIL
[Matching font-style: 'oblique 10deg' should prefer 'oblique 15deg 20deg' over 'oblique 30deg 60deg']
expected: FAIL
[Matching font-style: 'oblique -21deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg'] [Matching font-style: 'oblique -21deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg']
expected: FAIL expected: FAIL
[Matching font-style: 'normal' should prefer 'oblique 20deg 30deg' over 'oblique -50deg -20deg']
expected: FAIL
[Matching font-style: 'oblique -10deg' should prefer 'oblique -60deg -30deg' over 'oblique -50deg -40deg']
expected: FAIL
[Matching font-style: 'oblique -20deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg']
expected: FAIL

View file

@ -1,2 +0,0 @@
[trailing-other-space-separators-break-spaces-005.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[trailing-other-space-separators-break-spaces-007.html]
expected: FAIL

View file

@ -53,158 +53,152 @@
[background-position length(px) / events] [background-position length(px) / events]
expected: FAIL expected: FAIL
[padding-bottom length(ex) / values]
expected: FAIL
[padding-bottom length(mm) / values]
expected: FAIL
[padding-bottom length(cm) / values]
expected: FAIL
[padding-bottom length(in) / values]
expected: FAIL
[padding-left length(pt) / values]
expected: FAIL
[padding-left length(pc) / values]
expected: FAIL
[padding-left length(px) / values]
expected: FAIL
[padding-left length(em) / values]
expected: FAIL
[padding-left length(ex) / values]
expected: FAIL
[padding-left length(mm) / values]
expected: FAIL
[padding-left length(cm) / values]
expected: FAIL
[padding-left length(in) / values]
expected: FAIL
[padding-right length(pt) / values]
expected: FAIL
[padding-right length(pc) / values]
expected: FAIL
[padding-right length(px) / values]
expected: FAIL
[padding-right length(em) / values]
expected: FAIL
[padding-right length(ex) / values]
expected: FAIL
[padding-right length(mm) / values]
expected: FAIL
[padding-right length(cm) / values]
expected: FAIL
[padding-right length(in) / values]
expected: FAIL
[padding-top length(pt) / values]
expected: FAIL
[padding-top length(pc) / values]
expected: FAIL
[padding-top length(px) / values]
expected: FAIL
[padding-top length(em) / values]
expected: FAIL
[padding-top length(ex) / values]
expected: FAIL
[padding-top length(mm) / values]
expected: FAIL
[padding-top length(cm) / values]
expected: FAIL
[padding-top length(in) / values]
expected: FAIL
[margin-bottom length(pt) / values]
expected: FAIL
[margin-bottom length(pc) / values]
expected: FAIL
[margin-bottom length(px) / values]
expected: FAIL
[margin-bottom length(em) / values]
expected: FAIL
[margin-bottom length(ex) / values]
expected: FAIL
[margin-bottom length(mm) / values]
expected: FAIL
[margin-bottom length(cm) / values]
expected: FAIL
[margin-bottom length(in) / values]
expected: FAIL
[margin-left length(pt) / values]
expected: FAIL
[margin-left length(pc) / values]
expected: FAIL
[margin-left length(px) / values]
expected: FAIL
[margin-left length(em) / values]
expected: FAIL
[margin-left length(ex) / values]
expected: FAIL
[margin-left length(mm) / values]
expected: FAIL
[margin-left length(cm) / values]
expected: FAIL
[margin-left length(in) / values]
expected: FAIL
[margin-right length(pt) / values]
expected: FAIL
[margin-right length(pc) / values]
expected: FAIL
[margin-right length(px) / values]
expected: FAIL
[margin-right length(em) / values]
expected: FAIL
[margin-right length(ex) / values]
expected: FAIL
[margin-right length(mm) / values]
expected: FAIL
[color color(rgba) / values] [color color(rgba) / values]
expected: FAIL expected: FAIL
[text-shadow shadow(shadow) / values] [text-shadow shadow(shadow) / values]
expected: FAIL expected: FAIL
[font-size length(pt) / values]
expected: FAIL
[font-size length(pc) / values]
expected: FAIL
[font-size length(px) / values]
expected: FAIL
[font-size length(em) / values]
expected: FAIL
[font-size length(ex) / values]
expected: FAIL
[font-size length(mm) / values]
expected: FAIL
[font-size length(cm) / values]
expected: FAIL
[font-size length(in) / values]
expected: FAIL
[font-size percentage(%) / values]
expected: FAIL
[font-weight font-weight(keyword) / values]
expected: FAIL
[font-weight font-weight(numeric) / values]
expected: FAIL
[line-height number(integer) / values]
expected: FAIL
[line-height number(decimal) / values]
expected: FAIL
[line-height length(pt) / values]
expected: FAIL
[line-height length(pc) / values]
expected: FAIL
[line-height length(px) / values]
expected: FAIL
[line-height length(em) / values]
expected: FAIL
[line-height length(ex) / values]
expected: FAIL
[line-height length(mm) / values]
expected: FAIL
[line-height length(cm) / values]
expected: FAIL
[line-height length(in) / values]
expected: FAIL
[line-height percentage(%) / values]
expected: FAIL
[letter-spacing length(pt) / values]
expected: FAIL
[letter-spacing length(pc) / values]
expected: FAIL
[letter-spacing length(px) / values]
expected: FAIL
[letter-spacing length(em) / values]
expected: FAIL
[letter-spacing length(ex) / values]
expected: FAIL
[letter-spacing length(mm) / values]
expected: FAIL
[letter-spacing length(cm) / values]
expected: FAIL
[letter-spacing length(in) / values]
expected: FAIL
[word-spacing length(pt) / values]
expected: FAIL
[word-spacing length(pc) / values]
expected: FAIL
[word-spacing length(px) / values]
expected: FAIL
[word-spacing length(em) / values]
expected: FAIL
[word-spacing length(ex) / values]
expected: FAIL
[word-spacing length(mm) / values]
expected: FAIL
[word-spacing length(cm) / values]
expected: FAIL
[word-spacing length(in) / values]
expected: FAIL
[word-spacing percentage(%) / values]
expected: FAIL
[text-indent length(pt) / values]
expected: FAIL
[text-indent length(pc) / values]
expected: FAIL
[text-indent length(px) / values]
expected: FAIL
[text-indent length(em) / values]
expected: FAIL
[text-indent length(ex) / values]
expected: FAIL
[text-indent length(mm) / values]
expected: FAIL
[text-indent length(cm) / values]
expected: FAIL
[text-indent length(in) / values]
expected: FAIL
[text-indent percentage(%) / values]
expected: FAIL

View file

@ -356,125 +356,152 @@
[margin-right length(mm) / events] [margin-right length(mm) / events]
expected: FAIL expected: FAIL
[background-color color(rgba) / events] [color color(rgba) / events]
expected: FAIL expected: FAIL
[border-top-width length(pt) / events] [font-size length(pt) / events]
expected: FAIL expected: FAIL
[border-top-width length(pc) / events] [font-size length(pc) / events]
expected: FAIL expected: FAIL
[border-top-width length(px) / events] [font-size length(px) / events]
expected: FAIL expected: FAIL
[border-top-width length(em) / events] [font-size length(em) / events]
expected: FAIL expected: FAIL
[border-top-width length(ex) / events] [font-size length(ex) / events]
expected: FAIL expected: FAIL
[border-top-width length(mm) / events] [font-size length(mm) / events]
expected: FAIL expected: FAIL
[border-top-width length(cm) / events] [font-size length(cm) / events]
expected: FAIL expected: FAIL
[border-top-width length(in) / events] [font-size length(in) / events]
expected: FAIL expected: FAIL
[border-right-width length(pt) / events] [font-size percentage(%) / events]
expected: FAIL expected: FAIL
[border-right-width length(pc) / events] [font-weight font-weight(keyword) / events]
expected: FAIL expected: FAIL
[border-right-width length(px) / events] [font-weight font-weight(numeric) / events]
expected: FAIL expected: FAIL
[border-right-width length(em) / events] [line-height number(integer) / events]
expected: FAIL expected: FAIL
[border-right-width length(ex) / events] [line-height number(decimal) / events]
expected: FAIL expected: FAIL
[border-right-width length(mm) / events] [line-height length(pt) / events]
expected: FAIL expected: FAIL
[border-right-width length(cm) / events] [line-height length(pc) / events]
expected: FAIL expected: FAIL
[border-right-width length(in) / events] [line-height length(px) / events]
expected: FAIL expected: FAIL
[border-bottom-width length(pt) / events] [line-height length(em) / events]
expected: FAIL expected: FAIL
[border-bottom-width length(pc) / events] [line-height length(ex) / events]
expected: FAIL expected: FAIL
[border-bottom-width length(px) / events] [line-height length(mm) / events]
expected: FAIL expected: FAIL
[border-bottom-width length(em) / events] [line-height length(cm) / events]
expected: FAIL expected: FAIL
[border-bottom-width length(ex) / events] [line-height length(in) / events]
expected: FAIL expected: FAIL
[border-bottom-width length(mm) / events] [line-height percentage(%) / events]
expected: FAIL expected: FAIL
[border-bottom-width length(cm) / events] [letter-spacing length(pt) / events]
expected: FAIL expected: FAIL
[border-bottom-width length(in) / events] [letter-spacing length(pc) / events]
expected: FAIL expected: FAIL
[border-left-width length(pt) / events] [letter-spacing length(px) / events]
expected: FAIL expected: FAIL
[border-left-width length(pc) / events] [letter-spacing length(em) / events]
expected: FAIL expected: FAIL
[border-left-width length(px) / events] [letter-spacing length(ex) / events]
expected: FAIL expected: FAIL
[border-left-width length(em) / events] [letter-spacing length(mm) / events]
expected: FAIL expected: FAIL
[border-left-width length(ex) / events] [letter-spacing length(cm) / events]
expected: FAIL expected: FAIL
[border-left-width length(mm) / events] [letter-spacing length(in) / events]
expected: FAIL expected: FAIL
[border-left-width length(cm) / events] [word-spacing length(pt) / events]
expected: FAIL expected: FAIL
[border-left-width length(in) / events] [word-spacing length(pc) / events]
expected: FAIL expected: FAIL
[border-top-color color(rgba) / events] [word-spacing length(px) / events]
expected: FAIL expected: FAIL
[border-right-color color(rgba) / events] [word-spacing length(em) / events]
expected: FAIL expected: FAIL
[border-bottom-color color(rgba) / events] [word-spacing length(ex) / events]
expected: FAIL expected: FAIL
[border-left-color color(rgba) / events] [word-spacing length(mm) / events]
expected: FAIL expected: FAIL
[padding-bottom length(pt) / events] [word-spacing length(cm) / events]
expected: FAIL expected: FAIL
[padding-bottom length(pc) / events] [word-spacing length(in) / events]
expected: FAIL expected: FAIL
[padding-bottom length(px) / events] [word-spacing percentage(%) / events]
expected: FAIL expected: FAIL
[padding-bottom length(em) / events] [text-indent length(pt) / events]
expected: FAIL
[text-indent length(pc) / events]
expected: FAIL
[text-indent length(px) / events]
expected: FAIL
[text-indent length(em) / events]
expected: FAIL
[text-indent length(ex) / events]
expected: FAIL
[text-indent length(mm) / events]
expected: FAIL
[text-indent length(cm) / events]
expected: FAIL
[text-indent length(in) / events]
expected: FAIL
[text-indent percentage(%) / events]
expected: FAIL
[text-shadow shadow(shadow) / events]
expected: FAIL expected: FAIL

View file

@ -1,3 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -0,0 +1,3 @@
[MediaQueryListEvent.html]
[argument of onchange]
expected: FAIL

View file

@ -0,0 +1,3 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,3 @@
[elementFromPoint-dynamic-anon-box.html]
[Link should be clickable after hiding a scrollbox with an anonymous table inside]
expected: FAIL

View file

@ -0,0 +1,3 @@
[elementFromPoint-ellipsis-in-inline-box.html]
[elementFromPoint-ellipsis-in-inline-box]
expected: FAIL

View file

@ -0,0 +1,3 @@
[elementFromPoint-float-in-table.html]
[float-in-div]
expected: FAIL

View file

@ -16,3 +16,6 @@
[<li>Image Inside 2</li>] [<li>Image Inside 2</li>]
expected: FAIL expected: FAIL
[<li>Image Inside 1</li>]
expected: FAIL

View file

@ -1,3 +0,0 @@
[elementFromPoint-visibility-hidden-resizer.html]
[elementFromPoint on resizer area of an element with visibility:hidden]
expected: FAIL

View file

@ -17,6 +17,3 @@
[test some point of the element: bottom right corner] [test some point of the element: bottom right corner]
expected: FAIL expected: FAIL
[test the top of layer]
expected: FAIL

View file

@ -77,5 +77,5 @@
[Input: "Content-Length: ". Expected: 42.] [Input: "Content-Length: ". Expected: 42.]
expected: FAIL expected: FAIL
[Input: "Content-Length: 30". Expected: 30.] [Input: "Content-Length: 42,42". Expected: 42.]
expected: FAIL expected: FAIL

View file

@ -8,11 +8,5 @@
[X-Content-Type-Options%3A%20nosniff%0C] [X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff] [X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL

View file

@ -1,10 +1,9 @@
[iframe-src-aboutblank-navigate-immediately.html] [iframe-src-aboutblank-navigate-immediately.html]
expected: TIMEOUT
[Navigating to a different document with window.open] [Navigating to a different document with window.open]
expected: FAIL expected: FAIL
[Navigating to a different document with form submission] [Navigating to a different document with form submission]
expected: TIMEOUT expected: FAIL
[Navigating to a different document with link click] [Navigating to a different document with link click]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[javascript-url-load-as-html.xhtml]
expected: TIMEOUT
[javascript: URL navigation to a string must create a HTML document using the correct properties]
expected: TIMEOUT

View file

@ -13,9 +13,3 @@
[0080 00FF 0100 set in href="" targeting a frame and clicked] [0080 00FF 0100 set in href="" targeting a frame and clicked]
expected: FAIL expected: FAIL
[D83D DE0D set in href="" targeting a frame and clicked]
expected: FAIL
[DE0D 0041 set in href="" targeting a frame and clicked]
expected: FAIL

View file

@ -1,6 +1,3 @@
[navigate-to-unparseable-url.html] [navigate-to-unparseable-url.html]
[location.href setter throws a SyntaxError DOMException for unparseable URLs] [location.href setter throws a SyntaxError DOMException for unparseable URLs]
expected: FAIL expected: FAIL
[<a> tag navigate fails for unparseable URLs]
expected: FAIL

View file

@ -0,0 +1,3 @@
[a-click.html]
[aElement.click() before the load event must NOT replace]
expected: FAIL

View file

@ -1,4 +1,3 @@
[form-submit-button-click.html] [form-submit-button-click.html]
expected: TIMEOUT
[Replace before load, triggered by submitButton.click()] [Replace before load, triggered by submitButton.click()]
expected: TIMEOUT expected: FAIL

View file

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

View file

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

View file

@ -1,3 +0,0 @@
[navigate-to-about-blank-while-initial-load-pending.html]
[Navigating to about:blank while window.open initial load pending.]
expected: FAIL

View file

@ -1,4 +0,0 @@
[opener-setter.html]
expected: TIMEOUT
[Auxiliary browsing context created via `window.open` and setting `window.opener` to `test` should report `test`]
expected: TIMEOUT

View file

@ -1,2 +1,2 @@
[canvas.2d.disconnected.html] [canvas.2d.disconnected.html]
expected: FAIL expected: TIMEOUT

View file

@ -1,7 +1,6 @@
[autofocus-dialog.html] [autofocus-dialog.html]
expected: TIMEOUT
[<dialog> can contain autofocus, without stopping page autofocus content from working] [<dialog> can contain autofocus, without stopping page autofocus content from working]
expected: FAIL expected: FAIL
[<dialog>-contained autofocus element gets focused when the dialog is shown] [<dialog>-contained autofocus element gets focused when the dialog is shown]
expected: TIMEOUT expected: FAIL

View file

@ -1,5 +1,4 @@
[supported-elements.html] [supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus] [Contenteditable element should support autofocus]
expected: FAIL expected: FAIL
@ -10,7 +9,7 @@
expected: FAIL expected: FAIL
[Area element should support autofocus] [Area element should support autofocus]
expected: TIMEOUT expected: FAIL
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: FAIL

View file

@ -1,7 +1,6 @@
[update-the-rendering.html] [update-the-rendering.html]
expected: TIMEOUT
["Flush autofocus candidates" should be happen after the first animation frame callbacks, and before a resize event in the next iteration of window event loop.] ["Flush autofocus candidates" should be happen after the first animation frame callbacks, and before a resize event in the next iteration of window event loop.]
expected: TIMEOUT expected: TIMEOUT
["Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks] ["Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks]
expected: TIMEOUT expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-1.html] [iframe_sandbox_popups_escaping-1.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,5 +1,4 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
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: FAIL expected: FAIL

View file

@ -1,3 +1,4 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.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: FAIL expected: NOTRUN

View file

@ -175,3 +175,6 @@
[multipart/form-data: 0x00 in value (normal form)] [multipart/form-data: 0x00 in value (normal form)]
expected: FAIL expected: FAIL
[multipart/form-data: Basic test (formdata event)]
expected: FAIL

View file

@ -5,9 +5,6 @@
[text/plain: Basic File test (normal form)] [text/plain: Basic File test (normal form)]
expected: FAIL expected: FAIL
[text/plain: Basic File test (formdata event)]
expected: FAIL
[text/plain: 0x00 in name (normal form)] [text/plain: 0x00 in name (normal form)]
expected: FAIL expected: FAIL

View file

@ -11,3 +11,6 @@
[Check that rel=noopener with target=_parent does a normal load] [Check that rel=noopener with target=_parent does a normal load]
expected: FAIL expected: FAIL
[Check that rel=noopener with target=_self does a normal load]
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,4 +16,4 @@
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,7 +1,6 @@
[promise-rejection-events.html] [promise-rejection-events.html]
expected: TIMEOUT
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire] [delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
expected: TIMEOUT expected: FAIL
[unhandledrejection: from createImageBitmap which is UA triggered] [unhandledrejection: from createImageBitmap which is UA triggered]
expected: FAIL expected: FAIL

View file

@ -40,10 +40,10 @@
expected: FAIL expected: FAIL
[content-type 13 : text/plain,*/*;charset=gbk] [content-type 13 : text/plain,*/*;charset=gbk]
expected: FAIL expected: TIMEOUT
[content-type 14 : text/html,*/*;charset=gbk] [content-type 14 : text/html,*/*;charset=gbk]
expected: TIMEOUT expected: NOTRUN
[content-type 15 : text/html;x=",text/plain] [content-type 15 : text/html;x=",text/plain]
expected: NOTRUN expected: NOTRUN

View file

@ -1,5 +1,4 @@
[audiocontext-not-fully-active.html] [audiocontext-not-fully-active.html]
expected: TIMEOUT
[frame in navigated remote-site frame] [frame in navigated remote-site frame]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,5 @@
[cross-partition.https.tentative.html] [cross-partition.https.tentative.html]
expected: CRASH expected: TIMEOUT
[BroadcastChannel messages aren't received from a cross-partition iframe] [BroadcastChannel messages aren't received from a cross-partition iframe]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,4 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html]
expected: TIMEOUT
[StorageKey: test 3P about:blank window opened from a 3P iframe]
expected: TIMEOUT

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1410949">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="columns:2; column-fill:auto; gap:0; width:100px; height:100px; background:red;">
<div>
<div style="display:flex; flex-flow:column; height:100%;">
<div style="overflow:clip; background:green;">
<div style="height:10px;"></div>
<div style="break-inside:avoid; height:100px;"></div>
</div>
</div>
</div>
</div>

View file

@ -31,12 +31,6 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot
test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`);
test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`);
test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`);
test_computed_value("color", `color(${colorSpace} 50% -200)`, `color(${colorSpace} 0.5 -200 0)`);
test_computed_value("color", `color(${colorSpace} 50%)`, `color(${colorSpace} 0.5 0 0)`);
test_computed_value("color", `color(${colorSpace})`, `color(${colorSpace} 0 0 0)`);
test_computed_value("color", `color(${colorSpace} 50% -200 / 0.5)`, `color(${colorSpace} 0.5 -200 0 / 0.5)`);
test_computed_value("color", `color(${colorSpace} 50% / 0.5)`, `color(${colorSpace} 0.5 0 0 / 0.5)`);
test_computed_value("color", `color(${colorSpace} / 0.5)`, `color(${colorSpace} 0 0 0 / 0.5)`);
test_computed_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`); test_computed_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`);
test_computed_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`); test_computed_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`);
test_computed_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`); test_computed_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`);
@ -71,12 +65,6 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`);
test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`);
test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`);
test_computed_value("color", `color(${colorSpace} 1 1)`, `color(${resultColorSpace} 1 1 0)`);
test_computed_value("color", `color(${colorSpace} 1)`, `color(${resultColorSpace} 1 0 0)`);
test_computed_value("color", `color(${colorSpace})`, `color(${resultColorSpace} 0 0 0)`);
test_computed_value("color", `color(${colorSpace} 1 1 / .5)`, `color(${resultColorSpace} 1 1 0 / 0.5)`);
test_computed_value("color", `color(${colorSpace} 1 / 0.5)`, `color(${resultColorSpace} 1 0 0 / 0.5)`);
test_computed_value("color", `color(${colorSpace} / 50%)`, `color(${resultColorSpace} 0 0 0 / 0.5)`);
test_computed_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`); test_computed_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`);
test_computed_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`); test_computed_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`);
@ -276,9 +264,6 @@ test_computed_value("color", "color(srgb 1 1 1 / 0.5)", "color(srgb 1 1 1 / 0.5)
test_computed_value("color", "color(srgb 1 1 1 / 0)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0 alpha]"); test_computed_value("color", "color(srgb 1 1 1 / 0)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0 alpha]");
test_computed_value("color", "color(srgb 1 1 1 / 50%)", "color(srgb 1 1 1 / 0.5)", "[sRGB white with 50% alpha]"); test_computed_value("color", "color(srgb 1 1 1 / 50%)", "color(srgb 1 1 1 / 0.5)", "[sRGB white with 50% alpha]");
test_computed_value("color", "color(srgb 1 1 1 / 0%)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0% alpha]"); test_computed_value("color", "color(srgb 1 1 1 / 0%)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0% alpha]");
test_computed_value("color", "color(srgb 1 1)", "color(srgb 1 1 0)", "[One missing component is 0]");
test_computed_value("color", "color(srgb 1)", "color(srgb 1 0 0)", "[Two missing components are 0]");
test_computed_value("color", "color(srgb)", "color(srgb 0 0 0)", "[All components missing]");
test_computed_value("color", "color(display-p3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Display P3 color]"); test_computed_value("color", "color(display-p3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Display P3 color]");
test_computed_value("color", "color(dIspLaY-P3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Different case for Display P3]"); test_computed_value("color", "color(dIspLaY-P3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Different case for Display P3]");

View file

@ -20,6 +20,13 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot
test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`); test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`);
test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`); test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`);
test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`); test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`);
// Missing parameters should not parse
test_invalid_value("color", `color(${colorSpace} 50% -200)`);
test_invalid_value("color", `color(${colorSpace} 50%)`);
test_invalid_value("color", `color(${colorSpace})`);
test_invalid_value("color", `color(${colorSpace} 50% -200 / 0.5)`);
test_invalid_value("color", `color(${colorSpace} 50% / 0.5)`);
test_invalid_value("color", `color(${colorSpace} / 0.5)`);
} }
for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
@ -30,6 +37,13 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`); test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`);
test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`); test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`);
test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`); test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`);
// Missing parameters should not parse
test_invalid_value("color", `color(${colorSpace} 1 1)`);
test_invalid_value("color", `color(${colorSpace} 1)`);
test_invalid_value("color", `color(${colorSpace})`);
test_invalid_value("color", `color(${colorSpace} 1 1 / .5)`);
test_invalid_value("color", `color(${colorSpace} 1 / 0.5)`);
test_invalid_value("color", `color(${colorSpace} / 50%)`);
} }
test_invalid_value("color", "color()"); // Empty test_invalid_value("color", "color()"); // Empty

View file

@ -26,12 +26,6 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot
test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`);
test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`);
test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`);
test_valid_value("color", `color(${colorSpace} 50% -200)`, `color(${colorSpace} 0.5 -200 0)`);
test_valid_value("color", `color(${colorSpace} 50%)`, `color(${colorSpace} 0.5 0 0)`);
test_valid_value("color", `color(${colorSpace})`, `color(${colorSpace} 0 0 0)`);
test_valid_value("color", `color(${colorSpace} 50% -200 / 0.5)`, `color(${colorSpace} 0.5 -200 0 / 0.5)`);
test_valid_value("color", `color(${colorSpace} 50% / 0.5)`, `color(${colorSpace} 0.5 0 0 / 0.5)`);
test_valid_value("color", `color(${colorSpace} / 0.5)`, `color(${colorSpace} 0 0 0 / 0.5)`);
test_valid_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`); test_valid_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`);
test_valid_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`); test_valid_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`);
test_valid_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`); test_valid_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`);
@ -66,12 +60,6 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) {
test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`);
test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`);
test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`);
test_valid_value("color", `color(${colorSpace} 1 1)`, `color(${resultColorSpace} 1 1 0)`);
test_valid_value("color", `color(${colorSpace} 1)`, `color(${resultColorSpace} 1 0 0)`);
test_valid_value("color", `color(${colorSpace})`, `color(${resultColorSpace} 0 0 0)`);
test_valid_value("color", `color(${colorSpace} 1 1 / .5)`, `color(${resultColorSpace} 1 1 0 / 0.5)`);
test_valid_value("color", `color(${colorSpace} 1 / 0.5)`, `color(${resultColorSpace} 1 0 0 / 0.5)`);
test_valid_value("color", `color(${colorSpace} / 50%)`, `color(${resultColorSpace} 0 0 0 / 0.5)`);
test_valid_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`); test_valid_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`);
test_valid_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`); test_valid_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`);

View file

@ -10,6 +10,7 @@
.test { .test {
font-family: "Lato-Medium"; font-family: "Lato-Medium";
font-size: 3em; font-size: 3em;
font-kerning: none;
} }
</style> </style>

View file

@ -16,6 +16,7 @@
.test { .test {
font-family: "Lato-Medium"; font-family: "Lato-Medium";
font-size: 3em; font-size: 3em;
font-kerning: none;
} }
p.nosynth::first-letter { p.nosynth::first-letter {
font-style: italic; font-style: italic;

View file

@ -10,6 +10,7 @@
.test { .test {
font-family: "Lato-Medium"; font-family: "Lato-Medium";
font-size: 3em; font-size: 3em;
font-kerning: none;
} }
</style> </style>

View file

@ -16,6 +16,7 @@
.test { .test {
font-family: "Lato-Medium"; font-family: "Lato-Medium";
font-size: 3em; font-size: 3em;
font-kerning: none;
} }
p.nosynth::first-letter { p.nosynth::first-letter {
font-weight: bold; font-weight: bold;

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>Nest-containing in forgiving parsing</title>
<style>
.test {
background-color: green;
width: 100px;
height: 100px;
display: grid;
}
body * + * {
margin-top: 8px;
}
</style>
<body>
<p>Tests pass if <strong>block is green</strong></p>
<div class="test"></div>
</body>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<title>Nest-containing in forgiving parsing</title>
<link rel="author" title="Steinar H. Gunderson" href="mailto:sesse@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-nesting-1/">
<link rel="match" href="nest-containing-forgiving-ref.html">
<style>
.test {
background-color: red;
width: 100px;
height: 100px;
display: grid;
}
.does-not-exist {
:is(.test-1, !&) {
background-color: green;
}
}
body * + * {
margin-top: 8px;
}
</style>
<body>
<p>Tests pass if <strong>block is green</strong></p>
<div class="test test-1"></div>
</body>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/utils.js"></script>
<div id="target"></div>
<script>
animation_test({
syntax: "<number>+ | <transform-list>",
inherits: false,
initialValue: "translateX(100px)"
}, {
keyframes: ["200"],
expected: "200"
}, 'Animating a custom property allowing multiple list types with two mismatching types');
</script>

View file

@ -19,13 +19,16 @@ body { background: pink }
border: 1px solid black; border: 1px solid black;
box-sizing: border-box; box-sizing: border-box;
} }
.hidden { .vis-hidden {
visibility: hidden; visibility: hidden;
} }
.cv-hidden {
content-visibility: hidden;
}
</style> </style>
<div class=flex> <div class=flex>
<div class="box hidden">ancestor c-v</div> <div class="box vis-hidden">ancestor c-v</div>
<div class=box>self c-v</div> <div class="box cv-hidden">self c-v</div>
<div class=box>descendant c-v</div> <div class="box cv-hidden">descendant c-v</div>
</div> </div>

View file

@ -2868,4 +2868,47 @@ var browserTests = [
"<p><font face=\"monospace\">foo[]</font><font face=\"sans-serif\">bar</font></p>", "<p><font face=\"monospace\">foo[]</font><font face=\"sans-serif\">bar</font></p>",
[true,true,true], [true,true,true],
{"fontName":[false,false,"sans-serif",false,false,"monospace"]}], {"fontName":[false,false,"sans-serif",false,false,"monospace"]}],
// After joining blocks, caret should be end of the deepest left block end for
// making the following input will be styled with the style there.
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
[["styleWithCSS","false"],["delete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
[["styleWithCSS","false"],["delete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
[["styleWithCSS","false"],["delete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
["<span style=\"color:rgb(0, 0, 255)\">foo</span><br><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""]],
"<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[true,true],
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
["<span style=\"color:rgb(0, 0, 255)\">foo<br></span><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""]],
"<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[true,true],
{"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
] ]

View file

@ -2748,4 +2748,47 @@ var browserTests = [
"<p><font face=\"monospace\">foo[]</font><font face=\"sans-serif\">bar</font></p>", "<p><font face=\"monospace\">foo[]</font><font face=\"sans-serif\">bar</font></p>",
[true,true,true], [true,true,true],
{"fontName":[false,false,"monospace",false,false,"monospace"]}], {"fontName":[false,false,"monospace",false,false,"monospace"]}],
// After joining blocks, caret should be end of the deepest left block end for
// making the following input will be styled with the style there.
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[["styleWithCSS","false"],["forwarddelete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[["styleWithCSS","false"],["forwarddelete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[["styleWithCSS","false"],["forwarddelete",""]],
"<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true],
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
["<span style=\"color:rgb(0, 0, 255)\">foo[]</span><br><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""]],
"<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[true,true],
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
["<span style=\"color:rgb(0, 0, 255)\">foo[]<br></span><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""]],
"<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[true,true],
{"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
] ]

View file

@ -2934,4 +2934,87 @@ var browserTests = [
"abc<font style=\"background-color:rgb(0, 221, 221)\" size=\"7\" face=\"monospace\" color=\"#ff0000\">[d]</font>ef"], "abc<font style=\"background-color:rgb(0, 221, 221)\" size=\"7\" face=\"monospace\" color=\"#ff0000\">[d]</font>ef"],
[true,true,true,true,true,true], [true,true,true,true,true,true],
{}], {}],
// Typed text after joining paragraphs should be inserted into the previous text node.
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>",
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<span style=\"color:rgb(0, 0, 255)\">foo</span><br><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
"<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[true,true,true],
{}],
["<span style=\"color:rgb(0, 0, 255)\">foo<br></span><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>",
[["styleWithCSS","false"],["delete",""],["insertText","A"]],
"<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
"<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[true,true,true],
{}],
["<span style=\"color:rgb(0, 0, 255)\">foo[]</span><br><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
"<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[true,true,true],
{}],
["<span style=\"color:rgb(0, 0, 255)\">foo[]<br></span><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>",
[["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]],
"<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>",
[true,true,true],
{}],
] ]

View file

@ -0,0 +1,194 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" content="long">
<meta name="variant" content="?action=Backspace">
<meta name="variant" content="?action=Delete">
<title>Typing after joining paragraph shouldn't be inserted into the link</title>
<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 src="../include/editor-test-utils.js"></script>
</head>
<body>
<div contenteditable></div>
<script>
"use strict";
const params = new URLSearchParams(location.search.substring(1));
const backspace = params.get("action") == "Backspace";
const bracketsForBackspace = backspace ? "[]" : "";
const bracketsForDelete = backspace ? "" : "[]";
const editingHost = document.querySelector("div[contenteditable]");
const utils = new EditorTestUtils(editingHost);
function addPromiseTest(aTest) {
promise_test(async () => {
editingHost.focus();
utils.setupEditingHost(aTest.innerHTML);
await (backspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
await utils.sendKey("X", utils.kShiftKey);
await utils.sendKey("Y", utils.kShiftKey);
utils.normalizeStyleAttributeValues();
if (Array.isArray(aTest.expectedResult)) {
assert_in_array(editingHost.innerHTML, aTest.expectedResult);
} else {
assert_equals(editingHost.innerHTML, aTest.expectedResult);
}
}, `${backspace ? "Backspace" : "Delete"} in "${aTest.innerHTML}"`);
}
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}<br></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}<br></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>`
});
addPromiseTest({
innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span>`,
});
addPromiseTest({
innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}<br></a><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span>`,
});
// Should clear only the link style.
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
bracketsForDelete
}</b></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
bracketsForDelete
}</b></a><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
bracketsForDelete
}</b><br></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
bracketsForDelete
}</b></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
bracketsForDelete
}</b></a><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
bracketsForDelete
}</b><br></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
bracketsForDelete
}</b></a><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`,
});
addPromiseTest({
innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${
bracketsForDelete
}</b><br></a><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`,
});
addPromiseTest({
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a></b></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a></b><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}<br></a></b></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a></b></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a></b><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}<br></a></b></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`,
expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`,
});
addPromiseTest({
innerHTML: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}</a></b><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`,
});
addPromiseTest({
innerHTML: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${
bracketsForDelete
}<br></a></b><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`,
expectedResult: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`,
});
</script>
</body>
</html>

View file

@ -31,9 +31,9 @@
from typing import List, Mapping from typing import List, Mapping
import re import re
import codecs
import importlib import importlib
import os import os
import pathlib
import sys import sys
try: try:
@ -287,16 +287,16 @@ def _generate_test(test: Mapping[str, str], templates: Mapping[str, str],
test_path += '-manual' test_path += '-manual'
if is_offscreen_canvas: if is_offscreen_canvas:
f = codecs.open(f'{test_path}.html', 'w', 'utf-8') pathlib.Path(f'{test_path}.html').write_text(
f.write(templates['w3coffscreencanvas'] % template_params) templates['w3coffscreencanvas'] % template_params, 'utf-8')
timeout = ('// META: timeout=%s\n' % timeout = ('// META: timeout=%s\n' %
test['timeout'] if 'timeout' in test else '') test['timeout'] if 'timeout' in test else '')
template_params['timeout'] = timeout template_params['timeout'] = timeout
f = codecs.open(f'{test_path}.worker.js', 'w', 'utf-8') pathlib.Path(f'{test_path}.worker.js').write_text(
f.write(templates['w3cworker'] % template_params) templates['w3cworker'] % template_params, 'utf-8')
else: else:
f = codecs.open(f'{test_path}.html', 'w', 'utf-8') pathlib.Path(f'{test_path}.html').write_text(
f.write(templates['w3ccanvas'] % template_params) templates['w3ccanvas'] % template_params, 'utf-8')
def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str, def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
@ -307,8 +307,8 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
doctest.testmod() doctest.testmod()
sys.exit() sys.exit()
templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read()) templates = yaml.safe_load(pathlib.Path(TEMPLATEFILE).read_text())
name_to_sub_dir = yaml.safe_load(open(NAME2DIRFILE, 'r').read()) name_to_sub_dir = yaml.safe_load(pathlib.Path(NAME2DIRFILE).read_text())
tests = [] tests = []
test_yaml_directory = 'yaml/element' test_yaml_directory = 'yaml/element'
@ -318,8 +318,8 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
os.path.join(test_yaml_directory, f) os.path.join(test_yaml_directory, f)
for f in os.listdir(test_yaml_directory) if f.endswith('.yaml') for f in os.listdir(test_yaml_directory) if f.endswith('.yaml')
] ]
for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES], for t in sum(
[]): [yaml.safe_load(pathlib.Path(f).read_text()) for f in TESTSFILES], []):
if 'DISABLED' in t: if 'DISABLED' in t:
continue continue
if 'meta' in t: if 'meta' in t:

View file

@ -31,12 +31,12 @@
from typing import List, Mapping from typing import List, Mapping
import re import re
import codecs
import collections import collections
import dataclasses import dataclasses
import enum import enum
import importlib import importlib
import os import os
import pathlib
import sys import sys
try: try:
@ -317,26 +317,28 @@ def _generate_test(test: Mapping[str, str], templates: Mapping[str, str],
# Create test cases for canvas and offscreencanvas. # Create test cases for canvas and offscreencanvas.
if html_canvas_cfg.enabled: if html_canvas_cfg.enabled:
f = codecs.open(f'{canvas_path}.html', 'w', 'utf-8') pathlib.Path(f'{canvas_path}.html').write_text(
f.write(templates['w3ccanvas'] % template_params) templates['w3ccanvas'] % template_params, 'utf-8')
if offscreen_canvas_cfg.enabled: if offscreen_canvas_cfg.enabled:
f_html = codecs.open(f'{offscreen_path}.html', 'w', 'utf-8')
f_worker = codecs.open(f'{offscreen_path}.worker.js', 'w', 'utf-8')
if ('then(t_pass, t_fail);' in code_canvas): if ('then(t_pass, t_fail);' in code_canvas):
temp_offscreen = templates['w3coffscreencanvas'].replace( temp_offscreen = templates['w3coffscreencanvas'].replace(
't.done();\n', '') 't.done();\n', '')
temp_worker = templates['w3cworker'].replace('t.done();\n', '') temp_worker = templates['w3cworker'].replace('t.done();\n', '')
f_html.write(temp_offscreen % template_params) pathlib.Path(f'{offscreen_path}.html').write_text(
temp_offscreen % template_params, 'utf-8')
timeout = ('// META: timeout=%s\n' % timeout = ('// META: timeout=%s\n' %
test['timeout'] if 'timeout' in test else '') test['timeout'] if 'timeout' in test else '')
template_params['timeout'] = timeout template_params['timeout'] = timeout
f_worker.write(temp_worker % template_params) pathlib.Path(f'{offscreen_path}.worker.js').write_text(
temp_worker % template_params, 'utf-8')
else: else:
f_html.write(templates['w3coffscreencanvas'] % template_params) pathlib.Path(f'{offscreen_path}.html').write_text(
templates['w3coffscreencanvas'] % template_params, 'utf-8')
timeout = ('// META: timeout=%s\n' % timeout = ('// META: timeout=%s\n' %
test['timeout'] if 'timeout' in test else '') test['timeout'] if 'timeout' in test else '')
template_params['timeout'] = timeout template_params['timeout'] = timeout
f_worker.write(templates['w3cworker'] % template_params) pathlib.Path(f'{offscreen_path}.worker.js').write_text(
templates['w3cworker'] % template_params, 'utf-8')
def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None: def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
@ -351,8 +353,8 @@ def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
doctest.testmod() doctest.testmod()
sys.exit() sys.exit()
templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read()) templates = yaml.safe_load(pathlib.Path(TEMPLATEFILE).read_text())
name_to_sub_dir = yaml.safe_load(open(NAME2DIRFILE, 'r').read()) name_to_sub_dir = yaml.safe_load(pathlib.Path(NAME2DIRFILE).read_text())
tests = [] tests = []
test_yaml_directory = 'yaml-new' test_yaml_directory = 'yaml-new'
@ -360,8 +362,8 @@ def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
os.path.join(test_yaml_directory, f) os.path.join(test_yaml_directory, f)
for f in os.listdir(test_yaml_directory) if f.endswith('.yaml') for f in os.listdir(test_yaml_directory) if f.endswith('.yaml')
] ]
for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES], for t in sum(
[]): [yaml.safe_load(pathlib.Path(f).read_text()) for f in TESTSFILES], []):
if 'DISABLED' in t: if 'DISABLED' in t:
continue continue
if 'meta' in t: if 'meta' in t:

View file

@ -0,0 +1,10 @@
// META: script=resources/early-hints-helpers.sub.js
test(() => {
const preloads = [{
"url": "empty.json?" + Date.now(),
"as_attr": "fetch",
"crossorigin_attr": "",
}];
navigateToTestWithEarlyHints("resources/preload-fetch.html", preloads);
});

View file

@ -14,6 +14,8 @@ const CROSS_ORIGIN_RESOURCES_URL = CROSS_ORIGIN + RESOURCES_PATH;
* @property {string} url - A URL to preload. Note: This is relative to the * @property {string} url - A URL to preload. Note: This is relative to the
* `test_url` parameter of `navigateToTestWithEarlyHints()`. * `test_url` parameter of `navigateToTestWithEarlyHints()`.
* @property {string} as_attr - `as` attribute of this preload. * @property {string} as_attr - `as` attribute of this preload.
* @property {string} [crossorigin_attr] - `crossorigin` attribute of this
* preload.
* *
* @param {string} test_url - URL of a test after the Early Hints response. * @param {string} test_url - URL of a test after the Early Hints response.
* @param {Array<Preload>} preloads - Preloads included in the Early Hints response. * @param {Array<Preload>} preloads - Preloads included in the Early Hints response.

View file

@ -18,6 +18,12 @@ def handle_headers(frame, request, response):
for encoded_preload in request.GET.get_list(b"preloads"): for encoded_preload in request.GET.get_list(b"preloads"):
preload = json.loads(encoded_preload.decode("utf-8")) preload = json.loads(encoded_preload.decode("utf-8"))
header = "<{}>; rel=preload; as={}".format(preload["url"], preload["as_attr"]) header = "<{}>; rel=preload; as={}".format(preload["url"], preload["as_attr"])
if "crossorigin_attr" in preload:
crossorigin = preload["crossorigin_attr"]
if crossorigin:
header += "; crossorigin={}".format(crossorigin)
else:
header += "; crossorigin"
preload_headers.append(header.encode()) preload_headers.append(header.encode())
# Send a 103 response. # Send a 103 response.

View file

@ -0,0 +1,4 @@
cache-control: max-age=600
access-control-allow-origin: *
timing-allow-origin: *
cross-origin-resource-policy: cross-origin

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<meta charset=utf-8>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="early-hints-helpers.sub.js"></script>
<body>
<script>
promise_test(async (t) => {
const preloads = getPreloadsFromSearchParams();
assert_equals(preloads.length, 1);
const preload = preloads[0];
await fetch(preload.url).then((response) => response.json());
const name = new URL(preload.url, window.location);
assert_true(isPreloadedByEarlyHints(name));
}, "Ensure early hints preload works for fetch()");
</script>
</body>

View file

@ -0,0 +1,23 @@
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/helpers.js"></script>
<script>
promise_test(async t => {
// Wait for after the load event so that we are definitely testing the
// same URL as the cause of the rejections.
await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0));
assert_equals(navigation.entries().length, 1);
navigation.onnavigate = t.step_func(e => {
e.intercept();
assert_equals(e.navigationType, "replace");
});
navigation.onnavigateerror = t.unreached_func("onnavigateerror should not be called");
await navigation.navigate(location.href).finished;
assert_equals(navigation.entries().length, 1);
assert_equals(navigation.currentEntry.index, 0);
}, "navigate() to the current URL cross document should replace");
</script>

View file

@ -0,0 +1,23 @@
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/helpers.js"></script>
<script>
promise_test(async t => {
// Wait for after the load event so that we are definitely testing the
// same URL as the cause of the rejections.
await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0));
assert_equals(navigation.entries().length, 1);
await navigation.navigate("#").finished;
assert_equals(navigation.entries().length, 2);
assert_equals(navigation.currentEntry.index, 1);
navigation.onnavigate = t.step_func(e => {
assert_equals(e.navigationType, "replace");
});
await navigation.navigate(location.href).finished;
assert_equals(navigation.entries().length, 2);
assert_equals(navigation.currentEntry.index, 1);
}, "navigate() to the current URL same document should replace");
</script>

View file

@ -0,0 +1,91 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="help" src="https://drafts.csswg.org/scroll-animations-1/#named-timeline-range">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/web-animations/testcommon.js"></script>
<script src="support/testcommon.js"></script>
<title>Animation range and delay</title>
</head>
<style type="text/css">
@keyframes anim {
from { opacity: 0 }
to { opacity: 1 }
}
#scroller {
border: 10px solid lightgray;
overflow-y: scroll;
width: 300px;
height: 200px;
}
#target {
margin: 800px 0px;
width: 100px;
height: 100px;
z-index: -1;
background-color: green;
animation: anim auto linear;
animation-timeline: scroll();
/* Sentinel value when in before or after phase of the animation. */
opacity: 0.96875;
}
</style>
<body>
<div id=scroller>
<div id=target></div>
</div>
</body>
<script type="text/javascript">
async function runTest() {
function assert_opacity_equals(expected, errorMessage) {
assert_approx_equals(
parseFloat(getComputedStyle(target).opacity), expected, 1e-6,
errorMessage);
}
promise_test(async t => {
await waitForNextFrame();
const anim = document.getAnimations()[0];
await anim.ready;
await waitForNextFrame();
scroller.scrollTop =
(scroller.scrollHeight - scroller.clientHeight) / 2;
await waitForNextFrame();
const baseOpacity = 0.96875;
// Delays are percentages.
const testData = [
{ delay: 0, endDelay: 0, opacity: 0.5 },
{ delay: 20, endDelay: 0, opacity: 0.375 },
{ delay: 0, endDelay: 20, opacity: 0.625 },
{ delay: 20, endDelay: 20, opacity: 0.5 },
// // Negative delays.
{ delay: -25, endDelay: 0, opacity: 0.6 },
{ delay: 0, endDelay: -25, opacity: 0.4 },
{ delay: -25, endDelay: -25, opacity: 0.5 },
// Stress tests with >= 100% total delay. Verify effect is inactive.
{ delay: 100, endDelay: 0, opacity: baseOpacity },
{ delay: 0, endDelay: 100, opacity: baseOpacity },
{ delay: 100, endDelay: 100, opacity: baseOpacity }
];
testData.forEach(test => {
anim.effect.updateTiming({
delay: CSS.percent(test.delay),
endDelay: CSS.percent(test.endDelay)
});
assert_opacity_equals(
test.opacity,
`Opacity when delay=${test.delay} and endDelay=${test.endDelay}`);
});
}, 'ScrollTimeline with animation delays as percentages');
}
window.onload = runTest;
</script>
</html>

View file

@ -0,0 +1,93 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="help" src="https://drafts.csswg.org/scroll-animations-1/#named-timeline-range">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/web-animations/testcommon.js"></script>
<script src="support/testcommon.js"></script>
<title>Animation range and delay</title>
</head>
<style type="text/css">
@keyframes anim {
from { opacity: 0 }
to { opacity: 1 }
}
#scroller {
border: 10px solid lightgray;
overflow-y: scroll;
width: 300px;
height: 200px;
}
#target {
margin: 800px 0px;
width: 100px;
height: 100px;
z-index: -1;
background-color: green;
animation: anim auto linear;
animation-timeline: t1;
view-timeline: t1 block;
animation-range-start: enter 0%;
animation-range-end: enter 100%;
/* Sentinel value when in before or after phase of the animation. */
opacity: 0.96875;
}
</style>
<body>
<div id=scroller>
<div id=target></div>
</div>
</body>
<script type="text/javascript">
async function runTest() {
function assert_opacity_equals(expected, errorMessage) {
assert_approx_equals(
parseFloat(getComputedStyle(target).opacity), expected, 1e-6,
errorMessage);
}
promise_test(async t => {
await waitForNextFrame();
const anim = document.getAnimations()[0];
await anim.ready;
await waitForNextFrame();
scroller.scrollTop = 650;
await waitForNextFrame();
const baseOpacity = 0.96875;
// Delays are percentages.
const testData = [
{ delay: 0, endDelay: 0, opacity: 0.5 },
{ delay: 20, endDelay: 0, opacity: 0.375 },
{ delay: 0, endDelay: 20, opacity: 0.625 },
{ delay: 20, endDelay: 20, opacity: 0.5 },
// Negative delays.
{ delay: -25, endDelay: 0, opacity: 0.6 },
{ delay: 0, endDelay: -25, opacity: 0.4 },
{ delay: -25, endDelay: -25, opacity: 0.5 },
// Stress tests with >= 100% total delay. Verify effect is inactive.
{ delay: 100, endDelay: 0, opacity: baseOpacity },
{ delay: 0, endDelay: 100, opacity: baseOpacity },
{ delay: 100, endDelay: 100, opacity: baseOpacity }
];
testData.forEach(test => {
anim.effect.updateTiming({
delay: CSS.percent(test.delay),
endDelay: CSS.percent(test.endDelay)
});
assert_opacity_equals(
test.opacity,
`Opacity when delay=${test.delay} and endDelay=${test.endDelay}`);
});
}, 'ViewTimeline with animation delays and range');
}
window.onload = runTest;
</script>
</html>

View file

@ -186,8 +186,8 @@ class WebTransportH3Protocol(QuicConnectionProtocol):
def _send_error_response(self, stream_id: int, status_code: int) -> None: def _send_error_response(self, stream_id: int, status_code: int) -> None:
assert self._http is not None assert self._http is not None
headers = [(b"server", SERVER_NAME.encode()), headers = [(b":status", str(status_code).encode()),
(b":status", str(status_code).encode())] (b"server", SERVER_NAME.encode())]
self._http.send_headers(stream_id=stream_id, self._http.send_headers(stream_id=stream_id,
headers=headers, headers=headers,
end_stream=True) end_stream=True)
@ -221,9 +221,11 @@ class WebTransportH3Protocol(QuicConnectionProtocol):
for name, value in response_headers: for name, value in response_headers:
if name == b":status": if name == b":status":
status_code = value status_code = value
response_headers.remove((b":status", status_code))
response_headers.insert(0, (b":status", status_code))
break break
if not status_code: if not status_code:
response_headers.append((b":status", b"200")) response_headers.insert(0, (b":status", b"200"))
self._http.send_headers(stream_id=event.stream_id, self._http.send_headers(stream_id=event.stream_id,
headers=response_headers) headers=response_headers)

View file

@ -0,0 +1,109 @@
// META: script=/storage-access-api/helpers.js
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
'use strict';
// Note that this file follows the pattern in:
// storage-access-api/requestStorageAccess.sub.window.js
//
// Some tests are run at the top-level, and an iframe is added to validate API
// behavior in that context.
// Prefix each test case with an indicator so we know what context they are run
// in if they are used in multiple iframes.
let testPrefix = 'insecure-context';
// Keep track of if we run these tests in a nested context, we don't want to
// recurse forever.
let topLevelDocument = true;
// The query string allows derivation of test conditions, like whether the tests
// are running in a top-level context.
const queryParams = window.location.search.substring(1).split('&');
queryParams.forEach((param) => {
if (param.toLowerCase() == 'rootdocument=false') {
topLevelDocument = false;
} else if (param.split('=')[0].toLowerCase() == 'testcase') {
testPrefix = param.split('=')[1];
}
});
// TODO(crbug.com/1410556): when/if requestStorageAccessForOrigin is standardized,
// we should consider upstreaming these helpers.
function RunRequestStorageAccessForOriginInDetachedFrame(site) {
const nestedFrame = document.createElement('iframe');
document.body.append(nestedFrame);
const inner_doc = nestedFrame.contentDocument;
nestedFrame.remove();
return inner_doc.requestStorageAccessForOrigin(site);
}
function RunRequestStorageAccessForOriginViaDomParser(site) {
const parser = new DOMParser();
const doc = parser.parseFromString('<html></html>', 'text/html');
return doc.requestStorageAccessForOrigin(site);
}
// Common tests to run in all frames.
test(
() => {
assert_not_equals(document.requestStorageAccessForOrigin, undefined);
},
'[' + testPrefix +
'] document.requestStorageAccessForOrigin() should be supported on the document interface');
if (topLevelDocument) {
promise_test(
t => {
return promise_rejects_dom(t, 'NotAllowedError',
document.requestStorageAccessForOrigin('https://test.com'),
'document.requestStorageAccessForOrigin() call without user gesture');
},
'[' + testPrefix +
'] document.requestStorageAccessForOrigin() should be rejected by default with no user gesture');
promise_test(async t => {
const description =
'document.requestStorageAccessForOrigin() call in a detached frame';
// Can't use promise_rejects_dom here because the exception is from the wrong global.
return RunRequestStorageAccessForOriginInDetachedFrame('https://foo.com')
.then(t.unreached_func('Should have rejected: ' + description))
.catch((e) => {
assert_equals(e.name, 'InvalidStateError', description);
});
}, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached frame');
promise_test(async t => {
const description =
'document.requestStorageAccessForOrigin() in a detached DOMParser result';
return RunRequestStorageAccessForOriginViaDomParser('https://foo.com')
.then(t.unreached_func('Should have rejected: ' + description))
.catch((e) => {
assert_equals(e.name, 'InvalidStateError', description);
});
}, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached DOMParser document');
// Create a test with a single-child same-origin iframe.
// This will validate that calls to requestStorageAccessForOrigin are rejected
// in non-top-level contexts.
RunTestsInIFrame(
'./resources/requestStorageAccessForOrigin-iframe.https.html?testCase=secure-frame-on-insecure-page&rootdocument=false');
promise_test(
async t => {
await RunCallbackWithGesture(
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin), 'document.requestStorageAccessForOrigin() call in insecure context'));
},
'[' + testPrefix +
'] document.requestStorageAccessForOrigin() should be rejected when called in an insecure context');
} else {
promise_test(
async t => {
await RunCallbackWithGesture(
() => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin),
'document.requestStorageAccessForOrigin() call in a non-top-level context'));
},
'[' + testPrefix +
'] document.requestStorageAccessForOrigin() should be rejected when called in an iframe');
}

View file

@ -6,4 +6,4 @@
<script src="/resources/testdriver.js"></script> <script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script> <script src="/resources/testdriver-vendor.js"></script>
<div id=log></div> <div id=log></div>
<script src="../requestStorageAccessForOrigin.sub.window.js"></script> <script src="../requestStorageAccessForOrigin-insecure.sub.window.js"></script>

View file

@ -0,0 +1,9 @@
<!doctype html>
<meta charset=utf-8>
<script src="/storage-access-api/helpers.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<div id=log></div>
<script src="../requestStorageAccessForOrigin.sub.https.window.js"></script>