Sync WPT with upstream (10-08-2025) (#38583)

Automated downstream sync of changes from upstream as of 10-08-2025
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
This commit is contained in:
Servo WPT Sync 2025-08-10 13:09:48 +02:00 committed by GitHub
parent 2f0afb0ec0
commit 86c37a380b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
223 changed files with 7100 additions and 1428 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,4 @@
[eval-allowed-by-hash-long-script.sub.html]
expected: ERROR
[Expecting alerts: ["PASS, long text that exceeds the 40 character limit used for report snippets"\]]
expected: FAIL

View file

@ -0,0 +1,3 @@
[gap-decorations-color-neutral-keyframe-004.html]
[gap decorations row-rule-color value list supports neutral keyframe.]
expected: FAIL

View file

@ -0,0 +1,3 @@
[gap-decorations-color-neutral-keyframe-005.html]
[gap decorations row-rule-color value list supports neutral keyframe.]
expected: FAIL

View file

@ -0,0 +1,3 @@
[rule-color-interpolation-conversion-001.html]
[CSS gap color change computed value to non compatible value mid-animation]
expected: FAIL

View file

@ -0,0 +1,3 @@
[rule-color-interpolation-conversion-002.html]
[CSS gap color change computed value to compatible value mid-animation]
expected: FAIL

View file

@ -0,0 +1,2 @@
[rule-color-interpolation-conversion-crash.html]
expected: TIMEOUT

View file

@ -0,0 +1,144 @@
[rule-color-interpolation-multiple-values-001.html]
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (-0.3) should be [black black black\]]
expected: FAIL
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (0) should be [black black black\]]
expected: FAIL
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (0.3) should be [rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)\]]
expected: FAIL
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (0.6) should be [rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)\]]
expected: FAIL
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (1) should be [red red red\]]
expected: FAIL
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (1.5) should be [red red red\]]
expected: FAIL
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (-0.3) should be [black black black\]]
expected: FAIL
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (0) should be [black black black\]]
expected: FAIL
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (0.3) should be [rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)\]]
expected: FAIL
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (0.6) should be [rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)\]]
expected: FAIL
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (1) should be [red red red\]]
expected: FAIL
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (1.5) should be [red red red\]]
expected: FAIL
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (-0.3) should be [black black black\]]
expected: FAIL
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (0) should be [black black black\]]
expected: FAIL
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (0.3) should be [rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)\]]
expected: FAIL
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (0.6) should be [rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)\]]
expected: FAIL
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (1) should be [red red red\]]
expected: FAIL
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (1.5) should be [red red red\]]
expected: FAIL
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (-0.3) should be [black black black\]]
expected: FAIL
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (0) should be [black black black\]]
expected: FAIL
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (0.3) should be [rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)\]]
expected: FAIL
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (0.6) should be [rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)\]]
expected: FAIL
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (1) should be [red red red\]]
expected: FAIL
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (1.5) should be [red red red\]]
expected: FAIL
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (-0.3) should be [black red blue\]]
expected: FAIL
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (0) should be [black red blue\]]
expected: FAIL
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (0.3) should be [rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)\]]
expected: FAIL
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (0.6) should be [rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)\]]
expected: FAIL
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (1) should be [red blue red\]]
expected: FAIL
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (1.5) should be [red blue red\]]
expected: FAIL
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (-0.3) should be [black red blue\]]
expected: FAIL
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (0) should be [black red blue\]]
expected: FAIL
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (0.3) should be [rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)\]]
expected: FAIL
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (0.6) should be [rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)\]]
expected: FAIL
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (1) should be [red blue red\]]
expected: FAIL
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (1.5) should be [red blue red\]]
expected: FAIL
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (-0.3) should be [black red blue\]]
expected: FAIL
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (0) should be [black red blue\]]
expected: FAIL
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (0.3) should be [rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)\]]
expected: FAIL
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (0.6) should be [rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)\]]
expected: FAIL
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (1) should be [red blue red\]]
expected: FAIL
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (1.5) should be [red blue red\]]
expected: FAIL
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (-0.3) should be [black red blue\]]
expected: FAIL
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (0) should be [black red blue\]]
expected: FAIL
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (0.3) should be [rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)\]]
expected: FAIL
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (0.6) should be [rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)\]]
expected: FAIL
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (1) should be [red blue red\]]
expected: FAIL
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (1.5) should be [red blue red\]]
expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,3 @@
[rule-width-interpolation-conversion-001.html]
[CSS gap width change computed value to non compatible value mid-animation]
expected: FAIL

View file

@ -0,0 +1,3 @@
[rule-width-interpolation-conversion-002.html]
[CSS gap width change computed value to non compatible value mid-animation]
expected: FAIL

View file

@ -0,0 +1,6 @@
[rule-overlap-computed.html]
[Property gap-rule-overlap value 'row-over-column']
expected: FAIL
[Property gap-rule-overlap value 'column-over-row']
expected: FAIL

View file

@ -0,0 +1,6 @@
[rule-overlap-valid.html]
[e.style['gap-rule-overlap'\] = "row-over-column" should set the property value]
expected: FAIL
[e.style['gap-rule-overlap'\] = "column-over-row" should set the property value]
expected: FAIL

View file

@ -1,6 +0,0 @@
[rule-paint-order-computed.html]
[Property gap-rule-paint-order value 'row-over-column']
expected: FAIL
[Property gap-rule-paint-order value 'column-over-row']
expected: FAIL

View file

@ -1,6 +0,0 @@
[rule-paint-order-valid.html]
[e.style['gap-rule-paint-order'\] = "row-over-column" should set the property value]
expected: FAIL
[e.style['gap-rule-paint-order'\] = "column-over-row" should set the property value]
expected: FAIL

View file

@ -0,0 +1,2 @@
[masonry-order-001.html]
expected: FAIL

View file

@ -1,12 +0,0 @@
[grid-template-columns-repeat-auto-valid.tentative.html]
[e.style['grid-template-columns'\] = "repeat(auto-fill, auto)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, auto 100px auto)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] auto)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] auto [four\])" should set the property value]
expected: FAIL

View file

@ -0,0 +1,48 @@
[grid-template-columns-repeat-intrinsic-valid.tentative.html]
[e.style['grid-template-columns'\] = "repeat(auto-fill, auto)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, auto 100px auto)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] auto)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] auto [four\])" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fill, min-content)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, min-content 100px min-content)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] min-content)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] min-content [four\])" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fill, max-content)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, max-content 100px max-content)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] max-content)" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] max-content [four\])" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fill, fit-content(200px))" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, fit-content(200px) 100px fit-content(200px))" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] fit-content(200px))" should set the property value]
expected: FAIL
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] fit-content(200px) [four\])" should set the property value]
expected: FAIL

View file

@ -1,12 +0,0 @@
[grid-template-rows-repeat-auto-valid.tentative.html]
[e.style['grid-template-rows'\] = "repeat(auto-fill, auto)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, auto 100px auto)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] auto)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] auto [four\])" should set the property value]
expected: FAIL

View file

@ -0,0 +1,48 @@
[grid-template-rows-repeat-intrinsic-valid.tentative.html]
[e.style['grid-template-rows'\] = "repeat(auto-fill, auto)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, auto 100px auto)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] auto)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] auto [four\])" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fill, min-content)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, min-content 100px min-content)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] min-content)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] min-content [four\])" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fill, max-content)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, max-content 100px max-content)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] max-content)" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] max-content [four\])" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fill, fit-content(200px))" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, fit-content(200px) 100px fit-content(200px))" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] fit-content(200px))" should set the property value]
expected: FAIL
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] fit-content(200px) [four\])" should set the property value]
expected: FAIL

View file

@ -0,0 +1,15 @@
[contents-rule.html]
[Simple @contents with no fallback]
expected: FAIL
[Implicit semicolon after @contents, at end of block]
expected: FAIL
[Block in @apply overrides fallback]
expected: FAIL
[Fallback is used if @apply has no block]
expected: FAIL
[@contents is ignored if there is no @contents parameter]
expected: FAIL

View file

@ -0,0 +1,3 @@
[cross-stylesheet.html]
[CSS Mixins: Mixin from another stylesheet]
expected: FAIL

View file

@ -0,0 +1,9 @@
[shadow-dom.html]
[Style in shadow DOM should have access to outside non-adopted mixins]
expected: FAIL
[Style in shadow DOM should have access to inside mixins]
expected: FAIL
[Style in shadow DOM should have access to mixins from adopted stylesheets]
expected: FAIL

View file

@ -0,0 +1,2 @@
[replaced-object-backdrop.html]
expected: FAIL

View file

@ -16,3 +16,81 @@
[Property text-autospace value 'initial']
expected: FAIL
[Property text-autospace value 'ideograph-alpha ideograph-numeric']
expected: FAIL
[Property text-autospace value 'punctuation']
expected: FAIL
[Property text-autospace value 'punctuation ideograph-alpha']
expected: FAIL
[Property text-autospace value 'punctuation ideograph-alpha ideograph-numeric']
expected: FAIL
[Property text-autospace value 'ideograph-alpha insert']
expected: FAIL
[Property text-autospace value 'ideograph-numeric insert']
expected: FAIL
[Property text-autospace value 'ideograph-alpha ideograph-numeric insert']
expected: FAIL
[Property text-autospace value 'punctuation insert']
expected: FAIL
[Property text-autospace value 'punctuation ideograph-alpha insert']
expected: FAIL
[Property text-autospace value 'insert ideograph-alpha']
expected: FAIL
[Property text-autospace value 'insert ideograph-numeric']
expected: FAIL
[Property text-autospace value 'insert ideograph-alpha ideograph-numeric']
expected: FAIL
[Property text-autospace value 'insert punctuation']
expected: FAIL
[Property text-autospace value 'insert punctuation ideograph-alpha']
expected: FAIL
[Property text-autospace value 'insert punctuation ideograph-alpha ideograph-numeric']
expected: FAIL
[Property text-autospace value 'ideograph-alpha replace']
expected: FAIL
[Property text-autospace value 'ideograph-numeric replace']
expected: FAIL
[Property text-autospace value 'ideograph-alpha ideograph-numeric replace']
expected: FAIL
[Property text-autospace value 'punctuation replace']
expected: FAIL
[Property text-autospace value 'punctuation ideograph-alpha replace']
expected: FAIL
[Property text-autospace value 'replace ideograph-alpha']
expected: FAIL
[Property text-autospace value 'replace ideograph-numeric']
expected: FAIL
[Property text-autospace value 'replace ideograph-alpha ideograph-numeric']
expected: FAIL
[Property text-autospace value 'replace punctuation']
expected: FAIL
[Property text-autospace value 'replace punctuation ideograph-alpha']
expected: FAIL
[Property text-autospace value 'replace punctuation ideograph-alpha ideograph-numeric']
expected: FAIL

View file

@ -1,6 +0,0 @@
[elementsFromPoint-iframes.html]
[elementsFromPoint on inner documents]
expected: FAIL
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL

View file

@ -1,3 +0,0 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for valid queries]
expected: FAIL

View file

@ -0,0 +1,3 @@
[StyleSheetList-constructable-with-style-recalc.html]
[document.styleSheets does not include adopted style sheets]
expected: FAIL

View file

@ -0,0 +1,3 @@
[StyleSheetList-constructable.html]
[document.styleSheets does not include adopted style sheets]
expected: FAIL

View file

@ -10,3 +10,15 @@
[CaretRange.getClientRect() should return a DOMRect that matches one obtained from a manually constructed Range]
expected: FAIL
[document.caretPositionFromPoint() should return a CaretPosition over elements with `user-select: none`]
expected: FAIL
[document.caretPositionFromPoint() should return a CaretPosition over video elements]
expected: FAIL
[document.caretPositionFromPoint() should return a CaretPosition over audio elements]
expected: FAIL
[document.caretPositionFromPoint() should return a CaretPosition over SVG elements]
expected: FAIL

View file

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

View file

@ -7,3 +7,9 @@
[Navigating to a different document with link click]
expected: FAIL
[Navigating to a different document with location.href]
expected: FAIL
[Navigating to a different document with location.assign]
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,9 @@
[template-patch-range.html]
[<template patchstartafter=first patchendbefore=last> should insert the patch between two existing nodes]
expected: FAIL
[<template patchendbefore=last> should insert the patch before an existing node]
expected: FAIL
[<template patchstartafter=first> should insert the patch after an existing node]
expected: FAIL

View file

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

View file

@ -0,0 +1,3 @@
[iframe-loading-lazy-reload-location-reload.html]
[Reloading iframe loading='lazy' before it is loaded: location.reload]
expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[animated-webp-update.tentative.html]
expected: FAIL

View file

@ -1,3 +0,0 @@
[intrinsic_sizes.htm]
[default object size after src is removed]
expected: FAIL

View file

@ -1,3 +0,0 @@
[historical.html]
[<input name=isindex> should not be supported]
expected: FAIL

View file

@ -7,3 +7,6 @@
[invoker inside popover still works, even with weird nesting]
expected: FAIL
[invoker inside popover still works, even inside of a shadowroot]
expected: FAIL

View file

@ -0,0 +1,2 @@
[interestfor-pseudo-element-appearance.tentative.html]
expected: FAIL

View file

@ -4,6 +4,3 @@
[different-site document prefetch without 'as' should not be consumed]
expected: FAIL
[different-site document prefetch with 'as=document' should not be consumed]
expected: FAIL

View file

@ -68,11 +68,17 @@
[Decode-error (style): main]
expected: FAIL
[MIME-error (script): main]
expected: FAIL
[404 (style): main]
expected: FAIL
[CORS (style): main]
expected: FAIL
[success (style): main]
expected: FAIL
[404 (xhr): main]
expected: FAIL
[Decode-error (script): main]
expected: FAIL

View file

@ -0,0 +1,24 @@
[crashReport-test.html]
[crashReport getter returns null in detached Documents]
expected: FAIL
[crashReport initialize() throws InvalidStateError in detached Documents]
expected: FAIL
[crashReport.set() throws InvalidStateError in detached Documents]
expected: FAIL
[crashReport.remove() throws InvalidStateError in detached Documents]
expected: FAIL
[crashReport.initialize() with size > 5MB rejects with NotAllowedError]
expected: FAIL
[Calling crashReport.initialize() a second time throws InvalidStateError]
expected: FAIL
[crashReport.set() throws before initialize() resolves]
expected: FAIL
[crashReport.set() and .remove() succeed after initialize() resolves]
expected: FAIL

View file

@ -1,3 +0,0 @@
[change-layout-in-error.html]
[Changing layout in window error handler should not result in lifecyle loop when resize observer loop limit is reached.]
expected: FAIL

View file

@ -1,3 +1,3 @@
[eventloop.html]
[test0: multiple notifications inside same event loop]
[test1: depths of shadow roots]
expected: FAIL

View file

@ -31,3 +31,6 @@
[getComposedRanges returns a sequence with a static range without rescoping when there is a selection in an outer shadow tree and the inner shadow tree is specified as an argument]
expected: FAIL
[getComposedRanges returns a sequence with a static range pointing to a shadow tree when there is a selection in the shadow tree and the shadow tree is specified as an argument]
expected: FAIL

View file

@ -108,21 +108,6 @@
[Window interface: attribute caches]
expected: FAIL
[ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)]
expected: TIMEOUT
[NavigationPreloadManager interface: operation enable()]
expected: TIMEOUT
[NavigationPreloadManager interface: operation disable()]
expected: TIMEOUT
[NavigationPreloadManager interface: operation setHeaderValue(ByteString)]
expected: TIMEOUT
[NavigationPreloadManager interface: operation getState()]
expected: TIMEOUT
[idlharness.https.any.serviceworker.html]
expected: ERROR

View file

@ -34,3 +34,6 @@
[document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the inner shadow tree when the point is in an inner shadow tree and the inner shadow tree and the outer shadow tree are specified as an argument]
expected: FAIL
[document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to a closed shadow tree when the shadow tree is specified as an argument]
expected: FAIL

View file

@ -886,3 +886,15 @@
[X SNR (-301.3207293613 dB) is not greater than or equal to 85.58. Got -301.3207293613.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14970\]\t-7.6012745677376742e+26\t7.6832914352416992e-1\t7.6012745677376742e+26\t9.8932529525981143e+26\t9.0957000000000003e-5\n\t[14971\]\t4.5687935130846336e-41\t7.2672140598297119e-1\t7.2672140598297119e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 7.6012745677376742e+26 at index of 14970.\n\tMax RelError of 9.8932529525981143e+26 at index of 14970.\n]
expected: FAIL
[X SNR (-494.1836424576893 dB) is not greater than or equal to 85.58. Got -494.1836424576893.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14970\]\t-5.7105342676777582e-10\t7.6832914352416992e-1\t7.6832914409522335e-1\t1.0000000007432406e+0\t9.0957000000000003e-5\n\t[14971\]\t4.5567423462914402e-41\t7.2672140598297119e-1\t7.2672140598297119e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 7.6832914409522335e-1 at index of 14970.\n\tMax RelError of 1.0000000007432406e+0 at index of 14970.\n]
expected: FAIL
[X SNR (42.94790593253836 dB) is not greater than or equal to 85.58. Got 42.94790593253836.]
expected: FAIL

View file

@ -16,3 +16,9 @@
[# AUDIT TASK RUNNER FINISHED: 2 out of 2 tasks were failed.]
expected: FAIL
[NaN should not occur during extreme linearRampToValueAtTime events]
expected: FAIL
[Interpolation of linear ramp between very close time values]
expected: FAIL

View file

@ -7,3 +7,6 @@
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
expected: FAIL
[Test summing junction behavior of AudioParam with multiple audio-rate sources and intrinsic gain]
expected: FAIL

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -414,30 +414,6 @@ function assert_large_array_equals(actual, expected, description) {
assert_equals(array_string, expected_string, description);
}
// Verifies a record from the results of `getAllRecords()`.
function assert_record_equals(actual_record, expected_record) {
assert_class_string(
actual_record, 'IDBRecord', 'The record must be an IDBRecord');
assert_idl_attribute(
actual_record, 'key', 'The record must have a key attribute');
assert_idl_attribute(
actual_record, 'primaryKey',
'The record must have a primaryKey attribute');
assert_idl_attribute(
actual_record, 'value', 'The record must have a value attribute');
// Verify the key properties.
assert_equals(
actual_record.primaryKey, expected_record.primaryKey,
'The record must have the expected primaryKey');
assert_equals(
actual_record.key, expected_record.key,
'The record must have the expected key');
// Verify the value.
assert_idb_value_equals(actual_record.value, expected_record.value);
}
// Verifies two IDB values are equal. The expected value may be a primitive, an
// object, or an array.
function assert_idb_value_equals(actual_value, expected_value) {

View file

@ -26,9 +26,9 @@ promise_test(async () => {
tone: 'as-is',
format: 'as-is',
length: 'as-is',
expectedInputLanguages: ['es'], // not supported
expectedInputLanguages: ['zu'], // not supported
expectedContextLanguages: ['en'],
outputLanguage: 'es', // not supported
outputLanguage: 'zu', // not supported
});
assert_equals(availability, 'unavailable');
}, 'Rewriter.availability() returns unavailable for unsupported languages');

View file

@ -27,9 +27,9 @@ promise_test(async () => {
type: 'tldr',
format: 'plain-text',
length: 'medium',
expectedInputLanguages: ['es'], // not supported
expectedInputLanguages: ['zu'], // not supported
expectedContextLanguages: ['en'],
outputLanguage: 'es', // not supported
outputLanguage: 'zu', // not supported
});
assert_equals(availability, 'unavailable');
}, 'Summarizer.availability() returns unavailable for unsupported languages');

View file

@ -26,9 +26,9 @@ promise_test(async () => {
tone: 'neutral',
format: 'plain-text',
length: 'medium',
expectedInputLanguages: ['es'], // not supported
expectedInputLanguages: ['zu'], // not supported
expectedContextLanguages: ['en'],
outputLanguage: 'es', // not supported
outputLanguage: 'zu', // not supported
});
assert_equals(availability, 'unavailable');
}, 'Writer.availability() returns unavailable for unsupported languages');

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' 'eval-sha256-VQy4ev8+SNjwocE4f/UdEfFZK/kEkq7mIM/M/mZrVpE='; connect-src 'self';">
<title>eval-allowed</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../support/logTest.sub.js?logs=[]"></script>
<script src='../../support/alertAssert.sub.js?alerts=["PASS, long text that exceeds the 40 character limit used for report snippets"]'></script>
</head>
<body>
<script>
window.addEventListener('securitypolicyviolation', function(e) {
log("Fail");
});
eval("alert_assert('PASS, long text that exceeds the 40 character limit used for report snippets')");
</script>
<div id="log"></div>
</body>
</html>

View file

@ -8,6 +8,8 @@
<script src="/common/get-host-info.sub.js"></script>
<script src="/cookies/resources/cookie-helper.sub.js"></script>
<script src="/cookies/partitioned-cookies/resources/test-helpers.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<body>
<script>
@ -65,7 +67,9 @@ document.body.onload = async () => {
encodeURIComponent(self.origin)}`,
get_host_info().HTTPS_NOTSAMESITE_ORIGIN + self.location.pathname);
const popup = window.open(crossSiteUrl);
fetch_tests_from_window(popup);
await fetch_tests_from_window(popup);
await test_driver.delete_all_cookies();
};
</script>

View file

@ -1,18 +1,25 @@
// META: title=Cookie Store API: cookieListItem attributes
// META: global=window,serviceworker
// META: global=serviceworker
// This is a copy of cookieListItem_attributes.https.window.js, minus all the bits that only work
// in a window context, which unfortunately includes the testdriver asserts.
//
// Please keep them synchronized.
'use strict';
const kCurrentHostname = (new URL(self.location.href)).hostname;
const currentHostname = (new URL(self.location.href)).hostname;
const kOneDay = 24 * 60 * 60 * 1000;
const kFourHundredDays = 400 * kOneDay;
const kTenYears = 10 * 365 * kOneDay;
const kFourHundredDaysFromNow = Date.now() + kFourHundredDays;
const kTenYearsFromNow = Date.now() + kTenYears;
const oneDayInSeconds = 24 * 60 * 60;
const fourHundredDaysInSeconds = 400 * oneDayInSeconds;
const tenYearsInSeconds = 10 * 365 * oneDayInSeconds;
const fourHundredDaysFromNowInSeconds = Date.now() / 1000 + fourHundredDaysInSeconds;
const tenYearsFromNowInSeconds = Date.now() / 1000 + tenYearsInSeconds;
const kCookieListItemKeys =
['domain', 'expires', 'name', 'path', 'sameSite', 'secure', 'value'].sort();
function assert_cookie_keys(cookie) {
const cookieKeys = Object.keys(cookie);
assert_array_equals(cookieKeys, ['name', 'value']);
}
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
@ -25,15 +32,7 @@ promise_test(async testCase => {
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_equals(cookie.domain, null);
assert_equals(cookie.path, '/');
assert_equals(cookie.expires, null);
assert_equals(cookie.secure, true);
assert_equals(cookie.sameSite, 'strict');
const itemKeys = Object.keys(cookie);
for (const key of kCookieListItemKeys) {
assert_in_array(key, itemKeys);
}
assert_cookie_keys(cookie);
}, 'CookieListItem - cookieStore.set defaults with positional name and value');
promise_test(async testCase => {
@ -46,37 +45,21 @@ promise_test(async testCase => {
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_equals(cookie.domain, null);
assert_equals(cookie.path, '/');
assert_equals(cookie.expires, null);
assert_equals(cookie.secure, true);
assert_equals(cookie.sameSite, 'strict');
const itemKeys = Object.keys(cookie);
for (const key of kCookieListItemKeys) {
assert_in_array(key, itemKeys);
}
assert_cookie_keys(cookie);
}, 'CookieListItem - cookieStore.set defaults with name and value in options');
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
expires: kTenYearsFromNow });
expires: tenYearsFromNowInSeconds * 1000 });
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_equals(cookie.domain, null);
assert_equals(cookie.path, '/');
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
assert_equals(cookie.secure, true);
assert_equals(cookie.sameSite, 'strict');
const itemKeys = Object.keys(cookie);
for (const key of kCookieListItemKeys) {
assert_in_array(key, itemKeys);
}
assert_cookie_keys(cookie);
}, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' +
'years in the future');
@ -84,40 +67,29 @@ promise_test(async testCase => {
await cookieStore.delete('cookie-name');
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
expires: new Date(kTenYearsFromNow) });
expires: new Date(tenYearsFromNowInSeconds) * 1000 });
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_equals(cookie.domain, null);
assert_equals(cookie.path, '/');
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
assert_equals(cookie.secure, true);
assert_cookie_keys(cookie);
}, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' +
'years in the future');
promise_test(async testCase => {
await cookieStore.delete({ name: 'cookie-name', domain: kCurrentHostname });
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
domain: kCurrentHostname });
domain: currentHostname });
testCase.add_cleanup(async () => {
await cookieStore.delete({ name: 'cookie-name', domain: kCurrentHostname });
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_equals(cookie.domain, kCurrentHostname);
assert_equals(cookie.path, '/');
assert_equals(cookie.expires, null);
assert_equals(cookie.secure, true);
assert_equals(cookie.sameSite, 'strict');
const itemKeys = Object.keys(cookie);
for (const key of kCookieListItemKeys) {
assert_in_array(key, itemKeys);
}
assert_cookie_keys(cookie);
}, 'CookieListItem - cookieStore.set with domain set to the current hostname');
promise_test(async testCase => {
@ -135,15 +107,7 @@ promise_test(async testCase => {
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_equals(cookie.domain, null);
assert_equals(cookie.path, currentDirectory);
assert_equals(cookie.expires, null);
assert_equals(cookie.secure, true);
assert_equals(cookie.sameSite, 'strict');
const itemKeys = Object.keys(cookie);
for (const key of kCookieListItemKeys) {
assert_in_array(key, itemKeys);
}
assert_cookie_keys(cookie);
}, 'CookieListItem - cookieStore.set with path set to the current directory');
promise_test(async testCase => {
@ -160,15 +124,7 @@ promise_test(async testCase => {
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_equals(cookie.domain, null);
assert_equals(cookie.path, currentDirectory);
assert_equals(cookie.expires, null);
assert_equals(cookie.secure, true);
assert_equals(cookie.sameSite, 'strict');
const itemKeys = Object.keys(cookie);
for (const key of kCookieListItemKeys) {
assert_in_array(key, itemKeys);
}
assert_cookie_keys(cookie);
}, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /');
['strict', 'lax', 'none'].forEach(sameSiteValue => {
@ -183,47 +139,7 @@ promise_test(async testCase => {
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_equals(cookie.domain, null);
assert_equals(cookie.path, '/');
assert_equals(cookie.expires, null);
assert_equals(cookie.secure, true);
assert_equals(cookie.sameSite, sameSiteValue);
const itemKeys = Object.keys(cookie);
for (const key of kCookieListItemKeys) {
assert_in_array(key, itemKeys);
}
assert_cookie_keys(cookie);
}, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`);
});
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
await cookieStore.set('cookie-name', 'cookie-value');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.secure, true);
}, 'CookieListItem - secure defaults to true');
if (self.GLOBAL.isWindow()) {
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
let encodedCookie = encodeURIComponent(JSON.stringify("cookie-name=1; max-age=99999999999999999999999999999; path=/"));
await fetch(`/cookies/resources/cookie.py?set=${encodedCookie}`);
assert_equals(document.cookie, "cookie-name=1", 'The cookie was set as expected.');
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, '1');
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
}, "Test max-age attribute over the 400 days");
}

View file

@ -0,0 +1,201 @@
// META: title=Cookie Store API: cookieListItem attributes
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// Please keep this synchronized with cookieListItem_attributes.https.any.js.
'use strict';
const currentHostname = location.hostname;
const oneDayInSeconds = 24 * 60 * 60;
const fourHundredDaysInSeconds = 400 * oneDayInSeconds;
const tenYearsInSeconds = 10 * 365 * oneDayInSeconds;
const fourHundredDaysFromNowInSeconds = Date.now() / 1000 + fourHundredDaysInSeconds;
const tenYearsFromNowInSeconds = Date.now() / 1000 + tenYearsInSeconds;
function assert_cookie_keys(cookie) {
const cookieKeys = Object.keys(cookie);
assert_array_equals(cookieKeys, ['name', 'value']);
}
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
await cookieStore.set('cookie-name', 'cookie-value');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_equals(internalCookie.name, 'cookie-name');
assert_equals(internalCookie.value, 'cookie-value');
assert_equals(internalCookie.path, '/');
assert_equals(internalCookie.domain, currentHostname);
assert_true(internalCookie.secure);
assert_false(internalCookie.httpOnly);
assert_equals(internalCookie.expiry, undefined);
assert_equals(internalCookie.sameSite, 'Strict');
}, 'CookieListItem - cookieStore.set defaults with positional name and value');
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' });
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_equals(internalCookie.name, 'cookie-name');
assert_equals(internalCookie.value, 'cookie-value');
assert_equals(internalCookie.path, '/');
assert_equals(internalCookie.domain, currentHostname);
assert_true(internalCookie.secure);
assert_false(internalCookie.httpOnly);
assert_equals(internalCookie.expiry, undefined);
assert_equals(internalCookie.sameSite, 'Strict');
}, 'CookieListItem - cookieStore.set defaults with name and value in options');
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
expires: tenYearsFromNowInSeconds * 1000 });
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds);
}, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' +
'years in the future');
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
expires: new Date(tenYearsFromNowInSeconds) * 1000 });
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds);
}, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' +
'years in the future');
promise_test(async testCase => {
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
domain: currentHostname });
testCase.add_cleanup(async () => {
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_equals(internalCookie.domain, currentHostname);
}, 'CookieListItem - cookieStore.set with domain set to the current hostname');
promise_test(async testCase => {
const currentUrl = new URL(self.location.href);
const currentPath = currentUrl.pathname;
const currentDirectory =
currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
path: currentDirectory });
testCase.add_cleanup(async () => {
await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_equals(internalCookie.path, currentDirectory);
}, 'CookieListItem - cookieStore.set with path set to the current directory');
promise_test(async testCase => {
const currentUrl = new URL(self.location.href);
const currentPath = currentUrl.pathname;
const currentDirectory = currentPath.substr(0, currentPath.lastIndexOf('/'));
await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
path: currentDirectory });
testCase.add_cleanup(async () => {
await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_equals(internalCookie.path, currentDirectory);
}, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /');
['strict', 'lax', 'none'].forEach(sameSiteValue => {
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
await cookieStore.set({
name: 'cookie-name', value: 'cookie-value', sameSite: sameSiteValue });
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_equals(internalCookie.sameSite, sameSiteValue.charAt(0).toUpperCase() + sameSiteValue.slice(1));
}, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`);
});
promise_test(async testCase => {
await cookieStore.delete('cookie-name');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
let encodedCookie = encodeURIComponent(JSON.stringify("cookie-name=1; max-age=99999999999999999999999999999; path=/"));
await fetch(`/cookies/resources/cookie.py?set=${encodedCookie}`);
assert_equals(document.cookie, "cookie-name=1", 'The cookie was set as expected.');
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, '1');
assert_cookie_keys(cookie);
const internalCookie = await test_driver.get_named_cookie('cookie-name');
assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds);
}, "Test max-age attribute over the 400 days");

View file

@ -220,3 +220,12 @@ promise_test(async testCase => {
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie, null);
}, 'cookieStore.delete with a __Host- prefix should not have a domain');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.delete(' cookie-name \t');
assert_equals(cookie, undefined);
}, 'cookieStore.delete with whitespace');

View file

@ -194,3 +194,14 @@ promise_test(async testCase => {
assert_equals(cookies[0].value, 'cookie-value');
}
}, 'cookieStore.getAll with absolute different url in options');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookies = await cookieStore.getAll(' cookie-name \t');
assert_equals(cookies.length, 1);
assert_equals(cookies[0].name, 'cookie-name');
assert_equals(cookies[0].value, 'cookie-value');
}, 'cookieStore.getAll with whitespace');

View file

@ -142,3 +142,13 @@ promise_test(async testCase => {
assert_equals(cookie.value, 'cookie-value');
}
}, 'cookieStore.get with absolute different url in options');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get(' cookie-name \t');
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
}, 'cookieStore.get with whitespace');

View file

@ -390,26 +390,29 @@ promise_test(async testCase => {
}, 'cookieStore.set with whitespace only name and value');
promise_test(async testCase => {
testCase.add_cleanup(async () => {
await cookieStore.delete('a b');
});
await cookieStore.set('a b', 'x y');
const cookie = await cookieStore.get('a b');
assert_equals(cookie.value, "x y");
const tests = [
{ set: ['a b', 'x y'], get: ['a b', 'x y'] },
{ set: ['a ', 'x'], get: ['a', 'x'] },
{ set: ['a\t', 'x'], get: ['a', 'x'] },
{ set: [' a', 'x'], get: ['a', 'x'] },
{ set: [' \t a', 'x'], get: ['a', 'x'] },
{ set: [' \t a \t\t', 'x'], get: ['a', 'x'] },
{ set: ['a', 'x '], get: ['a', 'x'] },
{ set: ['a', 'x\t'], get: ['a', 'x'] },
{ set: ['a', ' x'], get: ['a', 'x'] },
{ set: ['a', ' \t x'], get: ['a', 'x'] },
{ set: ['a', ' \t x \t\t'], get: ['a', 'x'] },
];
await promise_rejects_js(testCase, TypeError, cookieStore.set(
{ name: 'a ',
value: 'x' }));
for (const t of tests) {
await cookieStore.set(t.set[0], t.set[1]);
let cookie = await cookieStore.get(t.get[0]);
assert_equals(cookie.value, t.get[1]);
await promise_rejects_js(testCase, TypeError, cookieStore.set(
{ name: ' a',
value: 'x' }));
await cookieStore.delete(t.get[0]);
await promise_rejects_js(testCase, TypeError, cookieStore.set(
{ name: 'a',
value: 'x ' }));
cookie = await cookieStore.get(t.get[0]);
assert_equals(cookie, null);
}
await promise_rejects_js(testCase, TypeError, cookieStore.set(
{ name: 'a',
value: 'x ' }));
}, 'cookieStore.set with whitespace at begining or end');

View file

@ -3,8 +3,6 @@
<head>
<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>
</head>
<body>
<script>

View file

@ -3,8 +3,6 @@
<head>
<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>
</head>
<body>
<script>

View file

@ -2,8 +2,6 @@
<html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
</head>
<body>
<script>

View file

@ -1,2 +1,2 @@
suggested_reviewers:
- r12a
- xfq

View file

@ -6,10 +6,17 @@
<script src="/resources/testharnessreport.js"></script>
<style>
body { margin: 0; }
#cb {
position: relative;
width: 400px;
height: 100px;
border: 1px solid black;
}
#a1 {
anchor-name: --a1;
width: 100px;
height: 100px;
background: green;
}
#t1 {
position-anchor: --a1;
@ -20,13 +27,16 @@
position-try-fallbacks: --right;
width: 200px;
height: 100px;
background: cyan;
}
@position-try --right {
position-area: right;
}
</style>
<div id="a1"></div>
<div id="t1"></div>
<div id="cb">
<div id="a1"></div>
<div id="t1"></div>
</div>
<script>
test(() => {
assert_equals(t1.offsetLeft, 100, "Positioned using --right fallback");

View file

@ -0,0 +1,54 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Tests getComputedStyle() for inset properties using position-area</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1">
<link rel="help" href="https://drafts.csswg.org/cssom/#resolved-value">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#container {
position: relative;
width: 300px;
height: 300px;
}
#anchor {
anchor-name: --a;
margin-left: 80px;
margin-top: 130px;
width: 100px;
height: 100px;
}
.anchored {
position: absolute;
position-anchor: --a;
position-area: center center;
}
#t1 {
inset: 10px;
}
#t2 {
inset: auto;
}
</style>
<div id="container">
<div id="anchor"></div>
<div id="t1" class="anchored"></div>
<div id="t2" class="anchored"></div>
</div>
<script>
test(() => {
const style = getComputedStyle(t1);
assert_equals(style.top, "10px");
assert_equals(style.left, "10px");
assert_equals(style.bottom, "10px");
assert_equals(style.right, "10px");
}, "position-area does not affect resolved inset properties");
test(() => {
const style = getComputedStyle(t2);
assert_equals(style.top, "0px");
assert_equals(style.left, "0px");
assert_equals(style.bottom, "0px");
assert_equals(style.right, "0px");
}, "'auto' inset properties resolve to 0px when position-area is non-initial");
</script>

View file

@ -0,0 +1,38 @@
<!DOCTYPE html>
<title>Implicit anchor element for pseudo-elements using anchor functions - dynamic change</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#implicit">
<link rel="match" href="position-area-pseudo-element-implicit-anchor-ref.html">
<style>
body { margin: 0 }
#target {
margin-top: 200px;
margin-left: 200px;
width: 100px;
height: 100px;
background: blue;
}
#target::before, #target::after {
width: 100px;
height: 100px;
position: absolute;
}
#target.moved {
margin-top: 100px;
margin-left: 50px;
}
#target::before {
position-area: center right;
background: green;
content:'';
}
#target::after {
position-area: bottom center;
background: green;
content:'';
}
</style>
<div id=target></div>
<script>
target.offsetTop;
target.classList.add("moved");
</script>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<title>CSS Test Reference</title>
<style>
body { margin: 0 }
#target {
margin-top: 100px;
margin-left: 50px;
width: 100px;
height: 100px;
background: blue;
position: relative;
}
#target > div {
position: absolute;
width: 100px;
height: 100px;
background: green;
}
#bottom {
top: 100px;
left: 0px;
}
#right {
top: 0px;
left: 100px;
}
</style>
<div id=target>
<div id=bottom></div>
<div id=right></div>
</div>

View file

@ -1,8 +1,7 @@
<!DOCTYPE html>
<title>Implicit anchor element for pseudo-elements using anchor functions</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#implicit">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="match" href="position-area-pseudo-element-implicit-anchor-ref.html">
<style>
body { margin: 0 }
#target {
@ -17,10 +16,6 @@ body { margin: 0 }
height: 100px;
position: absolute;
}
#target.moved {
margin-top: 200px;
margin-left: 200px;
}
#target::before {
position-area: center right;
background: green;
@ -33,19 +28,3 @@ body { margin: 0 }
}
</style>
<div id=target></div>
<script>
test(() => {
assert_equals(getComputedStyle(target, '::before').top, '100px');
assert_equals(getComputedStyle(target, '::before').left, '150px');
assert_equals(getComputedStyle(target, '::after').top, '200px');
assert_equals(getComputedStyle(target, '::after').left, '50px');
}, "The implicit anchor element of a pseudo-element is its originating element");
test(() => {
target.classList.add("moved");
assert_equals(getComputedStyle(target, '::before').top, '200px');
assert_equals(getComputedStyle(target, '::before').left, '300px');
assert_equals(getComputedStyle(target, '::after').top, '300px');
assert_equals(getComputedStyle(target, '::after').left, '200px');
}, "Anchored position after moving");
</script>

View file

@ -97,7 +97,6 @@ const properties = [
"-moz-transition-property",
"-moz-transition-timing-function",
"-moz-user-focus",
"-moz-user-input",
"-moz-user-modify",
"-moz-user-select",
"-moz-window-dragging",

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>size-contained elements should still ignore children, even with an aspect-ratio</title>
<link rel="author" title="Psychpsyo" href="psychpsyo@gmail.com">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
#outer {
position: relative;
}
#bottom {
container-type: size;
aspect-ratio: 1;
background-color: red;
width: 100px;
}
#top {
position: absolute;
top: 0;
left: 0;
background-color: green;
width: 100px;
height: 100px;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="outer">
<div id="bottom">
<img height="200">
</div>
<div id="top"></div>
</div>

View file

@ -1,5 +1,5 @@
spec: https://drafts.csswg.org/css-counter-styles/
suggested_reviewers:
- r12a
- xfq
- svgeesus
- tabatkins

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>gap decorations column-rule-color neutral keyframe</title>
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
<meta name="assert" content="gap decorations column-rule-color value list supports neutral keyframe.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
</head>
<body>
<div id="target"></div>
<script>
test(() => {
target.style.rowRuleStyle = 'solid';
target.style.rowRuleColor = 'repeat(3, black black) repeat(1, red)';
var animation = target.animate([{}, {rowRuleColor: 'repeat(3, red red) repeat(1, black)'}], 1000);
animation.pause();
animation.currentTime = 500;
assert_equals(getComputedStyle(target).rowRuleColor, 'repeat(3, rgb(128, 0, 0) rgb(128, 0, 0)) repeat(1, rgb(128, 0, 0))');
}, 'gap decorations row-rule-color value list supports neutral keyframe.');
</script>
</body>
</html>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>gap decorations column-rule-color neutral keyframe</title>
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
<meta name="assert" content="gap decorations column-rule-color value list supports neutral keyframe.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
</head>
<body>
<div id="target"></div>
<script>
test(() => {
target.style.rowRuleStyle = 'solid';
target.style.rowRuleColor = 'repeat(3, black black) red red';
var animation = target.animate([{}, {rowRuleColor: 'repeat(3, red red) black black'}], 1000);
animation.pause();
animation.currentTime = 500;
assert_equals(getComputedStyle(target).rowRuleColor, 'repeat(3, rgb(128, 0, 0) rgb(128, 0, 0)) rgb(128, 0, 0) rgb(128, 0, 0)');
}, 'gap decorations row-rule-color value list supports neutral keyframe.');
</script>
</body>
</html>

View file

@ -0,0 +1,49 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS gap color change computed value to non compatible value mid-animation</title>
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/web-animations/testcommon.js"></script>
<style>
#target {
column-rule-color: blue;
animation: color-anim 2s linear paused;
}
@keyframes color-anim {
from { column-rule-color: red; }
}
</style>
</head>
<body>
<div id="target">Dynamic Gap-Color Test</div>
<script>
promise_test(async () => {
const el = document.getElementById('target');
const anim = el.getAnimations()[0];
assert_equals(getComputedStyle(el).columnRuleColor, 'rgb(255, 0, 0)');
// Jump to 50% of the animation.
anim.currentTime = anim.effect.getComputedTiming().duration / 2;
const intermediate = getComputedStyle(el).columnRuleColor;
assert_equals(
intermediate,
'rgb(128, 0, 128)' // The color at 50% of the animation.
);
el.style.columnRuleColor = 'repeat(2, red)';
const snapped = getComputedStyle(el).columnRuleColor;
assert_equals(
snapped,
'repeat(2, rgb(255, 0, 0))'
);
});
</script>
</body>
</html>

View file

@ -0,0 +1,49 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS gap color change computed value to compatible value mid-animation</title>
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/web-animations/testcommon.js"></script>
<style>
#target {
column-rule-color: blue blue;
animation: color-anim 2s linear paused;
}
@keyframes color-anim {
from { column-rule-color: red; }
}
</style>
</head>
<body>
<div id="target">Dynamic Gap-Color Test</div>
<script>
promise_test(async () => {
const el = document.getElementById('target');
const anim = el.getAnimations()[0];
assert_equals(getComputedStyle(el).columnRuleColor, 'rgb(255, 0, 0)');
// Jump to 50% of the animation.
anim.currentTime = anim.effect.getComputedTiming().duration / 2;
const snapped = getComputedStyle(el).columnRuleColor;
assert_equals(
snapped,
'rgb(0, 0, 255) rgb(0, 0, 255)'
);
el.style.columnRuleColor = 'blue';
const intermediate = getComputedStyle(el).columnRuleColor;
assert_equals(
intermediate,
'rgb(128, 0, 128)' // The color at 50% of the animation.
);
});
</script>
</body>
</html>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html class="test-wait">
<title>rule-color interpolation</title>
<link rel="author" title="Kevin Ellis" href="mailto:kevers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
<style>
#target {
animation: anim 1s paused;
}
@keyframes anim {
from {
column-rule-color: green;
}
}
</style>
<script>
async function runTest() {
requestAnimationFrame(async () => {
const anim = document.getAnimations()[0];
await anim.ready;
document.body.style.zoom = 2;
requestAnimationFrame(() => {
document.documentElement.classList.remove('test-wait');
});
});
}
window.onload = runTest();
</script>
<body>
<div id="target">Hello world</div>
</body>
</html>

View file

@ -0,0 +1,59 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>rule-color interpolation</title>
<link rel="author" title="Javier Contreras" href="mailto:javiercon@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
row-rule-style: solid;
row-rule-color: white;
}
.target {
display: flex;
row-gap: 10px;
row-rule-width: 10px;
row-rule-style: solid;
row-rule-color: black black black;
flex-wrap: wrap;
column-rule-color: 10px;
column-rule-style: solid;
column-rule-color: black red blue;
}
</style>
</head>
<body>
<script>
test_interpolation({
property: 'row-rule-color',
from: neutralKeyframe,
to: 'red red red',
}, [
{ at: -0.3, expect: 'black black black' },
{ at: 0, expect: 'black black black' },
{ at: 0.3, expect: 'rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)' },
{ at: 0.6, expect: 'rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)' },
{ at: 1, expect: 'red red red' },
{ at: 1.5, expect: 'red red red' },
]);
test_interpolation({
property: 'column-rule-color',
from: neutralKeyframe,
to: 'red blue red',
}, [
{ at: -0.3, expect: 'black red blue' },
{ at: 0, expect: 'black red blue' },
{ at: 0.3, expect: 'rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)' },
{ at: 0.6, expect: 'rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)' },
{ at: 1, expect: 'red blue red' },
{ at: 1.5, expect: 'red blue red' },
]);
</script>
</body>
</html>

View file

@ -0,0 +1,121 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>rule-color interpolation with repeaters</title>
<link rel="author" title="Javier Contreras" href="mailto:javiercon@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
row-rule-style: solid;
row-rule-color: white;
}
.target {
row-gap: 40px;
column-gap: 40px;
row-rule-width: 10px;
row-rule-style: solid;
row-rule-color: black repeat(2, red blue) black;
flex-wrap: wrap;
column-rule-width: 10px;
column-rule-style: solid;
column-rule-color: repeat(2, black red);
}
</style>
</head>
<body>
<script>
// Valid Interpolations:
test_interpolation({
property: 'row-rule-color',
from: neutralKeyframe,
to: 'red repeat(2, black black) blue',
}, [
{ at: -0.3, expect: 'black repeat(2, red blue) black' },
{ at: 0, expect: 'black repeat(2, red blue) black' },
{ at: 0.3, expect: 'rgb(77, 0, 0) repeat(2, rgb(179, 0, 0) rgb(0, 0, 179)) rgb(0, 0, 77)' },
{ at: 0.6, expect: 'rgb(153, 0, 0) repeat(2, rgb(102, 0, 0) rgb(0, 0, 102)) rgb(0, 0, 153)' },
{ at: 1, expect: 'rgb(255, 0, 0) repeat(2, rgb(0, 0, 0) rgb(0, 0, 0)) rgb(0, 0, 255)' },
{ at: 1.5, expect: 'rgb(255, 0, 0) repeat(2, rgb(0, 0, 0) rgb(0, 0, 0)) rgb(0, 0, 255)' },
]);
test_interpolation({
property: 'column-rule-color',
from: neutralKeyframe,
to: 'repeat(2, red black)',
}, [
{ at: -0.3, expect: 'repeat(2, black red)' },
{ at: 0, expect: 'repeat(2, black red)' },
{ at: 0.3, expect: 'repeat(2, rgb(77, 0, 0) rgb(179, 0, 0))' },
{ at: 0.6, expect: 'repeat(2, rgb(153, 0, 0) rgb(102, 0, 0))' },
{ at: 1, expect: 'repeat(2, red black)' },
{ at: 1.5, expect: 'repeat(2, red black)' },
]);
test_interpolation({
property: 'column-rule-color',
from: 'repeat(auto, black black)',
to: 'repeat(auto, blue red)',
}, [
{ at: -0.3, expect: 'repeat(auto, black black)' },
{ at: 0, expect: 'repeat(auto, black black)' },
{ at: 0.3, expect: 'repeat(auto, rgb(0, 0, 77) rgb(77, 0, 0))' },
{ at: 0.6, expect: 'repeat(auto, rgb(0, 0, 153) rgb(153, 0, 0))' },
{ at: 1, expect: 'repeat(auto, rgb(0, 0, 255) rgb(255, 0, 0))' },
{ at: 1.5, expect: 'repeat(auto, rgb(0, 0, 255) rgb(255, 0, 0)' },
]);
// // Shouldn't interpolate, length of the list is different:
test_no_interpolation({
property: 'row-rule-color',
from: neutralKeyframe,
to: 'repeat(2, blue blue) white',
});
test_no_interpolation({
property: 'row-rule-color',
from: neutralKeyframe,
to: 'repeat(2, red red) repeat(2, blue blue)',
});
// // Shouldn't interpolate, repeaters are not compatible:
test_no_interpolation({
property: 'column-rule-color',
from: neutralKeyframe,
to: 'repeat(3, white white)',
});
test_no_interpolation({
property: 'column-rule-color',
from: neutralKeyframe,
to: 'repeat(2, yellow orange green)',
});
test_no_interpolation({
property: 'row-rule-color',
from: neutralKeyframe,
to: 'black repeat(3, red white) blue',
});
test_no_interpolation({
property: 'row-rule-color',
from: neutralKeyframe,
to: 'white repeat(2, blue blue blue) yellow',
});
test_no_interpolation({
property: 'column-rule-color',
from: 'repeat(auto, red black)',
to: 'repeat(3, black red)',
});
test_no_interpolation({
property: 'column-rule-color',
from: 'repeat(auto, black black)',
to: 'repeat(auto, red white yellow)',
});
// // Shouldn't interpolate, repeater and a color are not compatible:
test_no_interpolation({
property: 'column-rule-color',
from: neutralKeyframe,
to: 'white',
});
</script>
</body>

View file

@ -0,0 +1,50 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS gap width change computed value to non compatible value mid-animation</title>
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-width">
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/web-animations/testcommon.js"></script>
<style>
#target {
column-rule-width: 10px;
column-rule-style: solid;
animation: color-anim 2s linear paused;
}
@keyframes color-anim {
from { column-rule-width: 0px; }
}
</style>
</head>
<body>
<div id="target">Dynamic Gap-Width Test</div>
<script>
promise_test(async () => {
const el = document.getElementById('target');
const anim = el.getAnimations()[0];
assert_equals(getComputedStyle(el).columnRuleWidth, '0px');
// Jump to 50% of the animation.
anim.currentTime = anim.effect.getComputedTiming().duration / 2;
const intermediate = getComputedStyle(el).columnRuleWidth;
assert_equals(
intermediate,
'5px' // The width at 50% of the animation.
);
el.style.columnRuleWidth = 'repeat(2, 10px)';
const snapped = getComputedStyle(el).columnRuleWidth;
assert_equals(
snapped,
'repeat(2, 10px)'
);
});
</script>
</body>
</html>

View file

@ -0,0 +1,50 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS gap width change computed value to non compatible value mid-animation</title>
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-width">
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/web-animations/testcommon.js"></script>
<style>
#target {
column-rule-width: 10px 10px;
column-rule-style: solid;
animation: color-anim 2s linear paused;
}
@keyframes color-anim {
from { column-rule-width: 0px; }
}
</style>
</head>
<body>
<div id="target">Dynamic Gap-Width Test</div>
<script>
promise_test(async () => {
const el = document.getElementById('target');
const anim = el.getAnimations()[0];
assert_equals(getComputedStyle(el).columnRuleWidth, '0px');
// Jump to 50% of the animation.
anim.currentTime = anim.effect.getComputedTiming().duration / 2;
const snapped = getComputedStyle(el).columnRuleWidth;
assert_equals(
snapped,
'10px 10px'
);
el.style.columnRuleWidth = '10px';
const intermediate = getComputedStyle(el).columnRuleWidth;
assert_equals(
intermediate,
'5px'
);
});
</script>
</body>
</html>

View file

@ -21,7 +21,7 @@
column-rule-style: solid;
column-rule-color: red;
column-rule-width: 2px;
gap-rule-paint-order: column-over-row;
gap-rule-overlap: column-over-row;
width: 170px;
flex-wrap: wrap;
}

View file

@ -25,7 +25,7 @@
row-rule-style: solid;
row-rule-color: blue;
row-rule-width: 10px;
gap-rule-paint-order: column-over-row;
gap-rule-overlap: column-over-row;
}
.items {

View file

@ -25,7 +25,7 @@
row-rule-style: solid;
row-rule-color: blue;
row-rule-width: 10px;
gap-rule-paint-order: column-over-row;
gap-rule-overlap: column-over-row;
}
.items {

View file

@ -25,7 +25,7 @@
row-rule-width: 5px;
column-rule-break: none;
row-rule-break: none;
gap-rule-paint-order: column-over-row;
gap-rule-overlap: column-over-row;
}
.grid-item {
background-color: gray;

View file

@ -21,7 +21,7 @@
column-rule: skyblue solid 10px;
row-rule: cornflowerblue solid 10px;
gap-rule-paint-order: row-over-column;
gap-rule-overlap: row-over-column;
}
.subgrid {
@ -36,7 +36,7 @@
column-rule: green solid 10px;
row-rule: blue solid 10px;
gap-rule-paint-order: column-over-row;
gap-rule-overlap: column-over-row;
}
.item {

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Gaps: gap-rule-paint-order getComputedStyle()</title>
<title>CSS Gaps: gap-rule-overlap getComputedStyle()</title>
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
<script src="/resources/testharness.js"></script>
@ -13,8 +13,8 @@
<body>
<div id="target"></div>
<script>
test_computed_value("gap-rule-paint-order", "row-over-column");
test_computed_value("gap-rule-paint-order", "column-over-row");
test_computed_value("gap-rule-overlap", "row-over-column");
test_computed_value("gap-rule-overlap", "column-over-row");
</script>
</body>
</html>

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Gaps: parsing gap-rule-paint-order with invalid values</title>
<title>CSS Gaps: parsing gap-rule-overlap with invalid values</title>
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
<script src="/resources/testharness.js"></script>
@ -12,11 +12,11 @@
<body>
<div id="target"></div>
<script>
test_invalid_value('gap-rule-paint-order', 'auto');
test_invalid_value('gap-rule-paint-order', 'true');
test_invalid_value('gap-rule-paint-order', 'none');
test_invalid_value('gap-rule-paint-order', '10px');
test_invalid_value('gap-rule-paint-order', '10%');
test_invalid_value('gap-rule-overlap', 'auto');
test_invalid_value('gap-rule-overlap', 'true');
test_invalid_value('gap-rule-overlap', 'none');
test_invalid_value('gap-rule-overlap', '10px');
test_invalid_value('gap-rule-overlap', '10%');
</script>
</body>
</html>

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Gaps: parsing gap-rule-paint-order valid values</title>
<title>CSS Gaps: parsing gap-rule-overlap valid values</title>
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
<script src="/resources/testharness.js"></script>
@ -12,8 +12,8 @@
<body>
<div id="target"></div>
<script>
test_valid_value('gap-rule-paint-order', 'row-over-column');
test_valid_value('gap-rule-paint-order', 'column-over-row');
test_valid_value('gap-rule-overlap', 'row-over-column');
test_valid_value('gap-rule-overlap', 'column-over-row');
</script>
</body>
</html>

View file

@ -7,6 +7,7 @@
<meta charset="utf-8">
<title>Reference: Masonry layout with `align-content` in masonry axis</title>
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
<style>
html,body {
color:black; background-color:white; font:15px/1 monospace; padding:0; margin:0;
@ -30,6 +31,11 @@ item {
}
.tall { padding-top:30px; grid-row:span 2; }
.safe {
height: 10px;
}
</style>
</head>
<body>
@ -52,6 +58,15 @@ item {
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:safe start" class="safe">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
<item style="grid-column:3/4">3</item>
<item style="grid-column:4/5">4</item>
<item style="grid-column:2/3">5</item>
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:end">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
@ -70,6 +85,15 @@ item {
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:safe end" class="safe">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
<item style="grid-column:3/4">3</item>
<item style="grid-column:4/5">4</item>
<item style="grid-column:2/3">5</item>
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:center">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
@ -88,6 +112,15 @@ item {
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:safe center" class="safe">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
<item style="grid-column:3/4">3</item>
<item style="grid-column:4/5">4</item>
<item style="grid-column:2/3">5</item>
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:stretch">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>

View file

@ -11,6 +11,7 @@
in the masonry axis of a masonry grid container
and the grid container's baseline is also shifted accordingly.">
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-3/#alignment">
<link rel="match" href="masonry-align-content-001-ref.html">
<style>
@ -35,6 +36,9 @@ item {
color: #fff;
}
.safe {
height: 10px;
}
</style>
</head>
<body>
@ -57,6 +61,15 @@ item {
<item>6</item>
</grid>
<grid style="align-content:safe start" class="safe">
<item style="padding-top:30px">1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</grid>
<grid style="align-content:end">
<item style="padding-top:30px">1</item>
<item>2</item>
@ -75,6 +88,15 @@ item {
<item>6</item>
</grid>
<grid style="align-content:safe end" class="safe">
<item style="padding-top:30px">1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</grid>
<grid style="align-content:center">
<item style="padding-top:30px">1</item>
<item>2</item>
@ -93,6 +115,15 @@ item {
<item>6</item>
</grid>
<grid style="align-content:safe center" class="safe">
<item style="padding-top:30px">1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</grid>
<grid style="align-content:stretch">
<item style="padding-top:30px">1</item>
<item>2</item>

View file

@ -7,6 +7,7 @@
<meta charset="utf-8">
<title>Reference: Masonry layout with `align-content` in masonry axis</title>
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
<style>
html,body {
color:black; background-color:white; font:15px/1 monospace; padding:0; margin:0;
@ -31,6 +32,11 @@ item {
}
.tall { padding-right:30px; grid-row:span 2; }
.safe {
width: 10px;
margin-right: 50px;
}
</style>
</head>
<body>
@ -53,6 +59,15 @@ item {
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:safe start" class="safe">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
<item style="grid-column:3/4">3</item>
<item style="grid-column:4/5">4</item>
<item style="grid-column:2/3">5</item>
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:end">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
@ -71,6 +86,15 @@ item {
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:safe end" class="safe">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
<item style="grid-column:3/4">3</item>
<item style="grid-column:4/5">4</item>
<item style="grid-column:2/3">5</item>
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:center">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
@ -89,6 +113,15 @@ item {
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:safe center" class="safe">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>
<item style="grid-column:3/4">3</item>
<item style="grid-column:4/5">4</item>
<item style="grid-column:2/3">5</item>
<item style="grid-column:3/4">6</item>
</grid>
<grid style="align-content:stretch">
<item style="grid-column:1/2" class="tall">1</item>
<item style="grid-column:2/3">2</item>

View file

@ -10,6 +10,7 @@
content="Test passes if align-content shifts content
in the masonry axis of a vertical writing-mode masonry grid container.">
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-3/#alignment">
<link rel="match" href="masonry-align-content-002-ref.html">
<style>
@ -35,6 +36,11 @@ item {
color: #fff;
}
.safe {
width: 10px;
margin-right: 50px;
}
</style>
</head>
<body>
@ -57,6 +63,15 @@ item {
<item>6</item>
</grid>
<grid style="align-content:safe start" class="safe">
<item style="padding-right:30px">1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</grid>
<grid style="align-content:end">
<item style="padding-right:30px">1</item>
<item>2</item>
@ -75,6 +90,15 @@ item {
<item>6</item>
</grid>
<grid style="align-content:safe end" class="safe">
<item style="padding-right:30px">1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</grid>
<grid style="align-content:center">
<item style="padding-right:30px">1</item>
<item>2</item>
@ -93,6 +117,15 @@ item {
<item>6</item>
</grid>
<grid style="align-content:safe center" class="safe">
<item style="padding-right:30px">1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</grid>
<grid style="align-content:stretch">
<item style="padding-right:30px">1</item>
<item>2</item>

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