Sync WPT with upstream (13-04-2025) (#36488)

Automated downstream sync of changes from upstream as of 13-04-2025
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
This commit is contained in:
Servo WPT Sync 2025-04-13 04:52:15 +02:00 committed by GitHub
parent 85bd0918f2
commit 0c045fc247
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
296 changed files with 8510 additions and 3764 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,2 +0,0 @@
[mix-blend-mode-video-sibling.html]
expected: FAIL

View file

@ -79,3 +79,6 @@
[Property animation-trigger-exit-range-end value 'exit']
expected: FAIL
[Property animation-trigger-exit-range-end value 'auto']
expected: FAIL

View file

@ -70,3 +70,6 @@
[e.style['animation-trigger-exit-range-end'\] = "exit" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range-end'\] = "auto" should set the property value]
expected: FAIL

View file

@ -316,3 +316,54 @@
[e.style['animation-trigger-exit-range'\] = "10%" should not set unrelated longhands]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto auto" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "cover auto" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "cover 10% auto" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto cover" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto cover 90%" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "normal auto" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto normal" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto" should set animation-trigger-exit-range-end]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto" should set animation-trigger-exit-range-start]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto" should not set unrelated longhands]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "normal auto" should set animation-trigger-exit-range-end]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "normal auto" should set animation-trigger-exit-range-start]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "normal auto" should not set unrelated longhands]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto normal" should set animation-trigger-exit-range-end]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto normal" should set animation-trigger-exit-range-start]
expected: FAIL
[e.style['animation-trigger-exit-range'\] = "auto normal" should not set unrelated longhands]
expected: FAIL

View file

@ -79,3 +79,6 @@
[Property animation-trigger-exit-range-start value 'exit']
expected: FAIL
[Property animation-trigger-exit-range-start value 'auto']
expected: FAIL

View file

@ -73,3 +73,6 @@
[e.style['animation-trigger-exit-range-start'\] = "cover calc(sign(100em - 1px) * 1%)" should set the property value]
expected: FAIL
[e.style['animation-trigger-exit-range-start'\] = "auto" should set the property value]
expected: FAIL

View file

@ -0,0 +1,2 @@
[corner-shape-inset-shadow.html]
expected: FAIL

View file

@ -72,3 +72,9 @@
[corner-shape-render-fuzzy.html?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px&border-left-color=purple]
expected: FAIL
[corner-shape-render-fuzzy.html?border-radius=50%&corner-top-left-shape=scoop&corner-bottom-right-shape=scoop&corner-top-right-shape=notch&corner-bottom-left-shape=notch&border-width=10px]
expected: FAIL
[corner-shape-render-fuzzy.html?border-radius=50%&corner-top-right-shape=scoop&corner-bottom-left-shape=scoop&corner-top-left-shape=notch&corner-bottom-right-shape=notch&border-width=10px]
expected: FAIL

View file

@ -87,3 +87,6 @@
[corner-shape-render-precise.html?border-top-left-radius=50%&corner-shape=superellipse(0.7)&border-left-width=30px&border-top-width=30px]
expected: FAIL
[corner-shape-render-precise.html?corner-shape=superellipse(-2)&border-top-left-radius=40%&border-width=20px]
expected: FAIL

View file

@ -16,3 +16,21 @@
[Property masonry-slack value 'calc(0.5em + 10px)']
expected: FAIL
[Property item-tolerance value 'normal']
expected: FAIL
[Property item-tolerance value '10px']
expected: FAIL
[Property item-tolerance value '20%']
expected: FAIL
[Property item-tolerance value 'calc(20% + 10px)']
expected: FAIL
[Property item-tolerance value 'calc(-0.5em + 10px)']
expected: FAIL
[Property item-tolerance value 'calc(0.5em + 10px)']
expected: FAIL

View file

@ -16,3 +16,21 @@
[e.style['masonry-slack'\] = "5vmin" should set the property value]
expected: FAIL
[e.style['item-tolerance'\] = "normal" should set the property value]
expected: FAIL
[e.style['item-tolerance'\] = "0" should set the property value]
expected: FAIL
[e.style['item-tolerance'\] = "1px" should set the property value]
expected: FAIL
[e.style['item-tolerance'\] = "calc(2em + 3ex)" should set the property value]
expected: FAIL
[e.style['item-tolerance'\] = "4%" should set the property value]
expected: FAIL
[e.style['item-tolerance'\] = "5vmin" should set the property value]
expected: FAIL

View file

@ -0,0 +1,2 @@
[scroll-marker-contain-009.tentative.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[scroll-marker-contain-010.tentative.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[scroll-marker-contain-011.tentative.html]
expected: FAIL

View file

@ -4,3 +4,6 @@
[Comments are handled correctly when computing var(--t1)b using t1:a/* comment */.]
expected: FAIL
[Comments are handled correctly when computing var(--t1)b using t1:'a " '/* comment */.]
expected: FAIL

View file

@ -0,0 +1,3 @@
[getBoundingClientRect-newline.html]
[Range.getBoundingClientRect() should return the first position of the next line when the collapsed range is a newline character]
expected: FAIL

View file

@ -19,3 +19,12 @@
[initialize is no-op on a subtree with a non-null registry]
expected: FAIL
[initialize sets element.customElementRegistry to the global registry]
expected: FAIL
[initialize sets element.customElementRegistry to a scoped registry]
expected: FAIL
[initialize sets element.customElementRegistry permantently]
expected: FAIL

View file

@ -0,0 +1,12 @@
[Document-customElementRegistry.html]
[customElementRegistry on a document should return window.customElements by default]
expected: FAIL
[customElementRegistry on a document without a browsing context should return null]
expected: FAIL
[customElementRegistry on a document of a connected iframe should return contentWindow.customElements]
expected: FAIL
[customElementRegistry on a document of a disconnected iframe should return contentWindow.customElements]
expected: FAIL

View file

@ -0,0 +1,6 @@
[Element-customElementRegistry-exceptions.tentative.html]
[customElementRegistry on a failed custom element created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL
[customElementRegistry on a failed custom element created by setting innerHTML should return the associated scoped registry]
expected: FAIL

View file

@ -0,0 +1,30 @@
[Element-customElementRegistry.tentative.html]
[customElementRegistry on a newly constrcuted element should return window.customElements by default]
expected: FAIL
[customElementRegistry on an element inside a declarative shadow DOM should return window.customElements by default]
expected: FAIL
[customElementRegistry on an element inside a declarative shadow DOM with shadowrootcustomelementregistry should return null]
expected: FAIL
[customElementRegistry on a clone of a declarative shadow tree with shadowrootcustomelementregistry should return null]
expected: FAIL
[customElementRegistry on a clone of a declarative shadow tree with shadowrootcustomelementregistry should return the global registry after getting inserted into a document]
expected: FAIL
[customElementRegistry on an element inside a declarative shadow DOM with shadowrootcustomelementregistry should return the scoped registry after calling initialize]
expected: FAIL
[customElementRegistry on a builtin element created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL
[customElementRegistry on an upgarde candidate created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL
[customElementRegistry on an unknown element created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL
[customElementRegistry on a defined custom element created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL

View file

@ -1,6 +0,0 @@
[Element-customElements-exceptions.tentative.html]
[customElements on a failed custom element created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL
[customElements on a failed custom element created by setting innerHTML should return the associated scoped registry]
expected: FAIL

View file

@ -1,30 +0,0 @@
[Element-customElements.tentative.html]
[customElements on a newly constrcuted element should return window.customElements by default]
expected: FAIL
[customElements on an element inside a declarative shadow DOM should return window.customElements by default]
expected: FAIL
[customElements on an element inside a declarative shadow DOM with shadowrootcustomelements should return null]
expected: FAIL
[customElements on a clone of a declarative shadow tree with shadowrootcustomelements should return null]
expected: FAIL
[customElements on a clone of a declarative shadow tree with shadowrootcustomelements should return the global registry after getting inserted into a document]
expected: FAIL
[customElements on an element inside a declarative shadow DOM with shadowrootcustomelements should return the scoped registry after calling initialize]
expected: FAIL
[customElements on a builtin element created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL
[customElements on an upgarde candidate created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL
[customElements on an unknown element created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL
[customElements on a defined custom element created by calling createElement on CustomElementRegistry should return the registry]
expected: FAIL

View file

@ -1,4 +1,4 @@
[ShadowRoot-init-customElements.tentative.html]
[ShadowRoot-init-customElementRegistry.tentative.html]
[A newly attached disconnected ShadowRoot should use the global registry by default]
expected: FAIL
@ -10,3 +10,6 @@
[A newly attached connected ShadowRoot should use the scoped registry if explicitly specified in attachShadow]
expected: FAIL
[attachShadow() should throw for a null customElementRegistry value]
expected: FAIL

View file

@ -0,0 +1,3 @@
[initial-about-blank.tentative.window.html]
[Each navigable document has its own registry]
expected: FAIL

View file

@ -7,3 +7,6 @@
[Serializing a ShadowRoot with a registry that differs from its host]
expected: FAIL
[shadowRootCustomElementRegistry reflects as string]
expected: FAIL

View file

@ -1,3 +0,0 @@
[CustomElementRegistry-constructor.tentative.html]
[Create non-global CustomElementRegistry and add definitions]
expected: FAIL

View file

@ -1,12 +0,0 @@
[ShadowRoot-createElement.tentative.html]
[ShadowRoot.createElement() for autonomous custom element]
expected: FAIL
[ShadowRoot.createElementNS() for autonomous custom element]
expected: FAIL
[ShadowRoot.createElement() for customized built-in element]
expected: FAIL
[ShadowRoot.createElementNS() for customized built-in element]
expected: FAIL

View file

@ -1,9 +0,0 @@
[ShadowRoot-importNode.tentative.html]
[ShadowRoot.importNode: an upgrade candidate from document]
expected: FAIL
[ShadowRoot.importNode: a custom element from another shadow tree]
expected: FAIL
[ShadowRoot.importNode: a template content from document]
expected: FAIL

View file

@ -1,15 +0,0 @@
[ShadowRoot-init-registry.tentative.html]
[ShadowRoot.registry is null if not explicitly specified]
expected: FAIL
[Attach the global registry to a shadow root]
expected: FAIL
[Attach a non-global registry to a shadow root]
expected: FAIL
[Attach the same registry to multiple shadow roots]
expected: FAIL
[Attaching registry to shadow root can only be done during initialization]
expected: FAIL

View file

@ -1,15 +0,0 @@
[ShadowRoot-innerHTML-upgrade.tentative.html]
[Upgrade into autonomous custom element when inserted via innerHTML]
expected: FAIL
[Upgrade into autonomous custom element when definition is added]
expected: FAIL
[Upgrade into customized built-in element when inserted via innerHTML]
expected: FAIL
[Upgrade into customized built-in element when definition is added]
expected: FAIL
[Upgrade into autonomous custom element should not inherit from global registry for missing values]
expected: FAIL

View file

@ -1,15 +0,0 @@
[ShadowRoot-innerHTML.tentative.html]
[innerHTML on a shadow root should use scoped custom element registry]
expected: FAIL
[innerHTML on a disconnected element should use the associated scoped custom element registry]
expected: FAIL
[innerHTML on a connected shadow root should use its scoped custom element]
expected: FAIL
[innerHTML on an inserted element should use the scoped custom element of the ancestor shadow root]
expected: FAIL
[innerHTML should not upgrade a custom element inside a template element]
expected: FAIL

View file

@ -1,6 +0,0 @@
[constructor-call.tentative.html]
[Calling custom element constructor directly without global registration should fail]
expected: FAIL
[Calling custom element constructor directly uses global registration only]
expected: FAIL

View file

@ -64,3 +64,6 @@
[Check children were included for void elements]
expected: FAIL
[Check if a prefix bound to an empty namespace URI ("no namespace") serialize]
expected: FAIL

View file

@ -26,3 +26,6 @@
[sec-fetch-user - no options - updating]
expected: NOTRUN
[sec-fetch-site - Same origin, no options - registration]
expected: FAIL

View file

@ -1,24 +0,0 @@
[fenced-frame-no-preflight-required.tentative.https.window.html]
[local to local: no preflight required.]
expected: FAIL
[local to private: no preflight required.]
expected: FAIL
[local to public: no preflight required.]
expected: FAIL
[private to private: no preflight required.]
expected: FAIL
[private to public: no preflight required.]
expected: FAIL
[public to public: no preflight required.]
expected: FAIL
[treat-as-public-address to public: no preflight required.]
expected: FAIL
[treat-as-public-address to local: optional preflight]
expected: FAIL

View file

@ -1,120 +0,0 @@
[fenced-frame-subresource-fetch.tentative.https.window.html?include=from-public]
[public to local: failed preflight.]
expected: FAIL
[public to local: missing CORS headers on preflight response.]
expected: FAIL
[public to local: missing PNA header on preflight response.]
expected: FAIL
[public to local: missing CORS headers on final response.]
expected: FAIL
[public to local: success.]
expected: FAIL
[public to local: PUT success.]
expected: FAIL
[public to local: no-CORS mode failed preflight.]
expected: FAIL
[public to local: no-CORS mode missing CORS headers on preflight response.]
expected: FAIL
[public to local: no-CORS mode missing PNA header on preflight response.]
expected: FAIL
[public to local: no-CORS mode success.]
expected: FAIL
[public to private: failed preflight.]
expected: FAIL
[public to private: missing CORS headers on preflight response.]
expected: FAIL
[public to private: missing PNA header on preflight response.]
expected: FAIL
[public to private: missing CORS headers on final response.]
expected: FAIL
[public to private: success.]
expected: FAIL
[public to private: PUT success.]
expected: FAIL
[public to private: no-CORS mode failed preflight.]
expected: FAIL
[public to private: no-CORS mode missing CORS headers on preflight response.]
expected: FAIL
[public to private: no-CORS mode missing PNA header on preflight response.]
expected: FAIL
[public to private: no-CORS mode success.]
expected: FAIL
[public to public: no preflight required.]
expected: FAIL
[fenced-frame-subresource-fetch.tentative.https.window.html?include=baseline]
[local to public: PUT preflight failure.]
expected: FAIL
[local to public: PUT preflight success.]
expected: FAIL
[fenced-frame-subresource-fetch.tentative.https.window.html?include=from-private]
[private to local: failed preflight.]
expected: FAIL
[private to local: missing CORS headers on preflight response.]
expected: FAIL
[private to local: missing PNA header on preflight response.]
expected: FAIL
[private to local: missing CORS headers on final response.]
expected: FAIL
[private to local: success.]
expected: FAIL
[private to local: PUT success.]
expected: FAIL
[private to local: no-CORS mode failed preflight.]
expected: FAIL
[private to local: no-CORS mode missing CORS headers on preflight response.]
expected: FAIL
[private to local: no-CORS mode missing PNA header on preflight response.]
expected: FAIL
[private to local: no-CORS mode success.]
expected: FAIL
[private to private: no preflight required.]
expected: FAIL
[private to public: no preflight required.]
expected: FAIL
[fenced-frame-subresource-fetch.tentative.https.window.html?include=from-local]
[local to local: no preflight required.]
expected: FAIL
[local to private: no preflight required.]
expected: FAIL
[local to public: no preflight required.]
expected: FAIL

View file

@ -1,63 +0,0 @@
[fenced-frame.tentative.https.window.html]
[private to local: failed preflight.]
expected: FAIL
[private to local: missing CORS headers.]
expected: FAIL
[private to local: missing PNA header.]
expected: FAIL
[private to local: failed because fenced frames are incompatible with PNA.]
expected: FAIL
[public to local: failed preflight.]
expected: FAIL
[public to local: missing CORS headers.]
expected: FAIL
[public to local: missing PNA header.]
expected: FAIL
[public to local: failed because fenced frames are incompatible with PNA.]
expected: FAIL
[public to private: failed preflight.]
expected: FAIL
[public to private: missing CORS headers.]
expected: FAIL
[public to private: missing PNA header.]
expected: FAIL
[public to private: failed because fenced frames are incompatible with PNA.]
expected: FAIL
[treat-as-public-address to local: failed preflight.]
expected: FAIL
[treat-as-public-address to local: missing CORS headers.]
expected: FAIL
[treat-as-public-address to local: missing PNA header.]
expected: FAIL
[treat-as-public-address to local: failed because fenced frames are incompatible with PNA.]
expected: FAIL
[treat-as-public-address to local (same-origin): fenced frame embedder initiated navigation has opaque origin.]
expected: FAIL
[treat-as-public-address to private: failed preflight.]
expected: FAIL
[treat-as-public-address to private: missing CORS headers.]
expected: FAIL
[treat-as-public-address to private: missing PNA header.]
expected: FAIL
[treat-as-public-address to private: failed because fenced frames are incompatible with PNA.]
expected: FAIL

View file

@ -1,2 +0,0 @@
[order-in-prerender-activation.html]
expected: ERROR

View file

@ -0,0 +1,2 @@
[order-in-prerender-activation.https.html]
expected: ERROR

View file

@ -4,3 +4,6 @@
[link click]
expected: FAIL
[form submission]
expected: FAIL

View file

@ -0,0 +1,3 @@
[navigation-unload-cross-origin.sub.window.html]
[Cross-origin navigation started from unload handler must be ignored]
expected: FAIL

View file

@ -1,2 +0,0 @@
[2d.canvas.host.size.large.html]
expected: CRASH

View file

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

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.p3.rgba.unorm8.html]
[Verify round-trip of 8-bit P3 data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.srgb.rgba.float16.html]
[Verify round-trip of 16-bit float sRGB data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.srgb.rgba.unorm8.html]
[Verify round-trip of 8-bit sRGB data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.object.ctor.pixelFormat.html]
[Testing ImageData constructor pixelFormat behaviors]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.object.properties.html]
[ImageData objects have the right properties]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.put.basic.rgba.float16.html]
[putImageData() puts 16-bit floating point image data from getImageData() onto the canvas]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.p3.rgba.unorm8.html]
[Verify round-trip of 8-bit P3 data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.p3.rgba.unorm8.worker.html]
[Verify round-trip of 8-bit P3 data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.srgb.rgba.float16.html]
[Verify round-trip of 16-bit float sRGB data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.srgb.rgba.float16.worker.html]
[Verify round-trip of 16-bit float sRGB data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.srgb.rgba.unorm8.html]
[Verify round-trip of 8-bit sRGB data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.createImageBitmap.srgb.rgba.unorm8.worker.html]
[Verify round-trip of 8-bit sRGB data ImageData through ImageBitmap]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.object.properties.html]
[ImageData objects have the right properties]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.object.properties.worker.html]
[ImageData objects have the right properties]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.put.basic.rgba.float16.html]
[putImageData() puts 16-bit floating point image data from getImageData() onto the canvas]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.imageData.put.basic.rgba.float16.worker.html]
[putImageData() puts 16-bit floating point image data from getImageData() onto the canvas]
expected: FAIL

View file

@ -200,6 +200,9 @@
[OffscreenCanvasRenderingContext2D interface: attribute lang]
expected: FAIL
[ImageData interface: attribute pixelFormat]
expected: FAIL
[idlharness.any.shadowrealm-in-window.html]
expected: ERROR

View file

@ -5807,6 +5807,12 @@
[OffscreenCanvasRenderingContext2D interface: attribute lang]
expected: FAIL
[ImageData interface: attribute pixelFormat]
expected: FAIL
[ImageData interface: new ImageData(10, 10) must inherit property "pixelFormat" with the proper type]
expected: FAIL
[idlharness.https.html?include=HTML.+]
[HTMLAllCollection interface: existence and properties of interface object]

View file

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

View file

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

View file

@ -0,0 +1,3 @@
[form-submit-iframe-then-location-navigate.html]
[Verifies that location navigations take precedence when following form submissions.]
expected: FAIL

View file

@ -1,4 +0,0 @@
[jsurl-form-submit.tentative.html]
[Verifies that form submissions scheduled inside javascript: urls take precedence over the javascript: url's return value.]
expected: FAIL

View file

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

View file

@ -196,3 +196,9 @@
[Web Animations: property <interest-target-hide-delay> from [1s\] to [2000ms\] at (1.5) should be [2.5s\]]
expected: FAIL
[e.style['interest-target-show-delay'\] = "calc(2s * sibling-index())" should set the property value]
expected: FAIL
[e.style['interest-target-hide-delay'\] = "calc(2s * sibling-index())" should set the property value]
expected: FAIL

View file

@ -19,3 +19,12 @@
[Reload domContentLoadedEventEnd > Original domContentLoadedEventEnd]
expected: FAIL
[Reload domComplete > Original domComplete]
expected: FAIL
[Reload loadEventEnd > Original loadEventEnd]
expected: FAIL
[Reload loadEventStart > Original loadEventStart]
expected: FAIL

View file

@ -1,3 +0,0 @@
[eventloop.html]
[test0: multiple notifications inside same event loop]
expected: FAIL

View file

@ -108,6 +108,21 @@
[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

@ -0,0 +1,3 @@
[scroll-restore-shadow.html]
[Scroll position restore on shadow tree]
expected: FAIL

View file

@ -32,3 +32,18 @@
[directive "require-trusted-types-for unquoted-invalid 'script' also-unquoted-invalid (unknown sink group)]
expected: NOTRUN
[directive "require-trusted-types-for 'invalid'%09'script'" (required-ascii-whitespace)]
expected: NOTRUN
[directive "require-trusted-types-for 'invalid'%0A%20'script'" (required-ascii-whitespace)]
expected: NOTRUN
[directive "require-trusted-types-for 'invalid'%0C'script'" (required-ascii-whitespace)]
expected: NOTRUN
[directive "require-trusted-types-for 'invalid'%0D'script'" (required-ascii-whitespace)]
expected: NOTRUN
[directive "require-trusted-types-for 'invalid'%20'script'" (required-ascii-whitespace)]
expected: NOTRUN

View file

@ -59,3 +59,9 @@
[invalid directive "trusted-type _TTP" (no ascii whitespace)]
expected: NOTRUN
[non-ASCII trusted-types directives are discarded ("política")]
expected: NOTRUN
[directive "trusted-type _TTP1_%09_TTP2_%0A%20_TTP3_%0C_TTP4_%0D_TTP5_%20_TTP6_" (required-ascii-whitespace)]
expected: NOTRUN

View file

@ -730,3 +730,12 @@
[X SNR (-300.92641698386234 dB) is not greater than or equal to 65.737. Got -300.92641698386234.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 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.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14680\]\t-1.8981590822950617e-24\t2.0512369275093079e-1\t2.0512369275093079e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[14681\]\t1.1480505578219891e-2\t1.4340442419052124e-1\t1.3192391861230135e-1\t9.1994315626575540e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.0512369275093079e-1 at index of 14680.\n\tMax RelError of 1.0000000000000000e+0 at index of 14680.\n]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 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.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14680\]\t5.4363735735307728e-10\t2.0512369275093079e-1\t2.0512369220729343e-1\t9.9999999734970957e-1\t3.8985999999999999e-3\n\t[14681\]\t1.1480505578219891e-2\t1.4340442419052124e-1\t1.3192391861230135e-1\t9.1994315626575540e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.0512369220729343e-1 at index of 14680.\n\tMax RelError of 9.9999999734970957e-1 at index of 14680.\n]
expected: FAIL
[X SNR (55.28431861174898 dB) is not greater than or equal to 65.737. Got 55.28431861174898.]
expected: FAIL

View file

@ -213,7 +213,7 @@ function run_test(algorithmNames) {
allAlgorithmSpecifiersFor(name).forEach(function(algorithm) {
getValidKeyData(algorithm).forEach(function(test) {
if (test.format === "jwk") {
var data = {crv: test.data.crv, kty: test.data.kty, d: test.data.d, x: test.data.x, d: test.data.d};
var data = {crv: test.data.crv, kty: test.data.kty, d: test.data.d, x: test.data.x, y: test.data.y};
data.kty = getMismatchedKtyField(algorithm);
var usages = validUsages(vector, 'jwk', test.data);
testError('jwk', algorithm, data, name, usages, true, "DataError", "Invalid 'kty' field");
@ -228,7 +228,7 @@ function run_test(algorithmNames) {
allAlgorithmSpecifiersFor(name).forEach(function(algorithm) {
getValidKeyData(algorithm).forEach(function(test) {
if (test.format === "jwk") {
var data = {crv: test.data.crv, kty: test.data.kty, d: test.data.d, x: test.data.x, d: test.data.d};
var data = {crv: test.data.crv, kty: test.data.kty, d: test.data.d, x: test.data.x, y: test.data.y};
data.ext = false;
var usages = validUsages(vector, 'jwk', test.data);
testError('jwk', algorithm, data, name, usages, true, "DataError", "Import from a non-extractable");
@ -259,7 +259,7 @@ function run_test(algorithmNames) {
allAlgorithmSpecifiersFor(name).forEach(function(algorithm) {
getValidKeyData(algorithm).forEach(function(test) {
if (test.format === "jwk") {
var data = {crv: test.data.crv, kty: test.data.kty, d: test.data.d, x: test.data.x, d: test.data.d};
var data = {crv: test.data.crv, kty: test.data.kty, d: test.data.d, x: test.data.x, y: test.data.y};
data.crv = getMismatchedCrvField(algorithm)
var usages = validUsages(vector, 'jwk', test.data);
testError('jwk', algorithm, data, name, usages, true, "DataError", "Invalid 'crv' field");

View file

@ -1,3 +1,5 @@
const kTestPrompt = 'Please write a sentence in English.';
// The method should take the AbortSignal as an option and return a promise.
const testAbortPromise = async (t, method) => {
// Test abort signal without custom error.
@ -26,6 +28,43 @@ const testAbortPromise = async (t, method) => {
}
};
// The method should take the AbortSignal as an option and return a ReadableStream.
const testAbortReadableStream = async (t, method) => {
// Test abort signal without custom error.
{
const controller = new AbortController();
const stream = method(controller.signal);
controller.abort();
let writableStream = new WritableStream();
await promise_rejects_dom(
t, "AbortError", stream.pipeTo(writableStream)
);
// Using the same aborted controller will get the `AbortError` as well.
await promise_rejects_dom(
t, "AbortError", new Promise(() => { method(controller.signal); })
);
}
// Test abort signal with custom error.
{
const error = new DOMException("test", "VersionError");
const controller = new AbortController();
const stream = method(controller.signal);
controller.abort(error);
let writableStream = new WritableStream();
await promise_rejects_exactly(
t, error,
stream.pipeTo(writableStream)
);
// Using the same aborted controller will get the same error.
await promise_rejects_exactly(
t, error, new Promise(() => { method(controller.signal); })
);
}
};
async function testMonitor(createFunc, options = {}) {
let created = false;
const progressEvents = [];

View file

@ -0,0 +1,25 @@
// META: title=Summarizer Abort
// META: global=window,worker
// META: script=../resources/util.js
'use strict';
promise_test(async t => {
await testAbortPromise(t, signal => {
return Summarizer.create({ signal: signal });
});
}, "Aborting Summarizer.create().");
promise_test(async t => {
const session = await Summarizer.create();
await testAbortPromise(t, signal => {
return session.summarize(kTestPrompt, { signal: signal });
});
}, "Aborting Summarizer.summarize().");
promise_test(async t => {
const session = await Summarizer.create();
await testAbortReadableStream(t, signal => {
return session.summarizeStreaming(kTestPrompt, { signal: signal });
});
}, "Aborting Summarizer.summarizeStreaming().");

View file

@ -0,0 +1,36 @@
// META: title=Summarizer Streaming
// META: script=../resources/util.js
// META: timeout=long
'use strict';
promise_test(async t => {
const summarizer = await Summarizer.create();
const streamingResponse = summarizer.summarizeStreaming(
"The web-platform-tests Project is a cross-browser test suite for the Web-platform stack. Writing tests in a way that allows them to be run in all browsers gives browser projects confidence that they are shipping software that is compatible with other implementations, and that later implementations will be compatible with their implementations. This in turn gives Web authors/developers confidence that they can actually rely on the Web platform to deliver on the promise of working across browsers and devices without needing extra layers of abstraction to paper over the gaps left by specification editors and implementors.");
assert_equals(
Object.prototype.toString.call(streamingResponse),
"[object ReadableStream]"
);
const reader = streamingResponse.getReader();
let result = "";
while (true) {
const { value, done } = await reader.read();
if (done) {
break;
}
result = value;
}
assert_greater_than(result.length, 0);
}, 'Summarizer.summarizeStreaming returns ReadableStream with a non-empty text.');
promise_test(async t => {
const summarizer = await Summarizer.create();
const streamingResponse = summarizer.summarizeStreaming("");
assert_equals(
Object.prototype.toString.call(streamingResponse),
"[object ReadableStream]"
);
const { result, done } = await streamingResponse.getReader().read();
assert_true(done);
}, 'Summarizer.summarizeStreaming returns a ReadableStream without any chunk on an empty input.');

View file

@ -0,0 +1,108 @@
// META: title=Summarizer
// META: script=../resources/util.js
// META: timeout=long
'use strict';
promise_test(async () => {
assert_true(!!Summarizer);
}, 'Summarizer must be defined.');
promise_test(async () => {
const availability = await Summarizer.availability({
type: "tl;dr",
format: "plain-text",
length: "medium",
});
assert_not_equals(availability, "unavailable");
}, 'Summarizer.availability() is available');
promise_test(async () => {
const availability = await Summarizer.availability({
type: "tl;dr",
format: "plain-text",
length: "medium",
expectedInputLanguages: ["en-GB"],
expectedContextLanguages: ["en"],
outputLanguage: "en",
});
assert_not_equals(availability, "unavailable");
}, 'Summarizer.availability() is available for supported languages');
promise_test(async () => {
const availability = await Summarizer.availability({
type: "tl;dr",
format: "plain-text",
length: "medium",
expectedInputLanguages: ["es"], // not supported
expectedContextLanguages: ["en"],
outputLanguage: "es", // not supported
});
assert_equals(availability, "unavailable");
}, 'Summarizer.availability() returns no for unsupported languages');
promise_test(async () => {
await testMonitor(Summarizer.create);
}, 'Summarizer.create() notifies its monitor on downloadprogress');
promise_test(async () => {
const summarizer = await Summarizer.create({});
const result = await summarizer.summarize(kTestPrompt);
assert_equals(typeof result, "string");
assert_greater_than(result.length, 0);
}, 'Summarizer.summarize() returns non-empty result');
promise_test(async () => {
const summarizer = await Summarizer.create({});
const result = await summarizer.measureInputUsage(kTestPrompt);
assert_greater_than(result, 0);
}, 'Summarizer.measureInputUsage() returns non-empty result');
promise_test(async () => {
const sharedContext = 'This is a shared context string';
const summarizer = await Summarizer.create({sharedContext: sharedContext});
assert_equals(summarizer.sharedContext, sharedContext);
}, 'Summarizer.sharedContext');
promise_test(async () => {
const summarizer = await Summarizer.create({type: 'headline'});
assert_equals(summarizer.type, 'headline');
}, 'Summarizer.type');
promise_test(async () => {
const summarizer = await Summarizer.create({format: 'markdown'});
assert_equals(summarizer.format, 'markdown');
}, 'Summarizer.format');
promise_test(async () => {
const summarizer = await Summarizer.create({length: 'medium'});
assert_equals(summarizer.length, 'medium');
}, 'Summarizer.length');
promise_test(async () => {
const summarizer = await Summarizer.create({
expectedInputLanguages: ['en']
});
assert_array_equals(summarizer.expectedInputLanguages, ['en']);
}, 'Summarizer.expectedInputLanguages');
promise_test(async () => {
const summarizer = await Summarizer.create({
expectedContextLanguages: ['en']
});
assert_array_equals(summarizer.expectedContextLanguages, ['en']);
}, 'Summarizer.expectedContextLanguages');
promise_test(async () => {
const summarizer = await Summarizer.create({
outputLanguage: 'en'
});
assert_equals(summarizer.outputLanguage, 'en');
}, 'Summarizer.outputLanguage');
promise_test(async () => {
const summarizer = await Summarizer.create({});
assert_equals(summarizer.expectedInputLanguages, null);
assert_equals(summarizer.expectedContextLanguages, null);
assert_equals(summarizer.outputLanguage, null);
}, 'Summarizer optional attributes return null');

View file

@ -0,0 +1,115 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>Clear-Site-Data: cache for bfcache</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="support/clear-cache-helper.sub.js"></script>
<script src="/common/dispatcher/dispatcher.js"></script>
<script src="/common/utils.js"></script>
<script src="/html/browsers/browsing-the-web/back-forward-cache/resources/helper.sub.js"></script>
<script type="module">
const sameOrigin =
'https://{{host}}:{{ports[https][0]}}';
const subdomainOrigin =
'https://{{hosts[][www2]}}:{{ports[https][0]}}';
const crossSiteOrigin =
'https://{{hosts[alt][]}}:{{ports[https][0]}}';
// The tests are built on top of the back-forward-cache test harness.
// Here is the steps for the tests:
// 1. Open a new window and navigate to a test URL.
// 2. Navigate the window to a second page.
// 3. Trigger the clear-site-data header either by window.open() or loading an
// iframe from the second page.
// 4. Navigate back to the first page.
// 5. Assert that the first page is or is not cached.
function runBfCacheClearTest(params, description) {
runBfcacheTest(
{
targetOrigin: sameOrigin,
scripts: ["/clear-site-data/support/clear-cache-helper.sub.js"],
funcBeforeBackNavigation: async (getUrlParams, mode) => {
const cacheHelper = self.crypto.randomUUID();
const testUrl = getUrl(cacheHelper, getUrlParams);
let clearingPromise;
if (mode === "window") {
clearingPromise = new Promise(resolve => {
window.addEventListener("message", resolve, {once: true});
window.open(testUrl);
});
} else if (mode === "iframe") {
clearingPromise = new Promise(resolve => {
const iframe = document.createElement("iframe");
iframe.src = testUrl;
document.body.appendChild(iframe);
iframe.onload = resolve;
});
} else {
throw new Error("Unsupported mode");
}
await clearingPromise;
},
argsBeforeBackNavigation: [params.getUrlParams, params.mode],
...params,
},
description
);
}
runBfCacheClearTest(
{
getUrlParams: {
clear: "cache",
},
mode: "iframe",
shouldBeCached: false,
},
"BfCached document shouldn't be cached after receiving clear-cache header from the same origin."
);
runBfCacheClearTest(
{
targetOrigin: subdomainOrigin,
getUrlParams: {
subdomain: true,
clear: "cache",
},
mode: "iframe",
shouldBeCached: true,
},
"BfCached document should be cached after receiving clear-cache header from a subdomain."
);
runBfCacheClearTest(
{
targetOrigin: crossSiteOrigin,
getUrlParams: {
secondOrigin: true,
clear: "cache",
},
mode: "iframe",
shouldBeCached: true,
},
"BfCached document should be cached after receiving clear-cache header from another site."
);
runBfCacheClearTest(
{
getUrlParams: {
clear: "cache",
},
mode: "window",
shouldBeCached: false,
},
"BfCached document shouldn't be cached after receiving clear-cache header from another window."
);
</script>

View file

@ -39,7 +39,7 @@ function getUrl(cacheHelper, {
} else { // !second_origin && !subdomain
url += "{{hosts[][]}}";
}
url += ":{{ports[https][1]}}";
url += ":{{ports[https][0]}}";
url += "/clear-site-data/support/clear-site-data-cache.py";
url = new URL(url);
let params = new URLSearchParams();
@ -130,4 +130,3 @@ function testCacheClear(test, params, assert) {
openTestPageHelper(test, null, testUrls, 0, assert, resolve)
});
}

View file

@ -0,0 +1,44 @@
<!DOCTYPE HTML>
<meta charset=utf-8>
<title>Container Timing: starting observation after image paint, with buffering, reports paint.</title>
<body>
<style>
body {
margin: 0;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<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(() => {
const observer = new PerformanceObserver(
t.step_func_done(function(entryList) {
assert_equals(entryList.getEntries().length, 1);
const entry = entryList.getEntries()[0];
checkContainerEntry(entry, 'image_ct', 'my_id', beforeRender);
checkRect(entry, [0, 100, 0, 100])
checkContainerSize(entry, 10000);
})
);
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>
</body>

View file

@ -0,0 +1,43 @@
<!DOCTYPE HTML>
<meta charset=utf-8>
<title>Container Timing: observe after painting happened without buffering</title>
<body>
<style>
body {
margin: 0;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<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(() => {
const observer = new PerformanceObserver(
t.step_func_done(function(entryList) {
assert_unreached("Painting happened before observing, it should not create a containertiming entry");
})
);
observer.observe({type: 'container', buffered: false });
t.step_timeout(() => {
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>
</body>

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<style>
.container {
width: 100px;
height: 100px;
border: solid 3px;
position: relative;
margin: 50px;
}
.anchor {
position: relative;
width: 50px;
height: 50px;
left: 40px;
top: 5px;
background: lime;
}
.target {
position: fixed;
background: cyan;
left: 111px;
}
</style>
<div class="container">
<div class="anchor"></div>
<div class="target">
<div style="width:30px;height:20px;"></div>
</div>
</div>

View file

@ -0,0 +1,54 @@
<!DOCTYPE html>
<html class=reftest-wait>
<title>Tests 'anchor-center' value when target visibility changes</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#valdef-justify-self-anchor-center">
<link rel="author" href="mailto:plampe@igalia.com">
<link rel="match" href="anchor-center-visibility-change-ref.html">
<script src="/common/reftest-wait.js"></script>
<script src="/common/rendering-utils.js"></script>
<style>
.container {
width: 100px;
height: 100px;
border: solid 3px;
position: relative;
margin: 50px;
}
.anchor {
anchor-name: --anchor;
position: relative;
width: 50px;
height: 50px;
left: 40px;
top: 5px;
background: lime;
}
.target {
position-anchor: --anchor;
position: fixed;
background: cyan;
justify-self: anchor-center;
display: none;
}
</style>
<div class="container">
<div class="anchor"></div>
<div id="target" class="target">
<div style="width:30px;height:20px;"></div>
</div>
</div>
<script>
// #target should be invisible initially.
waitForAtLeastOneFrame().then(() => {
// Change #target to be visible.
document.getElementById('target').style.display = 'flow';
waitForAtLeastOneFrame().then(() => {
// #target should be visible and anchor-centered now.
takeScreenshot();
});
});
</script>

View file

@ -93,6 +93,46 @@ test((t) => {
assert_equals(cs.height, '43px');
}, 'Element can use <length> fallback if present');
test((t) => {
let target = createTarget(t, main);
target.style = `
/* No position-anchor here */
left:anchor(right, 8.5%);
top:calc(8.5% + anchor(top, 1px));
width:anchor-size(width, 21%);
height:calc(21% + anchor-size(height, 1px));
`;
let cs = getComputedStyle(target);
assert_equals(cs.left, '17px');
assert_equals(cs.top, '18px');
assert_equals(cs.width, '42px');
assert_equals(cs.height, '43px');
}, 'Element can use <length> fallback with percentage');
test((t) => {
let target = createTarget(t, main);
target.style = `
/* No position-anchor here */
max-width:anchor-size(width, 28%);
max-height:calc(28% + anchor-size(height, 1px));
`;
let cs = getComputedStyle(target);
assert_equals(cs.maxWidth, '28%');
assert_equals(cs.maxHeight, 'calc(28% + 1px)');
}, 'Element can use <length> fallback for max size with percentage');
test((t) => {
let target = createTarget(t, main);
target.style = `
/* No position-anchor here */
margin-left:anchor-size(width, 6%);
margin-top:calc(6% + anchor-size(height, 1px));
`;
let cs = getComputedStyle(target);
assert_equals(cs.marginLeft, '12px');
assert_equals(cs.marginTop, '13px');
}, 'Element can use <length> fallback for margin with percentage');
// Now test that any invalid anchor*() behaves as invalid at computed-value
// time if there's no fallback specified.

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<title>Anchor inside table cell with non-top alignment</title>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/css-anchor-position-1/#positioning">
<link rel="help" href="https://www.w3.org/TR/css-inline-3/#transverse-alignment">
<link rel="help" href="https://issues.chromium.org/issues/406288652">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="width:100px; height:100px; position:relative; overflow:clip; background:red;">
<div style="display:table-cell;">
<div id="anchor" style="anchor-name:--a; width:50px; height:100px;"></div>
</div>
<div style="display:table-cell;">
<div style="width:10px; height:200px;"></div>
</div>
<div style="position:absolute; position-anchor:--a; bottom:anchor(top); width:100px; height:100px; background:green;"></div>
</div>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<!-- TODO(crbug.com/390314945): Replace with spec link when the spec lands. -->
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8942 ">
<link rel="help" href="https://drafts.csswg.org/css-animations-2/#animation-trigger-exit-range">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<div id="target" style="font-size:10px;"></div>
<script>
test_computed_value("animation-trigger-exit-range-end", "initial", "normal");
test_computed_value("animation-trigger-exit-range-end", "initial", "auto");
test_computed_value("animation-trigger-exit-range-end", "auto");
test_computed_value("animation-trigger-exit-range-end", "normal");
test_computed_value("animation-trigger-exit-range-end", "cover 0%");
test_computed_value("animation-trigger-exit-range-end", "cover 100%", "cover");

View file

@ -1,6 +1,5 @@
<!DOCTYPE html>
<!-- TODO(crbug.com/390314945): Replace with spec link when the spec lands. -->
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8942">
<link rel="help" href="https://drafts.csswg.org/css-animations-2/#animation-trigger-exit-range-end">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
@ -18,4 +17,5 @@ test_invalid_value("animation-trigger-exit-range-end", "50% exit");
test_invalid_value("animation-trigger-exit-range-end", "contain contain");
test_invalid_value("animation-trigger-exit-range-end", "none");
test_invalid_value("animation-trigger-exit-range-end", "cover 50% enter 50%");
test_invalid_value("animation-trigger-exit-range-end", "auto contain");
</script>

View file

@ -1,11 +1,11 @@
<!DOCTYPE html>
<!-- TODO(crbug.com/390314945): Replace with spec link when the spec lands. -->
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8942">
<link rel="help" href="https://drafts.csswg.org/css-animations-2/#animation-trigger-exit-range-endß">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
<script>
// https://drafts.csswg.org/scroll-animations-1/#view-timelines-ranges
test_valid_value("animation-trigger-exit-range-end", "auto");
test_valid_value("animation-trigger-exit-range-end", "normal");
test_valid_value("animation-trigger-exit-range-end", "cover 0%");
test_valid_value("animation-trigger-exit-range-end", "cover 100%", "cover");
@ -30,4 +30,4 @@ test_valid_value("animation-trigger-exit-range-end", "cover");
test_valid_value("animation-trigger-exit-range-end", "contain");
test_valid_value("animation-trigger-exit-range-end", "entry");
test_valid_value("animation-trigger-exit-range-end", "exit");
</script>trigger-
</script>

View file

@ -1,7 +1,6 @@
<!DOCTYPE html>
<title>animation-trigger-exit-range shorthand</title>
<!-- TODO(crbug.com/390314945): Replace with spec link when the spec lands. -->
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8942">
<link rel="help" href="https://drafts.csswg.org/css-animations-2/#animation-trigger-exit-range">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/shorthand-testcommon.js"></script>
@ -18,6 +17,14 @@ test_valid_value("animation-trigger-exit-range", "entry-crossing");
test_valid_value("animation-trigger-exit-range", "exit");
test_valid_value("animation-trigger-exit-range", "exit-crossing");
test_valid_value("animation-trigger-exit-range", "entry, exit");
test_valid_value("animation-trigger-exit-range", "auto");
test_valid_value("animation-trigger-exit-range", "auto auto", "auto");
test_valid_value("animation-trigger-exit-range", "cover auto");
test_valid_value("animation-trigger-exit-range", "cover 10% auto");
test_valid_value("animation-trigger-exit-range", "auto cover");
test_valid_value("animation-trigger-exit-range", "auto cover 90%");
test_valid_value("animation-trigger-exit-range", "normal auto", "normal");
test_valid_value("animation-trigger-exit-range", "auto normal", "auto");
test_valid_value("animation-trigger-exit-range", "entry 0% entry 100%", "entry");
test_valid_value("animation-trigger-exit-range", "entry-crossing 0% entry-crossing 100%",
@ -110,9 +117,14 @@ test_invalid_value("animation-trigger-exit-range", "thing 100%");
test_invalid_value("animation-trigger-exit-range", "thing 100px");
test_invalid_value("animation-trigger-exit-range", "100% thing");
test_shorthand_value('animation-trigger-exit-range', 'auto', {
'animation-trigger-exit-range-start': 'auto',
'animation-trigger-exit-range-end': 'auto',
});
test_shorthand_value('animation-trigger-exit-range', 'normal', {
'animation-trigger-exit-range-start': 'normal',
'animation-trigger-exit-range-end': 'normal',
'animation-trigger-exit-range-end': 'auto',
});
test_shorthand_value('animation-trigger-exit-range', 'normal normal', {
@ -120,6 +132,16 @@ test_shorthand_value('animation-trigger-exit-range', 'normal normal', {
'animation-trigger-exit-range-end': 'normal',
});
test_shorthand_value('animation-trigger-exit-range', 'normal auto', {
'animation-trigger-exit-range-start': 'normal',
'animation-trigger-exit-range-end': 'auto',
});
test_shorthand_value('animation-trigger-exit-range', 'auto normal', {
'animation-trigger-exit-range-start': 'auto',
'animation-trigger-exit-range-end': 'normal',
});
test_shorthand_value('animation-trigger-exit-range', 'normal entry 100%', {
'animation-trigger-exit-range-start': 'normal',
'animation-trigger-exit-range-end': 'entry',
@ -171,10 +193,10 @@ test_shorthand_value('animation-trigger-exit-range', 'exit calc(10% + 50px)', {
});
test_shorthand_value('animation-trigger-exit-range', '100px', {
'animation-trigger-exit-range-start': '100px',
'animation-trigger-exit-range-end': 'normal',
'animation-trigger-exit-range-end': 'auto',
});
test_shorthand_value('animation-trigger-exit-range', '10%', {
'animation-trigger-exit-range-start': '10%',
'animation-trigger-exit-range-end': 'normal',
'animation-trigger-exit-range-end': 'auto',
});
</script>

View file

@ -6,7 +6,9 @@
<script src="/css/support/computed-testcommon.js"></script>
<div id="target" style="font-size:10px;"></div>
<script>
test_computed_value("animation-trigger-exit-range-start", "initial", "normal");
// https://drafts.csswg.org/css-animations-2/#animation-trigger-exit-range-start
test_computed_value("animation-trigger-exit-range-start", "initial", "auto");
test_computed_value("animation-trigger-exit-range-start", "auto");
test_computed_value("animation-trigger-exit-range-start", "normal");
test_computed_value("animation-trigger-exit-range-start", "cover 0%", "cover");
test_computed_value("animation-trigger-exit-range-start", "cover 100%");

View file

@ -1,6 +1,5 @@
<!DOCTYPE html>
<!-- TODO(crbug.com/390314945): Replace with spec link when the spec lands. -->
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8942 ">
<link rel="help" href="https://drafts.csswg.org/css-animations-2/#animation-trigger-exit-range-start">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
@ -14,4 +13,5 @@ test_invalid_value("animation-trigger-exit-range-start", "50% exit");
test_invalid_value("animation-trigger-exit-range-start", "contain contain");
test_invalid_value("animation-trigger-exit-range-start", "none");
test_invalid_value("animation-trigger-exit-range-start", "cover 50% enter 50%");
test_invalid_value("animation-trigger-exit-range-start", "auto contain");
</script>

View file

@ -6,6 +6,7 @@
<script src="/css/support/parsing-testcommon.js"></script>
<script>
// https://drafts.csswg.org/scroll-animations-1/#view-timelines-ranges
test_valid_value("animation-trigger-exit-range-start", "auto");
test_valid_value("animation-trigger-exit-range-start", "normal");
test_valid_value("animation-trigger-exit-range-start", "cover 0%", "cover");
test_valid_value("animation-trigger-exit-range-start", "cover 100%");

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