mirror of
https://github.com/servo/servo.git
synced 2025-08-07 14:35:33 +01:00
Sync WPT with upstream (10-07-2025) (#37974)
Automated downstream sync of changes from upstream as of 10-07-2025 [no-wpt-sync] Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
This commit is contained in:
parent
4615464388
commit
84f0cd5801
192 changed files with 4789 additions and 2068 deletions
|
@ -14,3 +14,6 @@
|
||||||
|
|
||||||
[Opening a blob URL in a new window by clicking an <a> tag works immediately before revoking the URL.]
|
[Opening a blob URL in a new window by clicking an <a> tag works immediately before revoking the URL.]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Fetching a blob URL immediately before revoking it works in <script> tags.]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
825
tests/wpt/meta/MANIFEST.json
vendored
825
tests/wpt/meta/MANIFEST.json
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,3 +0,0 @@
|
||||||
[frame-ancestors-path-ignored.window.html]
|
|
||||||
[A 'frame-ancestors' CSP directive with a URL that includes a path should be ignored.]
|
|
||||||
expected: FAIL
|
|
|
@ -34,3 +34,15 @@
|
||||||
|
|
||||||
[url hashes should allow redirected scripts - metatag]
|
[url hashes should allow redirected scripts - metatag]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[dynamically inserted parser-inserted script should be allowed if strict-dynamic-url is present - header]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[dynamically inserted script inserted by an inline script should be allowed if strict-dynamic-url is present - header]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[dynamically inserted parser-inserted script should be allowed if strict-dynamic-url is present - metatag]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[dynamically inserted script inserted by an inline script should be allowed if strict-dynamic-url is present - metatag]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
[eval-blocked-report-contains-hash.html]
|
||||||
|
[Violation report status OK.]
|
||||||
|
expected: FAIL
|
2
tests/wpt/meta/css/css-borders/tentative/border-shape/border-shape-shadow.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-borders/tentative/border-shape/border-shape-shadow.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[border-shape-shadow.html]
|
||||||
|
expected: FAIL
|
|
@ -1,14 +1,7 @@
|
||||||
[layer-font-face-override.html]
|
[layer-font-face-override.html]
|
||||||
bug: https://github.com/servo/servo/issues/35520
|
bug: https://github.com/servo/servo/issues/35520
|
||||||
|
|
||||||
[@font-face unlayered overrides layered]
|
[@font-face unlayered overrides layered]
|
||||||
expected: [FAIL, PASS]
|
expected: [FAIL, PASS]
|
||||||
|
|
||||||
[@font-face override between layers]
|
[@font-face override between layers]
|
||||||
expected: [FAIL, PASS]
|
expected: [FAIL, PASS]
|
||||||
|
|
||||||
[@font-face override update with appended sheet 1]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[@font-face override update with appended sheet 2]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[font-relative-units-dynamic.html]
|
[font-relative-units-dynamic.html]
|
||||||
|
expected: ERROR
|
||||||
[em units respond to changes]
|
[em units respond to changes]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
2
tests/wpt/meta/css/css-grid/grid-items/grid-auto-margin-and-replaced-item-001.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-grid/grid-items/grid-auto-margin-and-replaced-item-001.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[grid-auto-margin-and-replaced-item-001.html]
|
||||||
|
expected: FAIL
|
|
@ -1,15 +0,0 @@
|
||||||
[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
|
|
|
@ -1,3 +0,0 @@
|
||||||
[cross-stylesheet.html]
|
|
||||||
[CSS Mixins: Mixin from another stylesheet]
|
|
||||||
expected: FAIL
|
|
|
@ -1,9 +0,0 @@
|
||||||
[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
|
|
|
@ -7,6 +7,3 @@
|
||||||
|
|
||||||
[rowspan can't be zero]
|
[rowspan can't be zero]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[table 7]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
2
tests/wpt/meta/css/css-ui/caret-shape-block-color-004.tentative.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-ui/caret-shape-block-color-004.tentative.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[caret-shape-block-color-004.tentative.html]
|
||||||
|
expected: FAIL
|
|
@ -4,6 +4,3 @@
|
||||||
|
|
||||||
[Make sure the page is ready for animation.]
|
[Make sure the page is ready for animation.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Smooth scrolling while doing history navigation.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
2
tests/wpt/meta/css/filter-effects/backdrop-filter-root-toggle-crash.html.ini
vendored
Normal file
2
tests/wpt/meta/css/filter-effects/backdrop-filter-root-toggle-crash.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[backdrop-filter-root-toggle-crash.html]
|
||||||
|
expected: TIMEOUT
|
|
@ -44,9 +44,6 @@
|
||||||
[sec-fetch-mode]
|
[sec-fetch-mode]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[sec-fetch-dest]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[sec-fetch-storage-access - Same site]
|
[sec-fetch-storage-access - Same site]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,6 @@
|
||||||
[load event does not fire on window.open()]
|
[load event does not fire on window.open()]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[load event does not fire on window.open('about:blank')]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[load event does not fire on window.open('')]
|
[load event does not fire on window.open('')]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
3
tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
vendored
Normal file
3
tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[traverse_the_history_5.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[canvas.2d.disconnected-font-size-math.html]
|
||||||
|
expected: FAIL
|
|
@ -2,6 +2,3 @@
|
||||||
expected: ERROR
|
expected: ERROR
|
||||||
[Test that transfer an OffscreenCanvas that has a webgl context throws exception in a worker.]
|
[Test that transfer an OffscreenCanvas that has a webgl context throws exception in a worker.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Test that transfer an OffscreenCanvas twice throws exception in a worker.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,216 +0,0 @@
|
||||||
[headings-styles.html]
|
|
||||||
[<h1> (in <article>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article><article>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article><article>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article><article>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article><article><hgroup>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article><article><hgroup>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <article><article><article><article><article><hgroup>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside><aside>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside><aside>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside><aside>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside><aside><hgroup>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside><aside><hgroup>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <aside><aside><aside><aside><aside><hgroup>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav><nav>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav><nav>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav><nav>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav><nav><hgroup>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav><nav><hgroup>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <nav><nav><nav><nav><nav><hgroup>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section><section>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section><section>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section><section>) - font-size]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section><section><hgroup>) - margin-top]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section><section><hgroup>) - margin-bottom]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<h1> (in <section><section><section><section><section><hgroup>) - font-size]
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +0,0 @@
|
||||||
[iframe-loading-lazy-nav-location-assign.html]
|
|
||||||
[Navigating iframe loading='lazy' before it is loaded: location.assign]
|
|
||||||
expected: FAIL
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
[iframe-loading-lazy-reload-location-reload.html]
|
||||||
|
[Reloading iframe loading='lazy' before it is loaded: location.reload]
|
||||||
|
expected: FAIL
|
|
@ -1,4 +1,3 @@
|
||||||
[iframe_sandbox_popups_nonescaping-2.html]
|
[iframe_sandbox_popups_nonescaping-2.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[iframe_sandbox_popups_nonescaping-3.html]
|
[iframe_sandbox_popups_nonescaping-3.html]
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
[historical.html]
|
|
||||||
[<input name=isindex> should not be supported]
|
|
||||||
expected: FAIL
|
|
3
tests/wpt/meta/html/webappapis/user-prompts/print-during-unload.html.ini
vendored
Normal file
3
tests/wpt/meta/html/webappapis/user-prompts/print-during-unload.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[print-during-unload.html]
|
||||||
|
[print() during unload]
|
||||||
|
expected: FAIL
|
|
@ -77,9 +77,6 @@
|
||||||
[success (xhr): main]
|
[success (xhr): main]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[MIME-error (script): main]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[404 (style): main]
|
[404 (style): main]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
6
tests/wpt/meta/selection/selection-modify-extend-word-generated-content.html.ini
vendored
Normal file
6
tests/wpt/meta/selection/selection-modify-extend-word-generated-content.html.ini
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[selection-modify-extend-word-generated-content.html]
|
||||||
|
[extending selection from middle of first word of the middle line shouldn't extend the range to the previous line]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[extending selection from middle of last word of the middle line shouldn't extend the range to the next line]
|
||||||
|
expected: FAIL
|
|
@ -37,7 +37,53 @@
|
||||||
|
|
||||||
|
|
||||||
[script.https.html?reporting=true]
|
[script.https.html?reporting=true]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
|
[Ensure that a script without integrity did not run]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Ensure that a script with unknown integrity algorithm did not run]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a script without integrity algorithm runs and gets reported in report-only mode]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a no-cors script gets blocked]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that ReportingObserver gets called without endpoints]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a script with integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a data URI script with no integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a no-CORS data URI script with no integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a blob URL script with no integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a no-CORS blob URL script with no integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that an about:blank URL script with no integrity does not trigger a report]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a no-CORS about:blank URL script with no integrity does not trigger a report]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
||||||
[script.https.html?reporting=false]
|
[script.https.html?reporting=false]
|
||||||
expected: ERROR
|
[Ensure that a script without integrity did not run]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Ensure that a script with unknown integrity algorithm did not run]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Ensure that a no-cors script gets blocked]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Ensure that ReportingObserver gets called without endpoints]
|
||||||
|
expected: FAIL
|
||||||
|
|
51
tests/wpt/meta/subresource-integrity/integrity-policy/style.https.html.ini
vendored
Normal file
51
tests/wpt/meta/subresource-integrity/integrity-policy/style.https.html.ini
vendored
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
[style.https.html?reporting=true]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[Ensure that a style without integrity did not run]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Ensure that a style with unknown integrity algorithm did not run]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a style without integrity algorithm runs and gets reported in report-only mode]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a no-cors style gets blocked]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that ReportingObserver gets called without endpoints]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a style with integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a data URI style with no integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a no-CORS data URI style with no integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a blob URL style with no integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a no-CORS blob URL style with no integrity runs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that an about:blank URL style with no integrity does not trigger a report]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Ensure that a no-CORS about:blank URL style with no integrity does not trigger a report]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
||||||
|
[style.https.html?reporting=false]
|
||||||
|
[Ensure that a style without integrity did not run]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Ensure that a style with unknown integrity algorithm did not run]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Ensure that a no-cors style gets blocked]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Ensure that ReportingObserver gets called without endpoints]
|
||||||
|
expected: FAIL
|
|
@ -1,5 +1,4 @@
|
||||||
[audiocontext-suspend-resume.html]
|
[audiocontext-suspend-resume.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[Executing "test-suspend"]
|
[Executing "test-suspend"]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -23,3 +22,12 @@
|
||||||
|
|
||||||
[< [test-resume\] 1 out of 4 assertions were failed.]
|
[< [test-resume\] 1 out of 4 assertions were failed.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test suspend() for offline context]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test resume() for offline context]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test state after context closed]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -7,3 +7,6 @@
|
||||||
|
|
||||||
[# AUDIT TASK RUNNER FINISHED: 1 out of 3 tasks were failed.]
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 3 tasks were failed.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[AudioParam: Chaining of envelope methods schedules values as expected]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -13,3 +13,6 @@
|
||||||
|
|
||||||
[# AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed.]
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[cancel1: cancel setValueCurve]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
[realtime-conv.html]
|
[realtime-conv.html]
|
||||||
[Executing "test"]
|
[Executing "test"]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test convolver with real‑time context]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
const dynamicScriptUrl = new URL("./support/add_dynamic_script.js", document.location).toString();
|
const dynamicScriptUrl = new URL("./support/add_dynamic_script.js", document.location).toString();
|
||||||
const redirectUrl = new URL("/common/redirect.py?location=" + scriptUrl, document.location).toString();
|
const redirectUrl = new URL("/common/redirect.py?location=" + scriptUrl, document.location).toString();
|
||||||
|
|
||||||
// This is the hash of 'foo.js':
|
// This is the hash of the string 'foo.js':
|
||||||
const wrongHash = "LJVNbdCJGjP5027dMuLOQeMEiDI8JvMr5zMiXqW5tzs=";
|
const wrongHash = "LJVNbdCJGjP5027dMuLOQeMEiDI8JvMr5zMiXqW5tzs=";
|
||||||
|
|
||||||
function get_iframe_url(test_type, policy, script_url) {
|
function get_iframe_url(test_type, policy, script_url) {
|
||||||
|
@ -25,6 +25,12 @@
|
||||||
`support/iframe_meta.sub.html?policy=${policy}&script_url=${script_url}`;
|
`support/iframe_meta.sub.html?policy=${policy}&script_url=${script_url}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_iframe_url_with_inline_script(test_type, policy) {
|
||||||
|
return test_type == "header" ?
|
||||||
|
`support/iframe_inline.sub.html?pipe=header(Content-Security-Policy,${policy})`:
|
||||||
|
`support/iframe_inline_meta.sub.html?policy=${policy}`;
|
||||||
|
}
|
||||||
|
|
||||||
for (let test_type of ["header", "metatag"]) {
|
for (let test_type of ["header", "metatag"]) {
|
||||||
|
|
||||||
promise_test(async t => {
|
promise_test(async t => {
|
||||||
|
@ -115,6 +121,36 @@
|
||||||
assert_equals(msgEvent.data, 'SCRIPT_RAN');
|
assert_equals(msgEvent.data, 'SCRIPT_RAN');
|
||||||
}, "url hashes should allow redirected scripts - " + test_type);
|
}, "url hashes should allow redirected scripts - " + test_type);
|
||||||
|
|
||||||
|
// Tests for strict-dynamic-url keyword:
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
// add_dynamic_script.js isn't allowlisted but strict-dynamic-url should allow it:
|
||||||
|
const dynamicScriptUrlHash = await sha256ofURL(dynamicScriptUrl);
|
||||||
|
const policy = `script-src 'nonce-forinlinescript' 'strict-dynamic-url' 'url-sha256-${dynamicScriptUrlHash}'`
|
||||||
|
|
||||||
|
let frame = document.createElement('iframe');
|
||||||
|
frame.src = get_iframe_url(test_type, policy, 'add_dynamic_script.js');
|
||||||
|
document.body.appendChild(frame);
|
||||||
|
|
||||||
|
const msgEvent = await new Promise(resolve => window.onmessage = resolve);
|
||||||
|
assert_equals(msgEvent.data, 'SCRIPT_RAN');
|
||||||
|
}, "dynamically inserted parser-inserted script should be allowed if strict-dynamic-url is present - " + test_type);
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
// externalScript.js isn't allowlisted but strict-dynamic-url should allow it:
|
||||||
|
const scriptUrlHash = await sha256ofURL(scriptUrl);
|
||||||
|
// This is the hash of the inline script that dynamically inserts externalScript.js.
|
||||||
|
const inlineScriptHash = "F8UqObF6TSi2W4dDcDzAOAplJkYovBE6JpJjsZJy5HA=";
|
||||||
|
const policy = `script-src 'nonce-forinlinescript' 'strict-dynamic-url' 'sha256-${inlineScriptHash}'`
|
||||||
|
|
||||||
|
let frame = document.createElement('iframe');
|
||||||
|
frame.src = get_iframe_url_with_inline_script(test_type, policy);
|
||||||
|
document.body.appendChild(frame);
|
||||||
|
|
||||||
|
const msgEvent = await new Promise(resolve => window.onmessage = resolve);
|
||||||
|
assert_equals(msgEvent.data, 'SCRIPT_RAN');
|
||||||
|
}, "dynamically inserted script inserted by an inline script should be allowed if strict-dynamic-url is present - " + test_type);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
19
tests/wpt/tests/content-security-policy/script-src/tentative/support/iframe_inline.sub.html
vendored
Normal file
19
tests/wpt/tests/content-security-policy/script-src/tentative/support/iframe_inline.sub.html
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<!-- Same as iframe.sub.html, but the script is inserted from an inline script. -->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<script nonce='forinlinescript'>
|
||||||
|
window.addEventListener('securitypolicyviolation', function() {
|
||||||
|
top.postMessage('CSP_VIOLATION', '*');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- sha256 of the script below is 'F8UqObF6TSi2W4dDcDzAOAplJkYovBE6JpJjsZJy5HA=' -->
|
||||||
|
<script>
|
||||||
|
var s = document.createElement('script');
|
||||||
|
s.type = 'text/javascript';
|
||||||
|
s.src = "externalScript.js";
|
||||||
|
document.getElementsByTagName('head')[0].appendChild(s);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
20
tests/wpt/tests/content-security-policy/script-src/tentative/support/iframe_inline_meta.sub.html
vendored
Normal file
20
tests/wpt/tests/content-security-policy/script-src/tentative/support/iframe_inline_meta.sub.html
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<!-- Same as iframe_inline.sub.html, but provides the CSP in a meta tag. -->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="{{GET[policy]}}">
|
||||||
|
<body>
|
||||||
|
<script nonce='forinlinescript'>
|
||||||
|
window.addEventListener('securitypolicyviolation', function() {
|
||||||
|
top.postMessage('CSP_VIOLATION', '*');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- sha256 of the script below is 'F8UqObF6TSi2W4dDcDzAOAplJkYovBE6JpJjsZJy5HA=' -->
|
||||||
|
<script>
|
||||||
|
var s = document.createElement('script');
|
||||||
|
s.type = 'text/javascript';
|
||||||
|
s.src = "externalScript.js";
|
||||||
|
document.getElementsByTagName('head')[0].appendChild(s);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,3 +1,4 @@
|
||||||
|
<!-- Same as iframe.sub.html, but provides CSP in a meta tag -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<meta http-equiv="Content-Security-Policy" content="{{GET[policy]}}">
|
<meta http-equiv="Content-Security-Policy" content="{{GET[policy]}}">
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
<!-- Same as iframe_meta.sub.html, but provides multiple CSPs in meta tags -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<meta http-equiv="Content-Security-Policy" content="{{GET[policy1]}}">
|
<meta http-equiv="Content-Security-Policy" content="{{GET[policy1]}}">
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>eval-blocked-and-sends-report</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src='../../support/logTest.sub.js?logs=["PASS: eval() blocked"]'></script>
|
||||||
|
<script src="../../support/alertAssert.sub.js?alerts=[]"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
try {
|
||||||
|
eval("alert_assert('FAIL')");
|
||||||
|
} catch (e) {
|
||||||
|
log('PASS: eval() blocked');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script async defer src='../../support/checkReport.sub.js?reportField=eval-hash&reportValue=eval-sha256-59RYbtpsgpNknZwNEVJ55z9MzqclgnRZLLIunfpEiL4='></script>
|
||||||
|
<div id="log"></div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,6 @@
|
||||||
|
Expires: Mon, 26 Jul 1997 05:00:00 GMT
|
||||||
|
Cache-Control: no-store, no-cache, must-revalidate
|
||||||
|
Cache-Control: post-check=0, pre-check=0, false
|
||||||
|
Pragma: no-cache
|
||||||
|
Set-Cookie: eval-blocked-report-contains-hash={{$id:uuid()}};
|
||||||
|
Content-Security-Policy: script-src 'self' 'unsafe-inline'; report-uri /reporting/resources/report.py?op=put&reportID={{$id}}
|
|
@ -305,7 +305,7 @@ promise_test(async testCase => {
|
||||||
const cookies = await cookieStore.getAll('cookie-name');
|
const cookies = await cookieStore.getAll('cookie-name');
|
||||||
assert_equals(cookies.length, 1);
|
assert_equals(cookies.length, 1);
|
||||||
assert_equals(cookies[0].name, 'cookie-name');
|
assert_equals(cookies[0].name, 'cookie-name');
|
||||||
assert_equals(cookies[0].value, 'cookie-new-value');
|
assert_equals(cookies[0].value, 'new-cookie-value');
|
||||||
}, 'cookieStore.set can modify a cookie set by document.cookie if document is defined');
|
}, 'cookieStore.set can modify a cookie set by document.cookie if document is defined');
|
||||||
|
|
||||||
promise_test(async testCase => {
|
promise_test(async testCase => {
|
||||||
|
|
|
@ -3,12 +3,13 @@
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<script src="/cookies/resources/cookie-helper.sub.js"></script>
|
<script src="/cookies/resources/cookie-helper.sub.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
let counter = 0;
|
||||||
function create_test(prefix, params, shouldExistInDOM, shouldExistViaHTTP, title) {
|
function create_test(prefix, params, shouldExistInDOM, shouldExistViaHTTP, title) {
|
||||||
promise_test(t => {
|
promise_test(t => {
|
||||||
var name = prefix + "prefixtestcookie";
|
var name = prefix + "prefixtestcookie";
|
||||||
erase_cookie_from_js(name, params);
|
erase_cookie_from_js(name, params);
|
||||||
t.add_cleanup(() => erase_cookie_from_js(name, params));
|
t.add_cleanup(() => erase_cookie_from_js(name, params));
|
||||||
var value = "" + Math.random();
|
var value = "foo" + ++counter;
|
||||||
document.cookie = name + "=" + value + ";" + params;
|
document.cookie = name + "=" + value + ";" + params;
|
||||||
|
|
||||||
assert_dom_cookie(name, value, shouldExistInDOM);
|
assert_dom_cookie(name, value, shouldExistInDOM);
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||||
<style type="text/css"><![CDATA[
|
<style type="text/css">
|
||||||
div
|
div
|
||||||
{
|
{
|
||||||
background-color: orange;
|
background-color: orange;
|
||||||
|
@ -18,7 +18,6 @@
|
||||||
padding: 0em 2em;
|
padding: 0em 2em;
|
||||||
width: 3em;
|
width: 3em;
|
||||||
}
|
}
|
||||||
]]>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
@ -30,4 +29,4 @@
|
||||||
<div>123</div>
|
<div>123</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -67,6 +67,8 @@ body {
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
|
setup({ explicit_done: true });
|
||||||
|
|
||||||
test(() => {
|
test(() => {
|
||||||
const target = test1.querySelector('.target');
|
const target = test1.querySelector('.target');
|
||||||
const style = getComputedStyle(target);
|
const style = getComputedStyle(target);
|
||||||
|
@ -98,19 +100,24 @@ test(() => {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
test(() => {
|
// Ensure Ahem font has a chance to load before examining layout.
|
||||||
const targets = test2.querySelectorAll('.target');
|
document.fonts.ready.then(() => {
|
||||||
|
test(() => {
|
||||||
|
const targets = test2.querySelectorAll('.target');
|
||||||
|
|
||||||
const style1 = getComputedStyle(targets[0]);
|
const style1 = getComputedStyle(targets[0]);
|
||||||
assert_equals(style1.top, '20px');
|
assert_equals(style1.top, '20px');
|
||||||
assert_equals(style1.bottom, '0px');
|
assert_equals(style1.bottom, '0px');
|
||||||
assert_equals(style1.left, '-120px');
|
assert_equals(style1.left, '-120px');
|
||||||
assert_equals(style1.right, '80px');
|
assert_equals(style1.right, '80px');
|
||||||
|
|
||||||
const style2 = getComputedStyle(targets[1]);
|
const style2 = getComputedStyle(targets[1]);
|
||||||
assert_equals(style2.top, '20px');
|
assert_equals(style2.top, '20px');
|
||||||
assert_equals(style2.bottom, '0px');
|
assert_equals(style2.bottom, '0px');
|
||||||
assert_equals(style2.left, '0px');
|
assert_equals(style2.left, '0px');
|
||||||
assert_equals(style2.right, '0px');
|
assert_equals(style2.right, '0px');
|
||||||
}, 'getComputedStyle() with fragmented containing block in inline layout');
|
}, 'getComputedStyle() with fragmented containing block in inline layout');
|
||||||
|
|
||||||
|
done();
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
19
tests/wpt/tests/css/css-animations/animation-name-inline-style.html
vendored
Normal file
19
tests/wpt/tests/css/css-animations/animation-name-inline-style.html
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<!doctype html>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-animations-1/">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<style>
|
||||||
|
#target { color: red }
|
||||||
|
@keyframes green {
|
||||||
|
from, to { color: green }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id=target style="animation-duration: 1s"></div>
|
||||||
|
<script>
|
||||||
|
test(t => {
|
||||||
|
target.style.animationName = "none";
|
||||||
|
assert_equals(getComputedStyle(target).color, "rgb(255, 0, 0)");
|
||||||
|
target.style.animationName = "green";
|
||||||
|
assert_equals(getComputedStyle(target).color, "rgb(0, 128, 0)");
|
||||||
|
}, "Animation starts when the name is mutated via inline style");
|
||||||
|
</script>
|
26
tests/wpt/tests/css/css-borders/tentative/border-shape/border-shape-shadow-ref.html
vendored
Normal file
26
tests/wpt/tests/css/css-borders/tentative/border-shape/border-shape-shadow-ref.html
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-borders-4/#border-shape">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
svg {
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
.shadow {
|
||||||
|
fill: purple;
|
||||||
|
transform: translate(10px, 20px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.target {
|
||||||
|
fill: green;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<polygon points="70,10 130,60, 70,110, 10,60" class="shadow" />
|
||||||
|
<polygon points="70,10 130,60, 70,110, 10,60" class="target" />
|
||||||
|
</svg>
|
22
tests/wpt/tests/css/css-borders/tentative/border-shape/border-shape-shadow.html
vendored
Normal file
22
tests/wpt/tests/css/css-borders/tentative/border-shape/border-shape-shadow.html
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-borders-4/#border-shape">
|
||||||
|
<link rel="match" href="border-shape-shadow-ref.html">
|
||||||
|
<meta name="fuzzy" content="maxDifference=0-96;totalPixels=0-256">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#target {
|
||||||
|
margin: 10px;
|
||||||
|
width: 120px;
|
||||||
|
height: 100px;
|
||||||
|
border-shape: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
|
||||||
|
position: relative;
|
||||||
|
background: green;
|
||||||
|
box-shadow: 10px 20px 0 0px purple;
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 2px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="target">
|
||||||
|
</div>
|
7
tests/wpt/tests/css/css-cascade/resources/scope-implicit.css
vendored
Normal file
7
tests/wpt/tests/css/css-cascade/resources/scope-implicit.css
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
@scope {
|
||||||
|
.a {
|
||||||
|
width: 100px;
|
||||||
|
height :100px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
}
|
18
tests/wpt/tests/css/css-cascade/scope-implicit-001-print.html
vendored
Normal file
18
tests/wpt/tests/css/css-cascade/scope-implicit-001-print.html
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com">
|
||||||
|
<link rel="help" href="drafts.csswg.org/css-cascade-6/#scoped-styles">
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930618">
|
||||||
|
<div>
|
||||||
|
<style>
|
||||||
|
@scope {
|
||||||
|
.a {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p>Test passes if there is a filled green square.</p>
|
||||||
|
<div class="a"></div>
|
||||||
|
</div>
|
10
tests/wpt/tests/css/css-cascade/scope-implicit-002-print.html
vendored
Normal file
10
tests/wpt/tests/css/css-cascade/scope-implicit-002-print.html
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com">
|
||||||
|
<link rel="help" href="drafts.csswg.org/css-cascade-6/#scoped-styles">
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930618">
|
||||||
|
<div>
|
||||||
|
<link rel="stylesheet" href="resources/scope-implicit.css">
|
||||||
|
<p>Test passes if there is a filled green square.</p>
|
||||||
|
<div class="a"></div>
|
||||||
|
</div>
|
8
tests/wpt/tests/css/css-cascade/scope-implicit-003-print-ref.html
vendored
Normal file
8
tests/wpt/tests/css/css-cascade/scope-implicit-003-print-ref.html
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com">
|
||||||
|
<link rel="help" href="drafts.csswg.org/css-cascade-6/#scoped-styles">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930618">
|
||||||
|
<p>Test passes if there is a filled green square.</p>
|
||||||
|
<svg width="100" height="100" viewBox="0 0 100 100">
|
||||||
|
<rect x="0" y="0" width="100" height="100" fill="green"/>
|
||||||
|
</svg>
|
16
tests/wpt/tests/css/css-cascade/scope-implicit-003-print.html
vendored
Normal file
16
tests/wpt/tests/css/css-cascade/scope-implicit-003-print.html
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com">
|
||||||
|
<link rel="help" href="drafts.csswg.org/css-cascade-6/#scoped-styles">
|
||||||
|
<link rel="match" href="scope-implicit-003-print-ref.html">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930618">
|
||||||
|
<p>Test passes if there is a filled green square.</p>
|
||||||
|
<svg width="100" height="100" viewBox="0 0 100 100">
|
||||||
|
<style>
|
||||||
|
@scope {
|
||||||
|
.a {
|
||||||
|
fill: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<rect class="a" x="0" y="0" width="100" height="100" />
|
||||||
|
</svg>
|
22
tests/wpt/tests/css/css-cascade/scope-implicit-004-print.xhtml
vendored
Normal file
22
tests/wpt/tests/css/css-cascade/scope-implicit-004-print.xhtml
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml-stylesheet href="resources/scope-implicit.css" type="text/css"?>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com" />
|
||||||
|
<link rel="help" href="drafts.csswg.org/css-cascade-6/#scoped-styles" />
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html" />
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930618" />
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<style>
|
||||||
|
@scope {
|
||||||
|
.a {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p>Test passes if there is a filled green square.</p>
|
||||||
|
<div class="a"></div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
22
tests/wpt/tests/css/css-cascade/scope-implicit-005-print.html
vendored
Normal file
22
tests/wpt/tests/css/css-cascade/scope-implicit-005-print.html
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com">
|
||||||
|
<link rel="help" href="drafts.csswg.org/css-cascade-6/#scoped-styles">
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930618">
|
||||||
|
<div>
|
||||||
|
<p>Test passes if there is a filled green square.</p>
|
||||||
|
<div>
|
||||||
|
<template shadowrootmode=open>
|
||||||
|
<style>
|
||||||
|
@scope {
|
||||||
|
.a {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="a"></div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
31
tests/wpt/tests/css/css-cascade/scope-implicit-006-print.html
vendored
Normal file
31
tests/wpt/tests/css/css-cascade/scope-implicit-006-print.html
vendored
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com">
|
||||||
|
<link rel="help" href="drafts.csswg.org/css-cascade-6/#scoped-styles">
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930618">
|
||||||
|
<div>
|
||||||
|
<style id="os">
|
||||||
|
@scope {
|
||||||
|
.a {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p>Test passes if there is a filled green square.</p>
|
||||||
|
<div class="a"></div>
|
||||||
|
<div>
|
||||||
|
<template shadowrootmode=open>
|
||||||
|
<style id="is">
|
||||||
|
@scope {
|
||||||
|
.a {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -49,8 +49,9 @@
|
||||||
<div id="item2"></div>
|
<div id="item2"></div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
setup(() => assert_implements_size_container_queries());
|
setup(() => assert_implements_size_container_queries(), { explicit_done: true });
|
||||||
|
|
||||||
|
document.fonts.ready.then(() => {
|
||||||
const item1_width = parseInt(getComputedStyle(item1).width);
|
const item1_width = parseInt(getComputedStyle(item1).width);
|
||||||
const item2_width = parseInt(getComputedStyle(item2).width);
|
const item2_width = parseInt(getComputedStyle(item2).width);
|
||||||
const container_width = parseInt(getComputedStyle(container).width);
|
const container_width = parseInt(getComputedStyle(container).width);
|
||||||
|
@ -73,4 +74,7 @@
|
||||||
test(() => {
|
test(() => {
|
||||||
assert_equals(parseInt(getComputedStyle(item2, "::before").width), item2_width);
|
assert_equals(parseInt(getComputedStyle(item2, "::before").width), item2_width);
|
||||||
}, "The size of the flex item #2 should be given by its contents");
|
}, "The size of the flex item #2 should be given by its contents");
|
||||||
|
|
||||||
|
done();
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<script src="support/cq-testcommon.js"></script>
|
<script src="support/cq-testcommon.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
setup(() => assert_implements_size_container_queries());
|
setup(() => assert_implements_size_container_queries(), { explicit_done: true });
|
||||||
|
|
||||||
// Inflate a <template> subtree into #main, run the test function,
|
// Inflate a <template> subtree into #main, run the test function,
|
||||||
// then clean up.
|
// then clean up.
|
||||||
|
@ -171,12 +171,14 @@ test_template(document.currentScript.previousElementSibling, (t) => {
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
test_template(document.currentScript.previousElementSibling, (t) => {
|
document.fonts.load("10px Ahem").then(() => {
|
||||||
t.add_cleanup(() => main.classList.remove("larger"));
|
test_template(document.currentScript.previousElementSibling, (t) => {
|
||||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, red);
|
t.add_cleanup(() => main.classList.remove("larger"));
|
||||||
main.classList.add("larger");
|
assert_equals(getComputedStyle(main.querySelector("#test")).color, red);
|
||||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, green);
|
main.classList.add("larger");
|
||||||
}, 'cap units respond to changes');
|
assert_equals(getComputedStyle(main.querySelector("#test")).color, green);
|
||||||
|
}, 'cap units respond to changes');
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -319,10 +321,14 @@ test_template(document.currentScript.previousElementSibling, (t) => {
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
test_template(document.currentScript.previousElementSibling, (t) => {
|
document.fonts.load("10px Ahem").then(() => {
|
||||||
t.add_cleanup(() => document.documentElement.classList.remove("larger"));
|
test_template(document.currentScript.previousElementSibling, (t) => {
|
||||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, red);
|
t.add_cleanup(() => document.documentElement.classList.remove("larger"));
|
||||||
document.documentElement.classList.add("larger");
|
assert_equals(getComputedStyle(main.querySelector("#test")).color, red);
|
||||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, green);
|
document.documentElement.classList.add("larger");
|
||||||
}, 'rcap units respond to changes');
|
assert_equals(getComputedStyle(main.querySelector("#test")).color, green);
|
||||||
|
}, 'rcap units respond to changes');
|
||||||
|
|
||||||
|
done();
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
1
tests/wpt/tests/css/css-flexbox/META.yml
vendored
1
tests/wpt/tests/css/css-flexbox/META.yml
vendored
|
@ -2,7 +2,6 @@ spec: https://drafts.csswg.org/css-flexbox/
|
||||||
suggested_reviewers:
|
suggested_reviewers:
|
||||||
- kojiishi
|
- kojiishi
|
||||||
- plinss
|
- plinss
|
||||||
- cbiesinger
|
|
||||||
- fantasai
|
- fantasai
|
||||||
- rachelandrew
|
- rachelandrew
|
||||||
- tabatkins
|
- tabatkins
|
||||||
|
|
|
@ -28,6 +28,9 @@ features:
|
||||||
files:
|
files:
|
||||||
- alternates-order.html
|
- alternates-order.html
|
||||||
- font-variant-alternates-*
|
- font-variant-alternates-*
|
||||||
|
- name: font-variant-emoji
|
||||||
|
files:
|
||||||
|
- font-variant-emoji-*
|
||||||
- name: font-variant-position
|
- name: font-variant-position
|
||||||
files:
|
files:
|
||||||
- font-variant-position-*
|
- font-variant-position-*
|
||||||
|
|
|
@ -29,3 +29,9 @@ features:
|
||||||
- name: font-variant-alternates
|
- name: font-variant-alternates
|
||||||
files:
|
files:
|
||||||
- font-variant-alternates-*
|
- font-variant-alternates-*
|
||||||
|
- name: font-variant-emoji
|
||||||
|
files:
|
||||||
|
- font-variant-emoji-*
|
||||||
|
- name: font-variant-position
|
||||||
|
files:
|
||||||
|
- font-variant-position-*
|
||||||
|
|
15
tests/wpt/tests/css/css-gaps/agnostic/gap-decorations-011-crash.html
vendored
Normal file
15
tests/wpt/tests/css/css-gaps/agnostic/gap-decorations-011-crash.html
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<head>
|
||||||
|
<title>Make sure we don't crash when we don't have a gap and also have a repeater for color</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
|
||||||
|
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
|
||||||
|
</head>
|
||||||
|
<style>
|
||||||
|
#current {
|
||||||
|
column-rule-style: solid;
|
||||||
|
columns: 2;
|
||||||
|
height: 1px;
|
||||||
|
column-rule-color: repeat(auto, blue);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="current"></div>
|
|
@ -26,7 +26,7 @@
|
||||||
float: left;
|
float: left;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
width: 640px;
|
width: 160px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
float: right;
|
float: right;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
width: 640px;
|
width: 160px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: green;
|
||||||
|
clip-path: circle(25% at 50% 50%);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<div class="container"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
26
tests/wpt/tests/css/css-masking/clip-path/animations/clip-path-animation-circle-0-percent.html
vendored
Normal file
26
tests/wpt/tests/css/css-masking/clip-path/animations/clip-path-animation-circle-0-percent.html
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-shapes-1/#basic-shape-interpolation">
|
||||||
|
<link rel="match" href="clip-path-animation-circle-0-percent-ref.html">
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: green;
|
||||||
|
animation: clippath 20s steps(2, jump-end) -9.95s;
|
||||||
|
}
|
||||||
|
@keyframes clippath {
|
||||||
|
0% { clip-path: circle(0% at 50% 50%); }
|
||||||
|
100% { clip-path: circle(50% at 50% 50%); }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script src="/common/reftest-wait.js"></script>
|
||||||
|
<script src="/web-animations/resources/timing-utils.js"></script>
|
||||||
|
<body>
|
||||||
|
<div class="container"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
waitForAnimationTime(document.getAnimations()[0], 50).then(takeScreenshot);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: green;
|
||||||
|
clip-path: inset(25% 25%);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<div class="container"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
26
tests/wpt/tests/css/css-masking/clip-path/animations/clip-path-animation-inset-50-percent.html
vendored
Normal file
26
tests/wpt/tests/css/css-masking/clip-path/animations/clip-path-animation-inset-50-percent.html
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-shapes-1/#basic-shape-interpolation">
|
||||||
|
<link rel="match" href="clip-path-animation-inset-50-percent-ref.html">
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: green;
|
||||||
|
animation: clippath 20s steps(2, jump-end) -9.95s;
|
||||||
|
}
|
||||||
|
@keyframes clippath {
|
||||||
|
0% { clip-path: inset(50% 50%); }
|
||||||
|
100% { clip-path: inset(0% 0%); }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script src="/common/reftest-wait.js"></script>
|
||||||
|
<script src="/web-animations/resources/timing-utils.js"></script>
|
||||||
|
<body>
|
||||||
|
<div class="container"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
waitForAnimationTime(document.getAnimations()[0], 50).then(takeScreenshot);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
35
tests/wpt/tests/css/css-masking/clip-path/animations/clip-path-transition-allow-discrete.html
vendored
Normal file
35
tests/wpt/tests/css/css-masking/clip-path/animations/clip-path-transition-allow-discrete.html
vendored
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-shapes-1/#basic-shape-interpolation">
|
||||||
|
<link rel="match" href="clip-path-transition-ref.html">
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
clip-path: inset(50% 50%);
|
||||||
|
background-color: green;
|
||||||
|
transition-property: clip-path;
|
||||||
|
transition-duration: 20s;
|
||||||
|
transition-timing-function: steps(2, jump-end);
|
||||||
|
transition-delay: -9.95s;
|
||||||
|
transition-behavior: allow-discrete;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script src="/common/reftest-wait.js"></script>
|
||||||
|
<script src="/web-animations/resources/timing-utils.js"></script>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container" id="target"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function update() {
|
||||||
|
document.getElementById('target').style.clipPath = "circle(40% at 40% 40%)";
|
||||||
|
waitForAnimationTime(document.getAnimations()[0], 50).then(takeScreenshot);
|
||||||
|
}
|
||||||
|
requestAnimationFrame(function () {
|
||||||
|
requestAnimationFrame(update);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -1,87 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>CSS Mixins: Mixins depending on other mixins</title>
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-mixins-1/#apply-rule">
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<style>
|
|
||||||
@mixin --m1(@contents) {
|
|
||||||
@contents;
|
|
||||||
}
|
|
||||||
#e1 {
|
|
||||||
color: red;
|
|
||||||
@apply --m1 { color: green; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin --m2(@contents) {
|
|
||||||
@contents
|
|
||||||
}
|
|
||||||
#e2 {
|
|
||||||
color: red;
|
|
||||||
@apply --m1 { color: green; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin --m3(@contents) {
|
|
||||||
&.a {
|
|
||||||
@contents { color: blue; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.b {
|
|
||||||
color: red;
|
|
||||||
@apply --m3 { color: green; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin --m4(@contents) {
|
|
||||||
&.c {
|
|
||||||
@contents { color: green; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.d {
|
|
||||||
color: red;
|
|
||||||
@apply --m4;
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin --m5 {
|
|
||||||
@contents { color: red !important; }
|
|
||||||
color: green;
|
|
||||||
}
|
|
||||||
#e4 {
|
|
||||||
@apply --m5 { color: red !important; }
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="e1">This text should be green.</div>
|
|
||||||
<div id="e2">This text should be green.</div>
|
|
||||||
<div class="a b" id="e3">This text should be green.</div>
|
|
||||||
<div class="c d" id="e4">This text should be green.</div>
|
|
||||||
<div id="e5">This text should be green.</div>
|
|
||||||
<script>
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('e1');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, 'Simple @contents with no fallback');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('e2');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, 'Implicit semicolon after @contents, at end of block');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('e3');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, 'Block in @apply overrides fallback');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('e4');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, 'Fallback is used if @apply has no block');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('e5');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, '@contents is ignored if there is no @contents parameter');
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,29 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>CSS Mixins: Mixin from another stylesheet</title>
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-mixins-1/#using-mixins">
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
color: red;
|
|
||||||
@apply --m1;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style>
|
|
||||||
@mixin --m1() {
|
|
||||||
color: green;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div><div class="cls" id="target">This text should be green.</div></div>
|
|
||||||
<script>
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('target');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
75
tests/wpt/tests/css/css-mixins/shadow-dom.html
vendored
75
tests/wpt/tests/css/css-mixins/shadow-dom.html
vendored
|
@ -1,75 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>CSS Mixins: Shadow DOM</title>
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-mixins-1/#defining-mixins">
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<style>
|
|
||||||
@mixin --exists-only-outside-shadow() {
|
|
||||||
color: green;
|
|
||||||
}
|
|
||||||
#e4 {
|
|
||||||
color: green;
|
|
||||||
@apply --in-shadow;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="host">
|
|
||||||
<template shadowrootmode="open">
|
|
||||||
<style>
|
|
||||||
#e1 {
|
|
||||||
color: red;
|
|
||||||
@apply --exists-only-outside-shadow;
|
|
||||||
}
|
|
||||||
#e2 {
|
|
||||||
color: red;
|
|
||||||
@apply --m1;
|
|
||||||
}
|
|
||||||
#e3 {
|
|
||||||
color: red;
|
|
||||||
@apply --exists-only-in-adopted;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style>
|
|
||||||
@mixin --m1() {
|
|
||||||
color: green;
|
|
||||||
}
|
|
||||||
@mixin --in-shadow() {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<div id="e1">This text should be green.</div>
|
|
||||||
<div id="e2">This text should be green.</div>
|
|
||||||
<div id="e3">This text should be green.</div>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
<div id="e4">This text should be green.</div>
|
|
||||||
<script>
|
|
||||||
const sheet = new CSSStyleSheet();
|
|
||||||
sheet.replaceSync('@mixin --exists-only-in-adopted() { color: green; }');
|
|
||||||
document.getElementById('host').shadowRoot.adoptedStyleSheets = [sheet];
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('host').shadowRoot.getElementById('e1');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, 'Style in shadow DOM should have access to outside non-adopted mixins');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('host').shadowRoot.getElementById('e2');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, 'Style in shadow DOM should have access to inside mixins');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('host').shadowRoot.getElementById('e3');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, 'Style in shadow DOM should have access to mixins from adopted stylesheets');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
let target = document.getElementById('e4');
|
|
||||||
assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)');
|
|
||||||
}, 'Style outside shadow DOM should _not_ have access to inside mixins');
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Nested multicol, overflowed block with spanner in next outer column</title>
|
||||||
|
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||||
|
<link rel="help" href="https://issues.chromium.org/issues/364933065">
|
||||||
|
<div style="columns:2; column-fill:auto; height:100px;">
|
||||||
|
<div style="columns:2; column-fill:auto;">
|
||||||
|
<span>
|
||||||
|
<div style="height:10px;">
|
||||||
|
<span style="outline:solid;">
|
||||||
|
<div style="height:205px;"></div>
|
||||||
|
<div style="column-span:all; height:20px;"></div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Overflowed block with spanner</title>
|
||||||
|
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||||
|
<link rel="help" href="https://issues.chromium.org/issues/364933065">
|
||||||
|
<div style="columns:2; column-fill:auto; height:100px; line-height:50px;">
|
||||||
|
<span>
|
||||||
|
<div style="height:100px;">
|
||||||
|
<div style="height:150px;"></div>
|
||||||
|
<div style="column-span:all; height:20px;"></div>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
</div>
|
|
@ -1,4 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#possible-breaks">
|
<link rel="help" href="https://www.w3.org/TR/css-break-3/#possible-breaks">
|
||||||
<link rel="match" href="monolithic-overflow-024-print-ref.html">
|
<link rel="match" href="monolithic-overflow-024-print-ref.html">
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||||
<link rel="help" href="">
|
<link rel="help" href="">
|
||||||
<link rel="match" href="monolithic-overflow-025-print-ref.html">
|
<link rel="match" href="monolithic-overflow-025-print-ref.html">
|
||||||
|
|
|
@ -37,47 +37,49 @@ function checkMarkerSize(expectedWidth, expectedHeight) {
|
||||||
}
|
}
|
||||||
setup({explicit_done: true});
|
setup({explicit_done: true});
|
||||||
addEventListener("load", () => {
|
addEventListener("load", () => {
|
||||||
test(() => {
|
document.fonts.load("10px Ahem").then(() => {
|
||||||
// Marker string: "1. "
|
test(() => {
|
||||||
target.style.listStyleType = "decimal";
|
// Marker string: "1. "
|
||||||
checkMarkerSize("30px", "10px");
|
target.style.listStyleType = "decimal";
|
||||||
}, "Decimal ::marker");
|
checkMarkerSize("30px", "10px");
|
||||||
test(() => {
|
}, "Decimal ::marker");
|
||||||
// Marker string: "10. "
|
test(() => {
|
||||||
target.setAttribute("value", "10");
|
// Marker string: "10. "
|
||||||
checkMarkerSize("40px", "10px");
|
target.setAttribute("value", "10");
|
||||||
}, "Decimal ::marker with custom value");
|
checkMarkerSize("40px", "10px");
|
||||||
test(() => {
|
}, "Decimal ::marker with custom value");
|
||||||
// Marker string: "st"
|
test(() => {
|
||||||
target.style.listStyleType = "'st'";
|
// Marker string: "st"
|
||||||
checkMarkerSize("20px", "10px");
|
target.style.listStyleType = "'st'";
|
||||||
}, "String ::marker");
|
checkMarkerSize("20px", "10px");
|
||||||
test(() => {
|
}, "String ::marker");
|
||||||
// No marker box
|
test(() => {
|
||||||
target.style.listStyleType = "none";
|
// No marker box
|
||||||
checkMarkerSize("auto", "auto");
|
target.style.listStyleType = "none";
|
||||||
}, "::marker with no box due to 'list-style'");
|
checkMarkerSize("auto", "auto");
|
||||||
test(() => {
|
}, "::marker with no box due to 'list-style'");
|
||||||
// Marker contents: "foo", "bar"
|
test(() => {
|
||||||
target.style.setProperty("--content", "'foo' 'bar'");
|
// Marker contents: "foo", "bar"
|
||||||
checkMarkerSize("60px", "10px");
|
target.style.setProperty("--content", "'foo' 'bar'");
|
||||||
}, "::marker with custom string contents");
|
checkMarkerSize("60px", "10px");
|
||||||
test(() => {
|
}, "::marker with custom string contents");
|
||||||
// Marker contents: 100x50 image (+2px due to baseline alignment)
|
test(() => {
|
||||||
target.style.setProperty("--content", "var(--image)");
|
// Marker contents: 100x50 image (+2px due to baseline alignment)
|
||||||
checkMarkerSize("100px", "52px");
|
target.style.setProperty("--content", "var(--image)");
|
||||||
}, "::marker with custom image contents");
|
checkMarkerSize("100px", "52px");
|
||||||
test(() => {
|
}, "::marker with custom image contents");
|
||||||
// Marker contents: "foo", 100x50 image (+2px due to baseline alignment)
|
test(() => {
|
||||||
target.style.setProperty("--content", "'foo' var(--image)");
|
// Marker contents: "foo", 100x50 image (+2px due to baseline alignment)
|
||||||
checkMarkerSize("130px", "52px");
|
target.style.setProperty("--content", "'foo' var(--image)");
|
||||||
}, "::marker with custom string and image contents");
|
checkMarkerSize("130px", "52px");
|
||||||
test(() => {
|
}, "::marker with custom string and image contents");
|
||||||
// No marker box
|
test(() => {
|
||||||
target.style.listStyleType = "";
|
// No marker box
|
||||||
target.style.setProperty("--content", "none");
|
target.style.listStyleType = "";
|
||||||
checkMarkerSize("auto", "auto");
|
target.style.setProperty("--content", "none");
|
||||||
}, "::marker with no box due to 'content'");
|
checkMarkerSize("auto", "auto");
|
||||||
done();
|
}, "::marker with no box due to 'content'");
|
||||||
|
done();
|
||||||
|
});
|
||||||
}, {once: true});
|
}, {once: true});
|
||||||
</script>
|
</script>
|
||||||
|
|
12
tests/wpt/tests/css/css-scroll-anchoring/fresh-table-col-crash.html
vendored
Normal file
12
tests/wpt/tests/css/css-scroll-anchoring/fresh-table-col-crash.html
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Scroll anchoring at focused input element inside editable newly created table-column</title>
|
||||||
|
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||||
|
<link rel="help" href="https://issues.chromium.org/issues/427715253">
|
||||||
|
<div id="container" contenteditable>
|
||||||
|
<input id="input" style="height:200vh;">
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
scrollTo(0, 10);
|
||||||
|
input.focus();
|
||||||
|
container.style.display = "table-column-group";
|
||||||
|
</script>
|
3
tests/wpt/tests/css/css-scroll-snap/scroll-initial-target/WEB_FEATURES.yml
vendored
Normal file
3
tests/wpt/tests/css/css-scroll-snap/scroll-initial-target/WEB_FEATURES.yml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
features:
|
||||||
|
- name: scroll-initial-target
|
||||||
|
files: "**"
|
|
@ -55,7 +55,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p><a href="https://quirks.spec.whatwg.org/#the-collapsing-table-quirk">The collapsing table quirk</a></p>
|
<p><a href="https://quirks.spec.whatwg.org/#the-collapsing-table-quirk">The collapsing table quirk</a></p>
|
||||||
<p class="error">Chrome Legacy/Edge/Safari ignore the quirk, FF does not. <b>Proposal: depreciate the quirk</b></p>
|
<p class="error">Chrome Legacy/Edge/Safari ignore the quirk, FF does not. <b>Proposal: deprecate the quirk</b></p>
|
||||||
<table style="border: 20px solid green" data-expected-height=40 data-expected-width=40></table>
|
<table style="border: 20px solid green" data-expected-height=40 data-expected-width=40></table>
|
||||||
|
|
||||||
<p><a href="https://quirks.spec.whatwg.org/#the-table-cell-width-calculation-quirk">The table cell width calculation quirk</a></p>
|
<p><a href="https://quirks.spec.whatwg.org/#the-table-cell-width-calculation-quirk">The table cell width calculation quirk</a></p>
|
||||||
|
@ -64,10 +64,10 @@
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p><a href="https://html.spec.whatwg.org/multipage/tables.html#algorithm-for-processing-rows">The "let <i>cell grows downward</i> be false" quirk</a></p>
|
<p><a href="https://html.spec.whatwg.org/multipage/tables.html#algorithm-for-processing-rows">The "let <i>cell grows downward</i> be false" quirk</a></p>
|
||||||
<p class="error">Chrome LayoutNG and Safari ignore the quirk, FF does not.</p>
|
<p class="error">Chrome LayoutNG and Safari ignore the quirk, FF does not. <b>Proposal: deprecate the quirk</b></p>
|
||||||
<table>
|
<table>
|
||||||
<tr style="height: 100px">
|
<tr style="height: 100px">
|
||||||
<td id="rowspan" rowspan="0" data-expected-height=100>100 height</td>
|
<td id="rowspan" rowspan="0" data-expected-height=208>208 height</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr style="height: 100px"></tr>
|
<tr style="height: 100px"></tr>
|
||||||
</table>
|
</table>
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
assert_equals(window.getComputedStyle(document.querySelector("#notitalic")).fontStyle, "normal");
|
assert_equals(window.getComputedStyle(document.querySelector("#notitalic")).fontStyle, "normal");
|
||||||
}, "decoration does not propagate into table");
|
}, "decoration does not propagate into table");
|
||||||
test(_ => {
|
test(_ => {
|
||||||
assert_equals(document.querySelector("#rowspan").rowSpan, 1);
|
assert_equals(document.querySelector("#rowspan").rowSpan, 0);
|
||||||
}, "rowspan can't be zero");
|
}, "rowspan can be zero");
|
||||||
document.fonts.ready.then(() => checkLayout("table"));
|
document.fonts.ready.then(() => checkLayout("table"));
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -2,3 +2,6 @@ features:
|
||||||
- name: text-emphasis
|
- name: text-emphasis
|
||||||
files:
|
files:
|
||||||
- text-emphasis-*
|
- text-emphasis-*
|
||||||
|
- name: text-underline-offset
|
||||||
|
files:
|
||||||
|
- text-underline-offset-*
|
||||||
|
|
4
tests/wpt/tests/css/css-text-decor/animations/WEB_FEATURES.yml
vendored
Normal file
4
tests/wpt/tests/css/css-text-decor/animations/WEB_FEATURES.yml
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
features:
|
||||||
|
- name: text-underline-offset
|
||||||
|
files:
|
||||||
|
- text-underline-offset-*
|
11
tests/wpt/tests/css/css-ui/caret-shape-block-color-004-ref.tentative.html
vendored
Normal file
11
tests/wpt/tests/css/css-ui/caret-shape-block-color-004-ref.tentative.html
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
font-size: 5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div><span>a</span>bc</div>
|
39
tests/wpt/tests/css/css-ui/caret-shape-block-color-004.tentative.html
vendored
Normal file
39
tests/wpt/tests/css/css-ui/caret-shape-block-color-004.tentative.html
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<title>caret-shape block color is the same as what is specified by caret-color property</title>
|
||||||
|
<link rel=help href="https://drafts.csswg.org/css-ui/#caret-shape">
|
||||||
|
<link rel="match" href="caret-shape-block-color-004-ref.tentative.html">
|
||||||
|
<script src="/common/reftest-wait.js"></script>
|
||||||
|
<meta name="assert"
|
||||||
|
content="Test checks that the opacity of caret-shape block color doesn't change when caret-color is auto. ">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
font-size: 5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#target {
|
||||||
|
caret-shape: block;
|
||||||
|
caret-animation: manual;
|
||||||
|
}
|
||||||
|
|
||||||
|
#target:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="target" contenteditable>abc</div>
|
||||||
|
<script>
|
||||||
|
target.focus();
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
target.style.caretShape = "block";
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
target.style.caretShape = "underscore";
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
target.style.caretShape = "block";
|
||||||
|
takeScreenshot();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
|
@ -23,6 +23,7 @@
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
background-color: limegreen;
|
background-color: limegreen;
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -29,34 +29,40 @@ function getBoundingClientRect(node, start, end) {
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
test(() => {
|
setup({ explicit_done: true });
|
||||||
const element = document.querySelector('#text-1');
|
|
||||||
const elementRect = element.getBoundingClientRect();
|
|
||||||
const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
|
|
||||||
assert_approx_equals(elementRect.x, rangeRect.x, 1);
|
|
||||||
assert_approx_equals(elementRect.y, rangeRect.y, 1);
|
|
||||||
assert_approx_equals(elementRect.width, rangeRect.width, 1);
|
|
||||||
assert_approx_equals(elementRect.height, rangeRect.height, 1);
|
|
||||||
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text>');
|
|
||||||
|
|
||||||
test(() => {
|
document.fonts.ready.then(() => {
|
||||||
const element = document.querySelector('#text-2');
|
test(() => {
|
||||||
const elementRect = element.getBoundingClientRect();
|
const element = document.querySelector('#text-1');
|
||||||
const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
|
const elementRect = element.getBoundingClientRect();
|
||||||
assert_approx_equals(elementRect.x, rangeRect.x, 1);
|
const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
|
||||||
assert_approx_equals(elementRect.y, rangeRect.y, 1);
|
assert_approx_equals(elementRect.x, rangeRect.x, 1);
|
||||||
assert_approx_equals(elementRect.width, rangeRect.width, 1);
|
assert_approx_equals(elementRect.y, rangeRect.y, 1);
|
||||||
assert_approx_equals(elementRect.height, rangeRect.height, 1);
|
assert_approx_equals(elementRect.width, rangeRect.width, 1);
|
||||||
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text> with a transform');
|
assert_approx_equals(elementRect.height, rangeRect.height, 1);
|
||||||
|
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text>');
|
||||||
|
|
||||||
test(() => {
|
test(() => {
|
||||||
const element = document.querySelector('#text-3');
|
const element = document.querySelector('#text-2');
|
||||||
const elementRect = element.getBoundingClientRect();
|
const elementRect = element.getBoundingClientRect();
|
||||||
const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
|
const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
|
||||||
assert_approx_equals(elementRect.x, rangeRect.x, 1);
|
assert_approx_equals(elementRect.x, rangeRect.x, 1);
|
||||||
assert_approx_equals(elementRect.y, rangeRect.y, 1);
|
assert_approx_equals(elementRect.y, rangeRect.y, 1);
|
||||||
assert_approx_equals(elementRect.width, rangeRect.width, 1);
|
assert_approx_equals(elementRect.width, rangeRect.width, 1);
|
||||||
assert_approx_equals(elementRect.height, rangeRect.height, 1);
|
assert_approx_equals(elementRect.height, rangeRect.height, 1);
|
||||||
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text> with a rotate');
|
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text> with a transform');
|
||||||
|
|
||||||
|
test(() => {
|
||||||
|
const element = document.querySelector('#text-3');
|
||||||
|
const elementRect = element.getBoundingClientRect();
|
||||||
|
const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
|
||||||
|
assert_approx_equals(elementRect.x, rangeRect.x, 1);
|
||||||
|
assert_approx_equals(elementRect.y, rangeRect.y, 1);
|
||||||
|
assert_approx_equals(elementRect.width, rangeRect.width, 1);
|
||||||
|
assert_approx_equals(elementRect.height, rangeRect.height, 1);
|
||||||
|
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text> with a rotate');
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
45
tests/wpt/tests/css/filter-effects/backdrop-filter-root-toggle-crash.html
vendored
Normal file
45
tests/wpt/tests/css/filter-effects/backdrop-filter-root-toggle-crash.html
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="test-wait">
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
#container {
|
||||||
|
view-transition-name: arandomname;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
#overlay {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#overlay.blur {
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="container">
|
||||||
|
<div id="overlay"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
async function doTest() {
|
||||||
|
let itersLeft = 10;
|
||||||
|
while (itersLeft-- > 0) {
|
||||||
|
await new Promise(resolve => window.requestAnimationFrame(resolve));
|
||||||
|
await new Promise(resolve => window.requestAnimationFrame(resolve));
|
||||||
|
document.getElementById('overlay').classList.toggle('blur');
|
||||||
|
}
|
||||||
|
document.documentElement.removeAttribute("class");
|
||||||
|
}
|
||||||
|
|
||||||
|
document.documentElement.addEventListener("TestRendered", doTest);
|
||||||
|
//window.addEventListener("load", doTest);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
22
tests/wpt/tests/css/filter-effects/feconvolve-divisor.html
vendored
Normal file
22
tests/wpt/tests/css/filter-effects/feconvolve-divisor.html
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>Filter primitive (feConvolveMatrix) with zero divisor</title>
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#feConvolveMatrixElement">
|
||||||
|
<link rel="match" href="reference/feconvolve-divisor-ref.html">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="800" height="250">
|
||||||
|
<defs>
|
||||||
|
<!-- Setting the divisor to 0 should result in the default value being
|
||||||
|
used instead.
|
||||||
|
-->
|
||||||
|
<filter id="f1" filterUnits="userSpaceOnUse"
|
||||||
|
x="100" y="100" width="100" height="100">
|
||||||
|
<feConvolveMatrix kernelMatrix="1 1 1 1 1 1 1 1 1"
|
||||||
|
divisor="0" preserveAlpha="false" bias=".5" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<rect x="100" y="100" width="100" height="100" fill="red"/>
|
||||||
|
<rect x="100" y="100" width="100" height="100" fill="lime"
|
||||||
|
filter="url(#f1)" />
|
||||||
|
</svg>
|
26
tests/wpt/tests/css/filter-effects/kernel-unit-length-001.html
vendored
Normal file
26
tests/wpt/tests/css/filter-effects/kernel-unit-length-001.html
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>If kernelUnitLength is omitted it should default to 1</title>
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/filter-effects-1/#element-attrdef-feconvolvematrix-kernelunitlength">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/filter-effects-1/#element-attrdef-fediffuselighting-kernelunitlength">
|
||||||
|
<link rel="match" href="reference/kernel-unit-length-ref.html">
|
||||||
|
<svg width="7.5cm" height="5cm" viewBox="0 0 200 120"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="MyFilter" filterUnits="userSpaceOnUse"
|
||||||
|
x="0" y="0" width="200" height="120">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/>
|
||||||
|
<feSpecularLighting in="blur" surfaceScale="5" specularConstant=".75"
|
||||||
|
specularExponent="20" lighting-color="#bbbbbb">
|
||||||
|
<fePointLight x="-5000" y="-10000" z="20000"/>
|
||||||
|
</feSpecularLighting>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<rect x="1" y="1" width="198" height="118" fill="#888888"/>
|
||||||
|
<g filter="url(#MyFilter)">
|
||||||
|
<path fill="none" stroke="#D90000" stroke-width="10"
|
||||||
|
d="M50,90 C0,90 0,30 50,30 L150,30 C200,30 200,90 150,90 z"/>
|
||||||
|
<path fill="#D90000"
|
||||||
|
d="M60,80 C30,80 30,40 60,40 L140,40 C170,40 170,80 140,80 z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
27
tests/wpt/tests/css/filter-effects/kernel-unit-length-002.html
vendored
Normal file
27
tests/wpt/tests/css/filter-effects/kernel-unit-length-002.html
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>If kernelUnitLength is negative or zero it should default to 1</title>
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/filter-effects-1/#element-attrdef-feconvolvematrix-kernelunitlength">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/filter-effects-1/#element-attrdef-fediffuselighting-kernelunitlength">
|
||||||
|
<link rel="match" href="reference/kernel-unit-length-ref.html">
|
||||||
|
<svg width="7.5cm" height="5cm" viewBox="0 0 200 120"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="MyFilter" filterUnits="userSpaceOnUse"
|
||||||
|
x="0" y="0" width="200" height="120">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/>
|
||||||
|
<feSpecularLighting in="blur" surfaceScale="5" specularConstant=".75"
|
||||||
|
specularExponent="20" lighting-color="#bbbbbb"
|
||||||
|
kernelUnitLength="0 -1">
|
||||||
|
<fePointLight x="-5000" y="-10000" z="20000"/>
|
||||||
|
</feSpecularLighting>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<rect x="1" y="1" width="198" height="118" fill="#888888"/>
|
||||||
|
<g filter="url(#MyFilter)">
|
||||||
|
<path fill="none" stroke="#D90000" stroke-width="10"
|
||||||
|
d="M50,90 C0,90 0,30 50,30 L150,30 C200,30 200,90 150,90 z"/>
|
||||||
|
<path fill="#D90000"
|
||||||
|
d="M60,80 C30,80 30,40 60,40 L140,40 C170,40 170,80 140,80 z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
19
tests/wpt/tests/css/filter-effects/lighting-region.html
vendored
Normal file
19
tests/wpt/tests/css/filter-effects/lighting-region.html
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>Test that no edge lighting highlights appear</title>
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/filter-effects-1/#FilterEffectsRegion">
|
||||||
|
<link rel="match" href="reference/lighting-region-ref.html">
|
||||||
|
<meta name="fuzzy" content="maxDifference=0-1; totalPixels=0-8012" />
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="250">
|
||||||
|
<defs>
|
||||||
|
<filter id="restrictedDiffuse" x="25%" y="25%" width="50%" height="50%">
|
||||||
|
<feDiffuseLighting>
|
||||||
|
<feDistantLight elevation="30" />
|
||||||
|
</feDiffuseLighting>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<rect x="100" y="100" width="100" height="100" fill="lightgreen" />
|
||||||
|
<rect x="100" y="100" width="100" height="100"
|
||||||
|
filter="url(#restrictedDiffuse)" />
|
||||||
|
</svg>
|
14
tests/wpt/tests/css/filter-effects/reference/feconvolve-divisor-ref.html
vendored
Normal file
14
tests/wpt/tests/css/filter-effects/reference/feconvolve-divisor-ref.html
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<!doctype html>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="800" height="250">
|
||||||
|
<defs>
|
||||||
|
<filter id="f1" filterUnits="userSpaceOnUse"
|
||||||
|
x="100" y="100" width="100" height="100">
|
||||||
|
<feConvolveMatrix kernelMatrix="1 1 1 1 1 1 1 1 1"
|
||||||
|
preserveAlpha="false" bias=".5" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<rect x="100" y="100" width="100" height="100" fill="lime"
|
||||||
|
filter="url(#f1)" />
|
||||||
|
</svg>
|
22
tests/wpt/tests/css/filter-effects/reference/kernel-unit-length-ref.html
vendored
Normal file
22
tests/wpt/tests/css/filter-effects/reference/kernel-unit-length-ref.html
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<svg width="7.5cm" height="5cm" viewBox="0 0 200 120"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="MyFilter" filterUnits="userSpaceOnUse"
|
||||||
|
x="0" y="0" width="200" height="120">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/>
|
||||||
|
<feSpecularLighting in="blur" surfaceScale="5" specularConstant=".75"
|
||||||
|
specularExponent="20" lighting-color="#bbbbbb"
|
||||||
|
kernelUnitLength="1 1">
|
||||||
|
<fePointLight x="-5000" y="-10000" z="20000"/>
|
||||||
|
</feSpecularLighting>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<rect x="1" y="1" width="198" height="118" fill="#888888"/>
|
||||||
|
<g filter="url(#MyFilter)">
|
||||||
|
<path fill="none" stroke="#D90000" stroke-width="10"
|
||||||
|
d="M50,90 C0,90 0,30 50,30 L150,30 C200,30 200,90 150,90 z"/>
|
||||||
|
<path fill="#D90000"
|
||||||
|
d="M60,80 C30,80 30,40 60,40 L140,40 C170,40 170,80 140,80 z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
8
tests/wpt/tests/css/filter-effects/reference/lighting-region-ref.html
vendored
Normal file
8
tests/wpt/tests/css/filter-effects/reference/lighting-region-ref.html
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<!doctype html>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="800" height="250">
|
||||||
|
|
||||||
|
<rect x="100" y="100" width="100" height="100" fill="lightgreen" />
|
||||||
|
<rect x="125" y="125" width="50" height="50" fill="rgba(188,188,188,188)" />
|
||||||
|
</svg>
|
||||||
|
|
|
@ -227,6 +227,12 @@
|
||||||
checkDOMMatrix(result, expected);
|
checkDOMMatrix(result, expected);
|
||||||
},"test rotateAxisAngle() ");
|
},"test rotateAxisAngle() ");
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
var result = new DOMMatrix([1, 1, 1, 1, 1, 1]).rotateAxisAngle(0, 0, 3, 90);
|
||||||
|
var expected = new DOMMatrix([1, 1, -1, -1, 1, 1]);
|
||||||
|
checkDOMMatrix(result, expected);
|
||||||
|
},"test rotateAxisAngle() on 2D matrix with 2D rotation");
|
||||||
|
|
||||||
test(function() {
|
test(function() {
|
||||||
var angleDeg = 75;
|
var angleDeg = 75;
|
||||||
var result = initialDOMMatrix().skewX(angleDeg);
|
var result = initialDOMMatrix().skewX(angleDeg);
|
||||||
|
|
|
@ -231,4 +231,24 @@
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}, "Mediation is required to get a DigitalCredential.");
|
}, "Mediation is required to get a DigitalCredential.");
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const throwingValues = [
|
||||||
|
BigInt(123),
|
||||||
|
(() => { const o = {}; o.self = o; return o; })(),
|
||||||
|
Symbol("foo")
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const badValue of throwingValues) {
|
||||||
|
const options = makeGetOptions("openid4vp");
|
||||||
|
options.digital.requests[0].data = badValue;
|
||||||
|
|
||||||
|
await promise_rejects_js(
|
||||||
|
t,
|
||||||
|
TypeError,
|
||||||
|
navigator.credentials.get(options),
|
||||||
|
`Should throw for: ${String(badValue)}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}, "Throws TypeError when request data is not JSON stringifiable.");
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -339,4 +339,6 @@ Emulation of browser APIs via [WebDriver BiDi Emulation](https://www.w3.org/TR/w
|
||||||
|
|
||||||
```eval_rst
|
```eval_rst
|
||||||
.. js:autofunction:: test_driver.bidi.emulation.set_geolocation_override
|
.. js:autofunction:: test_driver.bidi.emulation.set_geolocation_override
|
||||||
|
.. js:autofunction:: test_driver.bidi.emulation.set_locale_override
|
||||||
|
.. js:autofunction:: test_driver.bidi.emulation.set_screen_orientation_override
|
||||||
```
|
```
|
||||||
|
|
|
@ -112,11 +112,11 @@ test(function() {
|
||||||
assert_not_equals(element, null)
|
assert_not_equals(element, null)
|
||||||
assert_equals(element.nodeType, Node.ELEMENT_NODE)
|
assert_equals(element.nodeType, Node.ELEMENT_NODE)
|
||||||
assert_equals(element.ownerDocument, doc)
|
assert_equals(element.ownerDocument, doc)
|
||||||
var qualified = String(qualifiedName), names = []
|
var qualified = String(qualifiedName)
|
||||||
|
var names = []
|
||||||
var firstColonIndex = qualified.indexOf(":")
|
var firstColonIndex = qualified.indexOf(":")
|
||||||
if (firstColonIndex >= 0) {
|
if (firstColonIndex >= 0) {
|
||||||
names.push(qualified.substring(0, firstColonIndex));
|
names = qualifiedName.split(":", 2);
|
||||||
names.push(qualified.substring(firstColonIndex + 1));
|
|
||||||
} else {
|
} else {
|
||||||
names = [null, qualified]
|
names = [null, qualified]
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue