Sync WPT with upstream (14-09-2025) (#39293)

Automated downstream sync of changes from upstream as of 14-09-2025
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
This commit is contained in:
Servo WPT Sync 2025-09-14 03:44:16 +02:00 committed by GitHub
parent 3ef3ba9378
commit b3b79e049b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
308 changed files with 6147 additions and 1657 deletions

View file

@ -0,0 +1,9 @@
[Blob-newobject.any.serviceworker.html]
expected: ERROR
[Blob-newobject.any.sharedworker.html]
expected: ERROR
[Blob-newobject.any.html]
[Blob-newobject.any.worker.html]

View file

@ -16,6 +16,12 @@
[Deactivation of new transactions happens at end of invocation]
expected: FAIL
[New transactions are deactivated before next task]
expected: FAIL
[New transactions from microtask are deactivated before next task]
expected: FAIL
[transaction-deactivation-timing.any.sharedworker.html]
expected: ERROR

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,3 @@
[image-document-applies-csp.html]
[Image document correctly applies CSP to other subresources.]
expected: FAIL

View file

@ -76,3 +76,6 @@
[Relative selectors set with selectorText are relative to :scope, not &]
expected: FAIL
[Relative selectors set with selectorText are relative to :scope and &]
expected: FAIL

View file

@ -64,3 +64,9 @@
[Mutating selectorText on outer style rule causes correct inner specificity]
expected: FAIL
[Nesting-selector in <scope-end>]
expected: FAIL
[Nested nesting-selectors within scope's <stylesheet> select inclusive descendants of the scope root]
expected: FAIL

View file

@ -58,3 +58,6 @@
[@scope { & .b { } } and :where(:scope) .b]
expected: FAIL
[@scope (#main) { & .b { } } and :where(#main) .b]
expected: FAIL

View file

@ -127,3 +127,120 @@
[Property color value 'color-mix(in display-p3-linear, color(display-p3-linear .1 .2 .3 / 25%) 0%, color(display-p3-linear 0.5 none none / 50%))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))']
expected: FAIL
[Property color value 'color-mix(25% oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3), 25% oklab(0.5 0.6 0.7))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7) 25%)']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7) 75%)']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8))']
expected: FAIL
[Property color value 'color-mix(25% oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / .4), 25% oklab(0.5 0.6 0.7 / .8))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8) 25%)']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8) 75%)']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / .4) 30%, oklab(0.5 0.6 0.7 / .8) 90%)']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / .4) 12.5%, oklab(0.5 0.6 0.7 / .8) 37.5%)']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / .4) 0%, oklab(0.5 0.6 0.7 / .8))']
expected: FAIL
[Property color value 'color-mix(transparent, oklab(0.3 0.4 0.5))']
expected: FAIL
[Property color value 'color-mix(transparent 10%, oklab(0.3 0.4 0.5))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / 0), oklab(0.3 0.4 0.5))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / 0) 10%, oklab(0.3 0.4 0.5))']
expected: FAIL
[Property color value 'color-mix(white, blue)']
expected: FAIL
[Property color value 'color-mix(white 10%, blue)']
expected: FAIL
[Property color value 'color-mix(oklab(none none none), oklab(none none none))']
expected: FAIL
[Property color value 'color-mix(oklab(none none none), oklab(0.5 0.6 0.7))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3), oklab(none none none))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))']
expected: FAIL
[Property color value 'color-mix(oklab(none 0.2 0.3), oklab(0.5 none 0.7))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 none none / none))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none 0.5 none / none))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none none 0.5 / none))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 0.5 none / none))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none none none / 0.5))']
expected: FAIL
[Property color value 'color-mix(oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 none none / 0.5))']
expected: FAIL

View file

@ -367,3 +367,132 @@
[e.style['color'\] = "color-mix(in display-p3-linear, color(display-p3-linear .1 .2 .3 / none), color(display-p3-linear .5 .6 .7 / none))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(lch(10 20 30), lch(50 60 70))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(oklch(0.1 20 30), oklch(0.5 60 70))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(lab(10 20 30), lab(50 60 70))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, 25% oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3), 25% oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7) 25%)" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7) 75%)" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, 25% oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), 25% oklab(0.5 0.6 0.7 / .8))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8) 25%)" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8) 75%)" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 30%, oklab(0.5 0.6 0.7 / .8) 90%)" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 12.5%, oklab(0.5 0.6 0.7 / .8) 37.5%)" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 0%, oklab(0.5 0.6 0.7 / .8))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(none none none), oklab(none none none))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(none none none), oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(none none none))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(none 0.2 0.3), oklab(0.5 none 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(display-p3 .1 .2 .3), color(display-p3 .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(display-p3-linear .1 .2 .3), color(display-p3-linear .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(a98-rgb .1 .2 .3), color(a98-rgb .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(prophoto-rgb .1 .2 .3), color(prophoto-rgb .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(rec2020 .1 .2 .3), color(rec2020 .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should set the property value]
expected: FAIL
[e.style['color'\] = "color-mix(color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should set the property value]
expected: FAIL

View file

@ -742,3 +742,6 @@
[e.style['color'\] = "color(from color-mix(in display-p3-linear, color(display-p3-linear 0.7 0.5 0.3), color(display-p3-linear 0.7 0.5 0.3)) display-p3-linear r g b / alpha)" should set the property value]
expected: FAIL
[e.style['color'\] = "oklab(from color-mix(in oklab, oklab(0.25 0.2 0.5), oklab(0.25 0.2 0.5)) l a b / alpha)" should set the property value]
expected: FAIL

View file

@ -49,3 +49,15 @@
[Container name set on :host from inside a shadow tree matching query for ::slotted inside the shadow tree]
expected: FAIL
[Should match container inside shadow tree for ::part()]
expected: FAIL
[Container name set inside a shadow tree should match query using ::part on the outside]
expected: FAIL
[Container name set inside a shadow tree should match query for host child on the outside]
expected: FAIL
[Container name set on :host from inside a shadow tree should match query for slotted from the outside of the shadow tree]
expected: FAIL

View file

@ -37,3 +37,6 @@
[@font-face matching for quoted and unquoted generic(khmer-mul) (drawing text in a canvas)]
expected: FAIL
[@font-face matching for quoted and unquoted generic(nastaliq) (drawing text in a canvas)]
expected: FAIL

View file

@ -0,0 +1,2 @@
[grid-auto-margin-and-replaced-item-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[row-masonry-positioned-item-dynamic-change.html]
expected: FAIL

View file

@ -0,0 +1,36 @@
[grid-template-columns-intrinsic-auto-repeat-computed-implicit-track.tentative.html]
[Property grid-template-columns value '1px repeat(auto-fill, auto) 3px' computes to '10px 1px 0px 3px']
expected: FAIL
[Property grid-template-columns value '1px repeat(auto-fit, auto) 3px' computes to '10px 1px 0px 3px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fill, min-content max-content) [b\] 4px' computes to '10px 1px [a\] 0px 0px [b\] 4px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fit, min-content max-content) [b\] 4px' computes to '10px 1px [a\] 0px 0px [b\] 4px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fill, [b\] fit-content(200px) [c\]) [d\] 3px' computes to '10px 1px [a b\] 0px [c d\] 3px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fit, [b\] fit-content(200px) [c\]) [d\] 3px' computes to '10px 1px [a b\] 0px [c d\] 3px']
expected: FAIL
[Property grid-template-columns value '[a\] 1px repeat(auto-fill, auto [b\] auto) 4px [d\]' computes to '10px [a\] 1px 0px [b\] 0px 4px [d\]']
expected: FAIL
[Property grid-template-columns value '[a\] 1px repeat(auto-fit, auto [b\] auto) 4px [d\]' computes to '10px [a\] 1px 0px [b\] 0px 4px [d\]']
expected: FAIL
[Property grid-template-columns value '100% [a\] repeat(auto-fill, [b\] min-content [c\]) [d\] 300%' computes to '10px 1px [a b\] 0px [c d\] 3px']
expected: FAIL
[Property grid-template-columns value '100% [a\] repeat(auto-fit, [b\] min-content [c\]) [d\] 300%' computes to '10px 1px [a b\] 0px [c d\] 3px']
expected: FAIL
[Property grid-template-columns value '[a\] 1em repeat(auto-fill, max-content [b\] auto) 4em [d\]' computes to '10px [a\] 1px 0px [b\] 0px 4px [d\]']
expected: FAIL
[Property grid-template-columns value '[a\] 1em repeat(auto-fit, max-content [b\] auto) 4em [d\]' computes to '10px [a\] 1px 0px [b\] 0px 4px [d\]']
expected: FAIL

View file

@ -0,0 +1,36 @@
[grid-template-columns-intrinsic-auto-repeat-computed-nogrid.tentative.html]
[Property grid-template-columns value '1px repeat(auto-fill, auto) 3px']
expected: FAIL
[Property grid-template-columns value '1px repeat(auto-fit, auto) 3px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fill, min-content max-content) [b\] 4px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fit, min-content max-content) [b\] 4px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fill, [b\] fit-content(200px) [c\]) [d\] 3px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fit, [b\] fit-content(200px) [c\]) [d\] 3px']
expected: FAIL
[Property grid-template-columns value '[a\] 1px repeat(auto-fill, auto [b\] auto) 4px [d\]']
expected: FAIL
[Property grid-template-columns value '[a\] 1px repeat(auto-fit, auto [b\] auto) 4px [d\]']
expected: FAIL
[Property grid-template-columns value '100% [a\] repeat(auto-fill, [b\] min-content [c\]) [d\] 300%']
expected: FAIL
[Property grid-template-columns value '100% [a\] repeat(auto-fit, [b\] min-content [c\]) [d\] 300%']
expected: FAIL
[Property grid-template-columns value '[a\] 1em repeat(auto-fill, max-content [b\] auto) 4em [d\]']
expected: FAIL
[Property grid-template-columns value '[a\] 1em repeat(auto-fit, max-content [b\] auto) 4em [d\]']
expected: FAIL

View file

@ -0,0 +1,24 @@
[grid-template-columns-intrinsic-auto-repeat-computed-withcontent.tentative.html]
[Property grid-template-columns value 'repeat(auto-fill, auto)']
expected: FAIL
[Property grid-template-columns value 'repeat(auto-fit, [one\] auto)']
expected: FAIL
[Property grid-template-columns value 'repeat(auto-fill, min-content [two\])']
expected: FAIL
[Property grid-template-columns value 'repeat(auto-fit, [three\] max-content [four\])']
expected: FAIL
[Property grid-template-columns value '[a\] 21px [b\] repeat(auto-fill, [c\] 22px [d\] auto [e\]) [f\] 24px [g\]']
expected: FAIL
[Property grid-template-columns value '[a\] 21px [b c\] repeat(auto-fill, [d e\] 22px [f g h\] fit-content(200px) [i j k l\]) [m n\] 24px [o\]']
expected: FAIL
[Property grid-template-columns value '[a\] repeat(2, [b\] 20px [c d\] 21px [e f g\]) [h i\] repeat(auto-fit, [j\] auto [k l m\] min-content [n o p q\]) [r s\]']
expected: FAIL
[Property grid-template-columns value '[one\] repeat(2, minmax(50px, auto)) [two\] 30px [three\] repeat(auto-fill, auto) 40px [four five\] repeat(2, minmax(200px, auto)) [six\]']
expected: FAIL

View file

@ -0,0 +1,36 @@
[grid-template-columns-intrinsic-auto-repeat-computed.tentative.html]
[Property grid-template-columns value '1px repeat(auto-fill, auto) 3px']
expected: FAIL
[Property grid-template-columns value '1px repeat(auto-fit, auto) 3px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fill, min-content max-content) [b\] 4px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fit, min-content max-content) [b\] 4px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fill, [b\] fit-content(200px) [c\]) [d\] 3px']
expected: FAIL
[Property grid-template-columns value '1px [a\] repeat(auto-fit, [b\] fit-content(200px) [c\]) [d\] 3px']
expected: FAIL
[Property grid-template-columns value '[a\] 1px repeat(auto-fill, auto [b\] auto) 4px [d\]']
expected: FAIL
[Property grid-template-columns value '[a\] 1px repeat(auto-fit, auto [b\] auto) 4px [d\]']
expected: FAIL
[Property grid-template-columns value '100% [a\] repeat(auto-fill, [b\] min-content [c\]) [d\] 300%']
expected: FAIL
[Property grid-template-columns value '100% [a\] repeat(auto-fit, [b\] min-content [c\]) [d\] 300%']
expected: FAIL
[Property grid-template-columns value '[a\] 1em repeat(auto-fill, max-content [b\] auto) 4em [d\]']
expected: FAIL
[Property grid-template-columns value '[a\] 1em repeat(auto-fit, max-content [b\] auto) 4em [d\]']
expected: FAIL

View file

@ -0,0 +1,36 @@
[grid-template-rows-intrinsic-auto-repeat-computed-implicit-track.tentative.html]
[Property grid-template-rows value '1px repeat(auto-fill, auto) 3px' computes to '1px 0px 3px']
expected: FAIL
[Property grid-template-rows value '1px repeat(auto-fit, auto) 3px' computes to '1px 0px 3px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fill, min-content max-content) [b\] 4px' computes to '1px [a\] 0px 0px [b\] 4px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fit, min-content max-content) [b\] 4px' computes to '1px [a\] 0px 0px [b\] 4px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fill, [b\] fit-content(200px) [c\]) [d\] 3px' computes to '1px [a b\] 0px [c d\] 3px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fit, [b\] fit-content(200px) [c\]) [d\] 3px' computes to '1px [a b\] 0px [c d\] 3px']
expected: FAIL
[Property grid-template-rows value '[a\] 1px repeat(auto-fill, auto [b\] auto) 4px [d\]' computes to '[a\] 1px 0px [b\] 0px 4px [d\]']
expected: FAIL
[Property grid-template-rows value '[a\] 1px repeat(auto-fit, auto [b\] auto) 4px [d\]' computes to '[a\] 1px 0px [b\] 0px 4px [d\]']
expected: FAIL
[Property grid-template-rows value '100% [a\] repeat(auto-fill, [b\] min-content [c\]) [d\] 300%' computes to '1px [a b\] 0px [c d\] 3px']
expected: FAIL
[Property grid-template-rows value '100% [a\] repeat(auto-fit, [b\] min-content [c\]) [d\] 300%' computes to '1px [a b\] 0px [c d\] 3px']
expected: FAIL
[Property grid-template-rows value '[a\] 1em repeat(auto-fill, max-content [b\] auto) 4em [d\]' computes to '[a\] 1px 0px [b\] 0px 4px [d\]']
expected: FAIL
[Property grid-template-rows value '[a\] 1em repeat(auto-fit, max-content [b\] auto) 4em [d\]' computes to '[a\] 1px 0px [b\] 0px 4px [d\]']
expected: FAIL

View file

@ -0,0 +1,36 @@
[grid-template-rows-intrinsic-auto-repeat-computed-nogrid.tentative.html]
[Property grid-template-rows value '1px repeat(auto-fill, auto) 3px']
expected: FAIL
[Property grid-template-rows value '1px repeat(auto-fit, auto) 3px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fill, min-content max-content) [b\] 4px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fit, min-content max-content) [b\] 4px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fill, [b\] fit-content(200px) [c\]) [d\] 3px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fit, [b\] fit-content(200px) [c\]) [d\] 3px']
expected: FAIL
[Property grid-template-rows value '[a\] 1px repeat(auto-fill, auto [b\] auto) 4px [d\]']
expected: FAIL
[Property grid-template-rows value '[a\] 1px repeat(auto-fit, auto [b\] auto) 4px [d\]']
expected: FAIL
[Property grid-template-rows value '100% [a\] repeat(auto-fill, [b\] min-content [c\]) [d\] 300%']
expected: FAIL
[Property grid-template-rows value '100% [a\] repeat(auto-fit, [b\] min-content [c\]) [d\] 300%']
expected: FAIL
[Property grid-template-rows value '[a\] 1em repeat(auto-fill, max-content [b\] auto) 4em [d\]']
expected: FAIL
[Property grid-template-rows value '[a\] 1em repeat(auto-fit, max-content [b\] auto) 4em [d\]']
expected: FAIL

View file

@ -0,0 +1,24 @@
[grid-template-rows-intrinsic-auto-repeat-computed-withcontent.tentative.html]
[Property grid-template-rows value 'repeat(auto-fill, auto)']
expected: FAIL
[Property grid-template-rows value 'repeat(auto-fit, [one\] auto)']
expected: FAIL
[Property grid-template-rows value 'repeat(auto-fill, min-content [two\])']
expected: FAIL
[Property grid-template-rows value 'repeat(auto-fit, [three\] max-content [four\])']
expected: FAIL
[Property grid-template-rows value '[a\] 21px [b\] repeat(auto-fill, [c\] 22px [d\] auto [e\]) [f\] 24px [g\]']
expected: FAIL
[Property grid-template-rows value '[a\] 21px [b c\] repeat(auto-fill, [d e\] 22px [f g h\] fit-content(200px) [i j k l\]) [m n\] 24px [o\]']
expected: FAIL
[Property grid-template-rows value '[a\] repeat(2, [b\] 20px [c d\] 21px [e f g\]) [h i\] repeat(auto-fit, [j\] auto [k l m\] min-content [n o p q\]) [r s\]']
expected: FAIL
[Property grid-template-rows value '[one\] repeat(2, minmax(50px, auto)) [two\] 30px [three\] repeat(auto-fill, auto) 40px [four five\] repeat(2, minmax(200px, auto)) [six\]']
expected: FAIL

View file

@ -0,0 +1,36 @@
[grid-template-rows-intrinsic-auto-repeat-computed.tentative.html]
[Property grid-template-rows value '1px repeat(auto-fill, auto) 3px']
expected: FAIL
[Property grid-template-rows value '1px repeat(auto-fit, auto) 3px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fill, min-content max-content) [b\] 4px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fit, min-content max-content) [b\] 4px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fill, [b\] fit-content(200px) [c\]) [d\] 3px']
expected: FAIL
[Property grid-template-rows value '1px [a\] repeat(auto-fit, [b\] fit-content(200px) [c\]) [d\] 3px']
expected: FAIL
[Property grid-template-rows value '[a\] 1px repeat(auto-fill, auto [b\] auto) 4px [d\]']
expected: FAIL
[Property grid-template-rows value '[a\] 1px repeat(auto-fit, auto [b\] auto) 4px [d\]']
expected: FAIL
[Property grid-template-rows value '100% [a\] repeat(auto-fill, [b\] min-content [c\]) [d\] 300%']
expected: FAIL
[Property grid-template-rows value '100% [a\] repeat(auto-fit, [b\] min-content [c\]) [d\] 300%']
expected: FAIL
[Property grid-template-rows value '[a\] 1em repeat(auto-fill, max-content [b\] auto) 4em [d\]']
expected: FAIL
[Property grid-template-rows value '[a\] 1em repeat(auto-fit, max-content [b\] auto) 4em [d\]']
expected: FAIL

View file

@ -0,0 +1,15 @@
[parameters.html]
[Mixins with invalid parameter lists are ignored]
expected: FAIL
[Basic mixin parameter passing]
expected: FAIL
[Mixins can be called multiple times with different parameters]
expected: FAIL
[Mixin argument parsing with arguments wrapped in {}]
expected: FAIL
[Defaults in mixin parameters]
expected: FAIL

View file

@ -0,0 +1,2 @@
[line-clamp-035.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[line-clamp-035.tentative.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[line-clamp-auto-025.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[line-clamp-auto-025.tentative.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[scroll-target-group-inline-targets.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-autospace-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-autospace-003.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-autospace-004.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[word-spacing-002.html]
expected: FAIL

View file

@ -0,0 +1,3 @@
[form-disabled-callback.html]
[A disabled form-associated custom element should not submit an entry for it]
expected: FAIL

View file

@ -4,3 +4,6 @@
[Tests FormControlRange default values when no form control is set.]
expected: FAIL
[FormControlRange handles empty value correctly.]
expected: FAIL

View file

@ -0,0 +1,33 @@
[FormControlRange-offset.html]
[FormControlRange with single character in textarea.]
expected: FAIL
[FormControlRange with empty control in textarea.]
expected: FAIL
[FormControlRange boundary positions in textarea.]
expected: FAIL
[FormControlRange with Unicode characters in textarea.]
expected: FAIL
[FormControlRange with single character in input.]
expected: FAIL
[FormControlRange with empty control in input.]
expected: FAIL
[FormControlRange boundary positions in input.]
expected: FAIL
[FormControlRange with Unicode characters in input.]
expected: FAIL
[FormControlRange preserves whitespace in textarea light DOM.]
expected: FAIL
[FormControlRange should work correctly with weirdly formed light DOM structure.]
expected: FAIL
[FormControlRange ignores malformed input child nodes.]
expected: FAIL

View file

@ -0,0 +1,15 @@
[FormControlRange-range-updates.html]
[FormControlRange allows updating range on same element.]
expected: FAIL
[FormControlRange can switch between different form controls.]
expected: FAIL
[FormControlRange works with disconnected and then connected form controls.]
expected: FAIL
[FormControlRange can switch between connected and disconnected form controls.]
expected: FAIL
[FormControlRange reflects value changes on same element.]
expected: FAIL

View file

@ -0,0 +1,18 @@
[FormControlRange-supported-elements.html]
[FormControlRange should support textarea.]
expected: FAIL
[FormControlRange should support input[type=text\].]
expected: FAIL
[FormControlRange should support input[type=search\].]
expected: FAIL
[FormControlRange should support input[type=password\].]
expected: FAIL
[FormControlRange should support input[type=url\].]
expected: FAIL
[FormControlRange should support input[type=tel\].]
expected: FAIL

View file

@ -0,0 +1,15 @@
[FormControlRange-toString.html]
[FormControlRange toString() reflects current value.]
expected: FAIL
[FormControlRange toString() clamps to available length.]
expected: FAIL
[FormControlRange toString() handles value shorter than range.]
expected: FAIL
[FormControlRange toString() handles auto-collapsed backwards ranges.]
expected: FAIL
[FormControlRange uses current input.value, not value attribute.]
expected: FAIL

View file

@ -0,0 +1,12 @@
[FormControlRange-unsupported-elements.html]
[FormControlRange throws NotSupportedError for text node.]
expected: FAIL
[FormControlRange should throw NotSupportedError for all unsupported HTML5 elements.]
expected: FAIL
[FormControlRange should throw NotSupportedError for unsupported input types.]
expected: FAIL
[NotSupportedError should take precedence over IndexSizeError when both element type and index are invalid for a FormControlRange.]
expected: FAIL

View file

@ -0,0 +1,6 @@
[FormControlRange-validation.html]
[FormControlRange preserves state when setFormControlRange throws.]
expected: FAIL
[FormControlRange handles all range types correctly: forward, backwards, and out-of-bounds.]
expected: FAIL

View file

@ -1,4 +1,4 @@
[indexeddb.tentative.https.window.html]
expected: TIMEOUT
expected: CRASH
[indexeddb]
expected: TIMEOUT

View file

@ -0,0 +1,3 @@
[008.html]
[Link with onclick form submit to javascript url and href navigation ]
expected: FAIL

View file

@ -0,0 +1,6 @@
[empty-iframe-load-event.html]
[Check execution order from nested timeout]
expected: FAIL
[Check execution order on load handler]
expected: FAIL

View file

@ -2,8 +2,5 @@
[window.open]
expected: FAIL
[link click]
expected: FAIL
[form submission]
expected: FAIL

View file

@ -10,3 +10,6 @@
[load event does not fire on window.open('about:blank?foo')]
expected: FAIL
[load event does not fire on window.open('about:blank')]
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,2 +0,0 @@
[canvas.2d.disconnected-font-size-math.html]
expected: FAIL

View file

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

View file

@ -1,7 +1,6 @@
[document-with-fragment-empty.html]
expected: TIMEOUT
[Autofocus elements in iframed documents with empty fragments should work.]
expected: FAIL
[Autofocus elements in top-level browsing context's documents with empty fragments should work.]
expected: TIMEOUT
expected: FAIL

View file

@ -0,0 +1,6 @@
[iframe_javascript_url_xhr.html]
[Image load should not trigger load event for non-initial javascript URL load]
expected: FAIL
[Load event for initial javascript URL load should be fired after script execution]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -181,3 +181,6 @@
[text/plain: 0x00 in name (normal form)]
expected: FAIL
[text/plain: Basic test (normal form)]
expected: FAIL

View file

@ -1,2 +0,0 @@
[disabled-003.html]
expected: CRASH

View file

@ -0,0 +1,3 @@
[xml-stylesheet-blocking.xhtml]
[xml-stylesheet blocks script execution and rendering]
expected: FAIL

View file

@ -1,2 +0,0 @@
[shadow-style-invalidation-vw-units.html]
expected: FAIL

View file

@ -1,12 +0,0 @@
[TrustedTypePolicyFactory-blocking.tentative.html]
[Block Trusted Type policy creation by event listener.]
expected: FAIL
[Trusted Type policy creation.]
expected: FAIL
[Block only default Trusted Type policy creation.]
expected: FAIL
[Policy creation called before addEventListener function will not reached the listener.]
expected: FAIL

View file

@ -50,18 +50,14 @@
[trusted-types-navigation.html?31-35]
expected: TIMEOUT
[Navigate a frame via form-submission with javascript:-urls w/ default policy in report-only mode.]
expected: TIMEOUT
[Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in enforcing mode.]
expected: NOTRUN
expected: FAIL
[Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in report-only mode.]
expected: NOTRUN
expected: FAIL
[Navigate a window via form-submission with javascript:-urls w/ a default policy making the URL invalid in enforcing mode.]
expected: NOTRUN
expected: FAIL
[Navigate a frame via form-submission with javascript:-urls in report-only mode.]
expected: FAIL
@ -76,23 +72,23 @@
[Navigate a frame via form-submission with javascript:-urls in enforcing mode.]
expected: FAIL
[Navigate a frame via form-submission with javascript:-urls w/ default policy in enforcing mode.]
[Navigate a window via form-submission with javascript:-urls in report-only mode.]
expected: FAIL
[trusted-types-navigation.html?06-10]
expected: CRASH
expected: TIMEOUT
[Navigate a frame via anchor with javascript:-urls in report-only mode.]
expected: FAIL
[Navigate a frame via anchor with javascript:-urls w/ default policy in report-only mode.]
expected: FAIL
expected: TIMEOUT
[Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in enforcing mode.]
expected: FAIL
expected: NOTRUN
[Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in report-only mode.]
expected: FAIL
expected: NOTRUN
[trusted-types-navigation.html?11-15]
@ -154,3 +150,6 @@
[Navigate a frame via anchor with javascript:-urls in enforcing mode.]
expected: FAIL
[Navigate a window via anchor with javascript:-urls in report-only mode.]
expected: FAIL

View file

@ -1,3 +1,6 @@
[active-processing.https.html]
[Executing "Setup graph"]
expected: FAIL
[Setup graph with AudioWorklet and AudioBufferSourceNode]
expected: FAIL

View file

@ -4,3 +4,9 @@
[Executing "expoRamp"]
expected: FAIL
[linearRamp: Insert linearRamp after running for some time]
expected: FAIL
[exponentialRamp: Insert exponentialRamp after running for some time]
expected: FAIL

View file

@ -4,3 +4,9 @@
[Executing "test"]
expected: FAIL
[initialize: AudioWorklet module loading]
expected: FAIL
[test: Active processing emits expected channel-count changes]
expected: FAIL

View file

@ -1,2 +0,0 @@
[navigation.py]
expected: TIMEOUT

View file

@ -0,0 +1,3 @@
[scroll_into_view.py]
[test_scroll_into_view]
expected: FAIL

View file

@ -0,0 +1,2 @@
[render_state_update.https.html]
expected: ERROR

View file

@ -158,7 +158,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.tools_unittest']
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
variables:
HYPOTHESIS_PROFILE: ci
steps:
@ -177,7 +177,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.tools_unittest']
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
steps:
- task: UsePythonVersion@0
inputs:
@ -194,7 +194,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
steps:
- task: UsePythonVersion@0
inputs:
@ -211,7 +211,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
steps:
- task: UsePythonVersion@0
inputs:
@ -228,7 +228,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wpt_integration']
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
steps:
# full checkout required
- task: UsePythonVersion@0
@ -250,7 +250,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wpt_integration']
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
steps:
# full checkout required
- task: UsePythonVersion@0
@ -274,10 +274,10 @@ jobs:
eq(variables['Build.SourceBranch'], 'refs/heads/triggers/edge_stable'),
and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_edge_stable']))
strategy:
parallel: 8 # chosen to make runtime ~2h
parallel: 10 # chosen to make runtime ~2h
timeoutInMinutes: 180
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
steps:
- task: UsePythonVersion@0
inputs:
@ -310,10 +310,10 @@ jobs:
eq(variables['Build.SourceBranch'], 'refs/heads/triggers/edge_dev'),
and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_edge_dev']))
strategy:
parallel: 8 # chosen to make runtime ~2h
parallel: 10 # chosen to make runtime ~2h
timeoutInMinutes: 180
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
steps:
- task: UsePythonVersion@0
inputs:
@ -324,6 +324,7 @@ jobs:
- template: tools/ci/azure/install_edge.yml
parameters:
channel: dev
- template: tools/ci/azure/configure_watson.yml
- template: tools/ci/azure/update_hosts.yml
- template: tools/ci/azure/update_manifest.yml
- script: python ./wpt run --yes --no-manifest-update --no-restart-on-unexpected --no-fail-on-unexpected --install-fonts --this-chunk $(System.JobPositionInPhase) --total-chunks $(System.TotalJobsInPhase) --chunk-type hash --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_$(System.JobPositionInPhase).json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot_$(System.JobPositionInPhase).txt --log-mach - --log-mach-level info --channel dev edge
@ -346,10 +347,10 @@ jobs:
eq(variables['Build.SourceBranch'], 'refs/heads/triggers/edge_canary'),
and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_edge_canary']))
strategy:
parallel: 8 # chosen to make runtime ~2h
parallel: 10 # chosen to make runtime ~2h
timeoutInMinutes: 180
pool:
vmImage: 'windows-2019'
vmImage: 'windows-latest'
steps:
- task: UsePythonVersion@0
inputs:

View file

@ -21,5 +21,5 @@ def main(request, response):
response_body = {
"provider_origin": provider_origin,
}
return (200, [('Content-Type', 'application/json'), ('Set-Cookie', 'well_known_fetched=true; Path=/device-bound-session-credentials')],
return (200, [('Content-Type', 'application/json')],
json.dumps(response_body))

View file

@ -0,0 +1,12 @@
// META: title=Blob methods return new objects ([NewObject])
// META: global=window,worker
'use strict';
['stream', 'text', 'arrayBuffer', 'bytes'].forEach(method => {
test(() => {
const blob = new Blob(['PASS']);
const a = blob[method]();
const b = blob[method]();
assert_not_equals(a, b, `Blob.${method}() must return a new object`);
}, `Blob.${method}() returns [NewObject]`);
});

View file

@ -0,0 +1,3 @@
features:
- name: console
files: "**"

View file

@ -26,16 +26,14 @@ body {
})
);
observer.observe({entryTypes: ['container']});
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
// Add image of width equal to 100 and height equal to 100.
const img = document.createElement('img');
img.src = '/container-timing/resources/square100.png';
img.setAttribute('id', 'img_id');
document.body.appendChild(img);
beforeRender = performance.now();
};
}, 'Body with containertiming observed reports children image paints.');
</script>

View file

@ -25,17 +25,15 @@ body {
})
);
observer.observe({entryTypes: ['container']});
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
// Add image of width equal to 100 and height equal to 100.
const img = document.createElement('img');
img.src = '/container-timing/resources/square100.png';
img.setAttribute('containertiming', 'image_ct');
img.setAttribute('id', 'my_id');
document.body.appendChild(img);
beforeRender = performance.now();
};
}, 'Element with containertiming attribute is observable and reports the image paint.');
</script>

View file

@ -27,17 +27,15 @@ body {
);
observer.observe({type: 'container', buffered: true });
}, 2000);
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
// Add image of width equal to 100 and height equal to 100.
const img = document.createElement('img');
img.src = '/container-timing/resources/square100.png';
img.setAttribute('containertiming', 'image_ct');
img.setAttribute('id', 'my_id');
document.body.appendChild(img);
beforeRender = performance.now();
};
}, 'Paint is reported when observation starts after image paint if buffering is enabled.');
</script>

View file

@ -12,7 +12,6 @@ body {
<script src="/container-timing/resources/container-timing-helpers.js"></script>
<script src="/element-timing/resources/element-timing-helpers.js"></script>
<script>
let beforeRender;
async_test(function (t) {
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
t.step_timeout(() => {
@ -26,17 +25,13 @@ body {
t.done();
}, 2000);
}, 2000);
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
// Add image of width equal to 100 and height equal to 100.
const img = document.createElement('img');
img.src = '/container-timing/resources/square100.png';
img.setAttribute('containertiming', 'image_ct');
img.setAttribute('id', 'my_id');
document.body.appendChild(img);
beforeRender = performance.now();
};
}, 'containertiming does not report paints before observing if buffering is disabled.');
</script>

View file

@ -20,17 +20,14 @@ body {
}
);
observer.observe({entryTypes: ['container']});
t.step_timeout(() => {
t.done();
}, 2000);
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
finishOnElementTiming(t);
const div = document.createElement('div');
div.setAttribute('containertiming', 'div_ct');
document.body.appendChild(div);
beforeRender = performance.now();
};
addPaintingElementTimingAfterDoubleRAF(document.body);
}, 'Container timing did not report paints when there was nothing to paint.');
</script>

View file

@ -23,16 +23,14 @@ body {
})
);
observer.observe({entryTypes: ['container']});
// Add the text during onload to be sure that the observer is registered
// in time.
window.onload = () => {
const p = document.createElement('p');
p.setAttribute('containertiming', 'p_ct');
p.id = 'my_id';
p.innerText = "This is a text";
document.body.appendChild(p);
beforeRender = performance.now();
};
}, 'Element with containertiming attribute is observable and reports the text paint.');
</script>

View file

@ -26,9 +26,7 @@ body {
})
);
observer.observe({entryTypes: ['container']});
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
// Add a div that is the container timing root
const div = document.createElement('div');
div.setAttribute('containertiming', 'div_ct');
@ -50,7 +48,6 @@ body {
div.appendChild(img2);
beforeRender = performance.now();
};
}, 'Overlapping images report to containertiming.');
</script>

View file

@ -25,20 +25,19 @@ body {
})
);
observer.observe({entryTypes: ['container']});
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
// Add a div that is the container timing root
const div = document.createElement('div');
div.setAttribute('containertiming', 'div_ct');
document.body.appendChild(div);
// Add image of width equal to 100 and height equal to 100.
const img = document.createElement('img');
img.src = '/container-timing/resources/square100.png';
img.setAttribute('id', 'img_id');
div.appendChild(img);
beforeRender = performance.now();
};
}, 'Paint of the image child of container timing is reported.');
</script>

View file

@ -23,9 +23,7 @@ body {
})
);
observer.observe({entryTypes: ['container']});
// Add the text during onload to be sure that the observer is registered
// in time.
window.onload = () => {
// Add a div that is the container timing root
const div = document.createElement('div');
div.setAttribute('containertiming', 'div_ct');
@ -35,8 +33,8 @@ body {
p.id = 'p_id';
p.innerText = "This is a text";
div.appendChild(p);
beforeRender = performance.now();
};
}, 'Paint of the text child of container timing is reported.');
</script>

View file

@ -21,23 +21,20 @@ body {
);
observer.observe({entryTypes: ['container']});
// Wait 2 seconds for observations, then finish successfully
t.step_timeout(() => {
t.done();
}, 2000);
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
finishOnElementTiming(t);
// Add a div that is the container timing root
const div = document.createElement('div');
div.setAttribute('containertiming', 'div_ct');
document.body.appendChild(div);
// Add image of width equal to 100 and height equal to 100.
const img = document.createElement('img');
img.src = '/container-timing/resources/square100.png';
img.setAttribute('id', 'img_id');
document.body.appendChild(img);
};
addPaintingElementTimingAfterDoubleRAF(document.body);
}, 'Containertiming observed without paintable contents and an image outside does not report observations.');
</script>

View file

@ -25,9 +25,7 @@ body {
})
);
observer.observe({entryTypes: ['container']});
// Add the image during onload to be sure that the observer is registered
// in time.
window.onload = () => {
// Add a div that is the container timing root
const div1 = document.createElement('div');
div1.setAttribute('containertiming', 'div1_ct');
@ -43,8 +41,8 @@ body {
img.src = '/container-timing/resources/square100.png';
img.setAttribute('id', 'img_id');
div2.appendChild(img);
beforeRender = performance.now();
};
}, 'A parent containertiming root with default nesting policy does not get paints from children containertiming roots.');
</script>

View file

@ -0,0 +1,26 @@
<!doctype html>
<meta charset="utf-8">
<head>
<title>CSP header applied to image document</title>
<link rel="help" href="https://github.com/servo/servo/issues/38180">
<script src='/resources/testharness.js'></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<iframe id="iframe" src="../support/pass.png?pipe=header(Content-Security-Policy,default-src 'none')"></iframe>
<script>
let iframe = document.getElementById("iframe");
promise_test(async t => {
await t.step_wait(() => {
return iframe.contentDocument.querySelector("img") !== null;
}, "Wait for image document to be loaded", 5000, 100);
return new Promise((resolve, reject) => {
let newImg = iframe.contentDocument.createElement("img");
newImg.onload = reject;
newImg.onerror = resolve;
newImg.src = "../support/fail.png";
iframe.contentDocument.body.appendChild(newImg);
});
}, "Image document correctly applies CSP to other subresources.");
</script>
</body>

View file

@ -0,0 +1,7 @@
<!doctype html>
<meta charset="utf-8">
<title>CSP header ignored for image in image document</title>
<link rel="help" href="https://github.com/servo/servo/issues/38180">
<link rel='match' href='image-document-ignores-csp-for-loading-main-image-ref.html'>
<link rel="author" title="Josh Matthews" href="mailto:josh@joshmatthews.net">
<iframe src="../support/pass.png?pipe=header(Content-Security-Policy,default-src 'none')">

View file

@ -1,7 +0,0 @@
<!doctype html>
<meta charset="utf-8">
<title>CSP header ignored for image document</title>
<link rel="help" href="https://github.com/servo/servo/issues/38180">
<link rel='match' href='image-document-ignores-csp-ref.html'>
<link rel="author" title="Josh Matthews" href="mailto:josh@joshmatthews.net">
<iframe src="../support/pass3.png">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -1 +0,0 @@
Content-Security-Policy: default-src 'none'

View file

@ -19,14 +19,6 @@
.abspos {
position: absolute;
}
.columns {
column-count: 2;
column-fill: auto;
column-gap: 10px;
column-width: 100px;
width: 210px;
height: 100px;
}
.anchor {
anchor-name: --a1;
background: orange;
@ -38,8 +30,8 @@
background: lime;
}
</style>
<body onload="checkLayoutForAnchorPos('.target')">
<div class="container relpos xcolumns">
<body>
<div class="container relpos">
<div style="height: 150px"></div>
<div class="relpos">
<span class="target" data-expected-width=20></span>
@ -55,4 +47,7 @@
<span class="target" data-expected-width=30></span>
</div>
</div>
<script>
document.fonts.ready.then(() => checkLayoutForAnchorPos('.target'));
</script>
</body>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<html class="reftest-wait">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
<title>Tests anchor positioning with nested scroll containers</title>
<link rel="author" href="mailto:xiaochengh@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-anchor-1/">

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<title>Chrome bug 443261872: style attribute invalidation for tree-scoped anchor-name</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-position/#name">
<link rel="help" href="https://crbug.com/443261872">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
</style>
<div id="host">
<template shadowrootmode="open">
<style>
#anchor {
width: 100px;
height: 100px;
}
#anchored {
position-anchor: --panel-anchor;
position: absolute;
inset: anchor(top) anchor(right) anchor(bottom) anchor(left);
}
</style>
<div id="anchor" style="anchor-name:--panel-anchor; color:yellow"></div>
<div id="anchored"></div>
</template>
</div>
<script>
test(() => {
const anchor = host.shadowRoot.querySelector("#anchor");
const anchored = host.shadowRoot.querySelector("#anchored");
anchored.offsetTop;
anchor.style.color = "pink";
assert_equals(anchored.offsetWidth, 100);
}, "Changing inline style color does not change tree-scope for anchor-name");
</script>

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<title>CSS Conditional Test: @container anchored(fallback) matching 'any' &lt;position-area&gt;</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-2/#anchored-container-queries">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/12610">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/css-conditional/container-queries/support/cq-testcommon.js"></script>
<style>
#anchor {
anchor-name: --a;
width: 100px;
height: 100px;
}
#anchored {
position: absolute;
position-anchor: --a;
position-area: top;
position-try-fallbacks: span-bottom;
width: 100px;
/* Too tall to fit over the anchor to trigger fallback */
height: 100px;
container-type: anchored;
}
#target {
@container anchored(fallback: any) { --any: yes; }
@container anchored(fallback: any span-bottom) { --any-span-bottom: yes; }
@container anchored(fallback: span-end any) { --span-end-any: yes; }
@container anchored(fallback: any span-all) { --any-span-all: yes; }
}
</style>
<div id="anchor"></div>
<div id="anchored">
<div id="target"></div>
</div>
<script>
test(() => {
const style = getComputedStyle(target);
assert_equals(style.getPropertyValue("--any"), "yes");
assert_equals(style.getPropertyValue("--any-span-bottom"), "yes");
assert_equals(style.getPropertyValue("--span-end-any"), "yes");
assert_equals(style.getPropertyValue("--any-span-all"), "yes");
}, "@container anchored(fallback: <position-area>) querying 'any'");
</script>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<title>CSS Conditional Test: @container anchored query parsing - 'any' position-area</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-2/#anchored-container-queries">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/12610">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/css-conditional/container-queries/support/cq-testcommon.js"></script>
<div style="container-name:name;container-type:anchored">
<main id="cq-main"></main>
</div>
<script>
test_cq_condition_known('anchored(fallback: any)');
test_cq_condition_known('anchored(fallback: any any)');
test_cq_condition_known('anchored(fallback: any top)');
test_cq_condition_known('anchored(fallback: center any)');
test_cq_condition_known('anchored(fallback: any self-start)');
test_cq_condition_known('anchored(fallback: inline-end any)');
test_cq_condition_unknown('anchored(fallback: any none)');
</script>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<title>CSS Anchor Positioning: Originating element implicit anchor for pseudo elements using anchor-center</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#implicit">
<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
<style>
#anchor {
display: flow-root;
margin-left: -50px;
margin-top: -50px;
width: 200px;
height: 200px;
}
#anchor::after {
content: "";
position: absolute;
width: 100px;
height: 100px;
background: green;
/* Should be centered inside #anchor */
place-self: anchor-center;
}
#ref {
margin-left: 50px;
margin-top: 50px;
width: 100px;
height: 100px;
background-color: red;
}
</style>
<p>Test passes if there is a filled green square.</p>
<div id="wrapper">
<div id="anchor">
<div id="ref"></div>
</div>
</div>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Tests anchor positioned scrolling with nested scroll containers</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
<link rel="author" href="mailto:xiaochengh@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-anchor-1/">
<style>

View file

@ -0,0 +1,3 @@
features:
- name: margin-trim
files: "**"

View file

@ -861,12 +861,9 @@ test_scope_invalidation(document.currentScript, () => {
assert_green(c);
let scope_rule = main.querySelector('style').sheet.cssRules[1];
assert_true(scope_rule instanceof CSSScopeRule);
// Note: relative selectors imply a :where(:scope) selector to the left,
// which is observably different from an implicit '&' selector through
// specificity.
scope_rule.cssRules[0].selectorText = '> .b'; /* Still (0, 1, 0) */
scope_rule.cssRules[1].selectorText = '& > .c'; /* (0, 3, 0) */
scope_rule.cssRules[1].selectorText = '& > .c'; /* Still (0, 1, 0) */
assert_green(b);
assert_red(c);
}, 'Relative selectors set with selectorText are relative to :scope, not &');
assert_green(c);
}, 'Relative selectors set with selectorText are relative to :scope and &');
</script>

View file

@ -2,6 +2,7 @@
<title>@scope - nesting (&)</title>
<link rel="help" href="https://drafts.csswg.org/css-cascade-6/#scope-atrule">
<link rel="help" href="https://drafts.csswg.org/css-nesting-1/#nest-selector">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/9740">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<main id=main></main>
@ -9,12 +10,18 @@
<template id=test_nest_scope_end>
<div>
<style>
@scope (.a) to (& > &) {
* { z-index:1; }
/* (& > .b) behaves like (:where(:scope) > .b), due & mapping to :where(:scope).*/
@scope (.a) to (& > .b) {
:scope { z-index:1; }
}
/* Should not match, since <scope-end> refers to the scope itself. */
@scope (.a) to (.b&) {
:scope { z-index:42; }
}
</style>
<div class=a> <!-- This scope is limited by the element below. -->
<div class=a> <!-- This scope is limited by its own root. -->
<div class="a b">
<div class=b>
<div id=below></div>
</div>
</div>
@ -25,7 +32,10 @@
test((t) => {
t.add_cleanup(() => main.replaceChildren());
main.append(test_nest_scope_end.content.cloneNode(true));
let a = document.querySelector('.a');
let b = document.querySelector('.a > .b');
assert_equals(getComputedStyle(a).zIndex, '1');
assert_equals(getComputedStyle(b).zIndex, 'auto');
assert_equals(getComputedStyle(below).zIndex, 'auto');
assert_equals(getComputedStyle(outside).zIndex, 'auto');
}, 'Nesting-selector in <scope-end>');
@ -97,16 +107,16 @@ test((t) => {
<template id=test_inner_nest>
<div>
<style>
@scope (.a) {
& + & {
@scope (#div) {
& {
z-index: 1;
& {
z-index: 2;
}
}
}
</style>
<div class=a>
<div id=inner1 class=a></div>
<div id=inner2 class=a></div>
</div>
<div id=div></div>
</div>
</template>
<script>
@ -114,9 +124,8 @@ test((t) => {
t.add_cleanup(() => main.replaceChildren());
main.append(test_inner_nest.content.cloneNode(true));
assert_equals(getComputedStyle(inner1).zIndex, 'auto');
assert_equals(getComputedStyle(inner2).zIndex, '1');
}, 'Nesting-selector in the scope\'s <stylesheet>');
assert_equals(getComputedStyle(div).zIndex, '2');
}, 'Nested nesting-selectors within scope\'s <stylesheet> select inclusive descendants of the scope root');
</script>
<template id=test_parent_in_pseudo_scope>
@ -227,38 +236,6 @@ test((t) => {
}, 'Parent pseudo class within scope-start');
</script>
<template id=test_parent_pseudo_in_nested_scope_end>
<div>
<style>
.a {
/* Note that & in <scope-end> refers to <scope-start>,
not the outer style rule. */
@scope (&.b) to (&.c) {
:scope, * { z-index: 1; }
}
}
</style>
<div class="a b">
<div class="a c">
<div class="a b c">
</div>
</div>
</div>
</div>
</template>
<script>
test((t) => {
t.add_cleanup(() => main.replaceChildren());
main.append(test_parent_pseudo_in_nested_scope_end.content.cloneNode(true));
let ab = document.querySelector('.a.b:not(.c)');
let ac = document.querySelector('.a.c:not(.b)');
let abc = document.querySelector('.a.b.c');
assert_equals(getComputedStyle(ab).zIndex, '1');
assert_equals(getComputedStyle(ac).zIndex, '1');
assert_equals(getComputedStyle(abc).zIndex, 'auto', 'limit element is not in scope');
}, 'Parent pseudo class within scope-end');
</script>
<template id=test_parent_pseudo_in_nested_scope_body>
<div>
@ -621,7 +598,12 @@ test((t) => {
main.append(test_insert_ampersand_rule_within_scope.content.cloneNode(true));
assert_equals(getComputedStyle(child).color, 'rgb(255, 0, 0)');
let scope_rule = main.querySelector('style').sheet.cssRules[0].cssRules[0];
scope_rule.insertRule('& #child { color: green; }');
// & does not add specificity - inserting it up front does nothing...
scope_rule.insertRule('& #child { color: green; }', 0);
assert_equals(getComputedStyle(child).color, 'rgb(255, 0, 0)');
scope_rule.deleteRule(0);
// ... But inserting it at the end makes it win by order of appearance.
scope_rule.insertRule('& #child { color: green; }', scope_rule.cssRules.length);
assert_equals(getComputedStyle(child).color, 'rgb(0, 128, 0)');
}, 'Insert a nested style rule within @scope, &');
</script>

View file

@ -79,15 +79,14 @@ test_scope_specificity(['@scope (#main) to (.b)', '.a'], '.a');
test_scope_specificity(['@scope (#main, .foo, .bar)', '#a'], '#a');
test_scope_specificity(['@scope (#main)', 'div.b'], 'div.b');
test_scope_specificity(['@scope (#main)', ':scope .b'], '.a .b');
// Inherit the specificity of the scope-start selector.
test_scope_specificity(['@scope (#main)', '& .b'], '#main .b');
// & behaves like :where(:scope) - No specificity is added.
// See https://github.com/w3c/csswg-drafts/issues/9740
test_scope_specificity(['@scope (#main)', '& .b'], ':where(#main) .b');
test_scope_specificity(['@scope (#main)', 'div .b'], 'div .b');
test_scope_specificity(['@scope (#main)', '@scope (.a)', '.b'], '.b');
// Explicit `:scope` adds specficity.
test_scope_specificity(['@scope (#main)', ':scope .b'], ':scope .b');
// Using & in scoped style with implicit scope root matches the same elements
// as `:scope`, but does not add any specificity.
// https://github.com/w3c/csswg-drafts/issues/10196
// & behaves like :where(:scope), even for implicit scope roots.
test_scope_specificity(['@scope', '& .b'], ':where(:scope) .b', styleImplicit);
// Using relative selector syntax does not add specificity
test_scope_specificity(['@scope (#main)', '> .a'], ':where(#main) > .a');

View file

@ -91,6 +91,8 @@
// Insert inner <a> with JS, since the parser can't produce this result.
let inner_a = document.createElement('a');
inner_a.setAttribute('href', '');
inner_a.setAttribute('class', 'with_class_inner');
inner_a.setAttribute('style', 'color: green');
inner_a.textContent = 'Visited2';
outer_visited.append(inner_a);
</script>

View file

@ -186,7 +186,7 @@
<template shadowrootmode=open>
<main>
Main
<a href="">
<a href="" class="with_class_outer">
Visited1
</a>
</main>
@ -198,6 +198,17 @@
@scope (:visited) {
:scope > :visited { background-color: coral; }
}
@scope (:visited) {
:visited > :scope { background-color: lightgrey; }
}
@scope(.with_class_inner) {
:visited > :scope { color: yellow; }
}
/* Should match */
@scope(.with_class_outer) {
:scope > :visited { color: green; }
}
</style>
</template>
</div>
@ -207,8 +218,10 @@
// Insert the inner :visited link with JS, since the parser
// can't produce this.
let outer_a = visited_in_visited.shadowRoot.querySelector('main > a');
let inner_a = document.createElement('a');
inner_a.setAttribute('href', '');
inner_a.setAttribute('class', 'with_class_inner');
inner_a.textContent = 'Visited2';
outer_a.append(inner_a);
}

View file

@ -444,50 +444,53 @@
fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 25%) 0%, lab(50 none none / 0.5))`, `lab(50 20 30 / 0.5)`);
// oklab()
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`);
fuzzy_test_computed_color(`color-mix(in oklab, 25% oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), 25% oklab(0.5 0.6 0.7))`, `oklab(0.2 0.3 0.4)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7) 25%)`, `oklab(0.2 0.3 0.4)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7) 75%)`, `oklab(0.4 0.5 0.6)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)`, `oklab(0.4 0.5 0.6)`); // Scale down > 100% sum.
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)`, `oklab(0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`);
// Absence of colorspace means OKLab.
for (const colorSpace of ["", "in oklab, "]) {
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}25% oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3), 25% oklab(0.5 0.6 0.7))`, `oklab(0.2 0.3 0.4)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7) 25%)`, `oklab(0.2 0.3 0.4)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7) 75%)`, `oklab(0.4 0.5 0.6)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)`, `oklab(0.4 0.5 0.6)`); // Scale down > 100% sum.
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)`, `oklab(0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.36666664 0.46666664 0.56666664 / 0.6)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
fuzzy_test_computed_color(`color-mix(in oklab, 25% oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), 25% oklab(0.5 0.6 0.7 / .8))`, `oklab(0.26 0.36 0.46 / 0.5)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8) 25%)`, `oklab(0.26 0.36 0.46 / 0.5)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8) 75%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 30%, oklab(0.5 0.6 0.7 / .8) 90%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`); // Scale down > 100% sum.
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 12.5%, oklab(0.5 0.6 0.7 / .8) 37.5%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 0%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.5 0.6 0.7 / 0.8)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.36666664 0.46666664 0.56666664 / 0.6)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}25% oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / .4), 25% oklab(0.5 0.6 0.7 / .8))`, `oklab(0.26 0.36 0.46 / 0.5)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8) 25%)`, `oklab(0.26 0.36 0.46 / 0.5)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8) 75%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / .4) 30%, oklab(0.5 0.6 0.7 / .8) 90%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`); // Scale down > 100% sum.
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / .4) 12.5%, oklab(0.5 0.6 0.7 / .8) 37.5%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / .4) 0%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.5 0.6 0.7 / 0.8)`);
fuzzy_test_computed_color(`color-mix(in oklab, transparent, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)');
fuzzy_test_computed_color(`color-mix(in oklab, transparent 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)');
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 0), oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)');
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 0) 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)');
fuzzy_test_computed_color(`color-mix(${colorSpace}transparent, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)');
fuzzy_test_computed_color(`color-mix(${colorSpace}transparent 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)');
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / 0), oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)');
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / 0) 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)');
fuzzy_test_computed_color(`color-mix(in oklab, white, blue)`, `oklab(0.726 -0.016 -0.156)`);
fuzzy_test_computed_color(`color-mix(in oklab, white 10%, blue)`, `oklab(0.507 -0.029 -0.28)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}white, blue)`, `oklab(0.726 -0.016 -0.156)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}white 10%, blue)`, `oklab(0.507 -0.029 -0.28)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(none none none), oklab(none none none))`, `oklab(none none none)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(none none none), oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(none none none))`, `oklab(0.1 0.2 0.3)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.7)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))`, `oklab(0.3 0.4 0.3)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(none 0.2 0.3), oklab(0.5 none 0.7))`, `oklab(0.5 0.2 0.5)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))`, `oklab(0.3 0.4 0.5 / 0.5)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))`, `oklab(0.3 0.4 0.5 / none)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(none none none), oklab(none none none))`, `oklab(none none none)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(none none none), oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3), oklab(none none none))`, `oklab(0.1 0.2 0.3)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.7)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))`, `oklab(0.3 0.4 0.3)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(none 0.2 0.3), oklab(0.5 none 0.7))`, `oklab(0.5 0.2 0.5)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))`, `oklab(0.3 0.4 0.5 / 0.5)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))`, `oklab(0.3 0.4 0.5 / none)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 none none / none))`, `oklab(0.5 0.2 0.3 / 0.25)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none 0.5 none / none))`, `oklab(0.1 0.5 0.3 / 0.25)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none none 0.5 / none))`, `oklab(0.1 0.2 0.5 / 0.25)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 0.5 none / none))`, `oklab(0.5 0.5 0.3 / 0.25)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none none none / 0.5))`, `oklab(0.1 0.2 0.3 / 0.5)`);
fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 none none / 0.5))`, `oklab(0.5 0.2 0.3 / 0.5)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 none none / none))`, `oklab(0.5 0.2 0.3 / 0.25)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none 0.5 none / none))`, `oklab(0.1 0.5 0.3 / 0.25)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none none 0.5 / none))`, `oklab(0.1 0.2 0.5 / 0.25)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 0.5 none / none))`, `oklab(0.5 0.5 0.3 / 0.25)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none none none / 0.5))`, `oklab(0.1 0.2 0.3 / 0.5)`);
fuzzy_test_computed_color(`color-mix(${colorSpace}oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 none none / 0.5))`, `oklab(0.5 0.2 0.3 / 0.5)`);
}
for (const colorSpace of [ "srgb", "srgb-linear", "display-p3", "display-p3-linear", "a98-rgb", "prophoto-rgb", "rec2020", "xyz", "xyz-d50", "xyz-d65" ]) {
const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace;

Some files were not shown because too many files have changed in this diff Show more