mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15: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.]
|
||||
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]
|
||||
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]
|
||||
bug: https://github.com/servo/servo/issues/35520
|
||||
|
||||
[@font-face unlayered overrides layered]
|
||||
expected: [FAIL, PASS]
|
||||
|
||||
[@font-face override between layers]
|
||||
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]
|
||||
expected: ERROR
|
||||
[em units respond to changes]
|
||||
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]
|
||||
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.]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
[sec-fetch-dest]
|
||||
expected: FAIL
|
||||
|
||||
[sec-fetch-storage-access - Same site]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,9 +2,6 @@
|
|||
[load event does not fire on window.open()]
|
||||
expected: FAIL
|
||||
|
||||
[load event does not fire on window.open('about:blank')]
|
||||
expected: FAIL
|
||||
|
||||
[load event does not fire on window.open('')]
|
||||
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
|
||||
[Test that transfer an OffscreenCanvas that has a webgl context throws exception in a worker.]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
[MIME-error (script): main]
|
||||
expected: FAIL
|
||||
|
||||
[404 (style): main]
|
||||
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]
|
||||
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]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
[Executing "test-suspend"]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -23,3 +22,12 @@
|
|||
|
||||
[< [test-resume\] 1 out of 4 assertions were failed.]
|
||||
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.]
|
||||
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.]
|
||||
expected: FAIL
|
||||
|
||||
[cancel1: cancel setValueCurve]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
[realtime-conv.html]
|
||||
[Executing "test"]
|
||||
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 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=";
|
||||
|
||||
function get_iframe_url(test_type, policy, script_url) {
|
||||
|
@ -25,6 +25,12 @@
|
|||
`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"]) {
|
||||
|
||||
promise_test(async t => {
|
||||
|
@ -115,6 +121,36 @@
|
|||
assert_equals(msgEvent.data, 'SCRIPT_RAN');
|
||||
}, "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>
|
||||
|
|
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>
|
||||
<html>
|
||||
<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>
|
||||
<html>
|
||||
<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');
|
||||
assert_equals(cookies.length, 1);
|
||||
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');
|
||||
|
||||
promise_test(async testCase => {
|
||||
|
|
|
@ -3,12 +3,13 @@
|
|||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/cookies/resources/cookie-helper.sub.js"></script>
|
||||
<script>
|
||||
let counter = 0;
|
||||
function create_test(prefix, params, shouldExistInDOM, shouldExistViaHTTP, title) {
|
||||
promise_test(t => {
|
||||
var name = prefix + "prefixtestcookie";
|
||||
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;
|
||||
|
||||
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="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style type="text/css"><![CDATA[
|
||||
<style type="text/css">
|
||||
div
|
||||
{
|
||||
background-color: orange;
|
||||
|
@ -18,7 +18,6 @@
|
|||
padding: 0em 2em;
|
||||
width: 3em;
|
||||
}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
@ -30,4 +29,4 @@
|
|||
<div>123</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -67,6 +67,8 @@ body {
|
|||
}
|
||||
</style>
|
||||
<script>
|
||||
setup({ explicit_done: true });
|
||||
|
||||
test(() => {
|
||||
const target = test1.querySelector('.target');
|
||||
const style = getComputedStyle(target);
|
||||
|
@ -98,19 +100,24 @@ test(() => {
|
|||
</div>
|
||||
</div>
|
||||
<script>
|
||||
test(() => {
|
||||
const targets = test2.querySelectorAll('.target');
|
||||
// Ensure Ahem font has a chance to load before examining layout.
|
||||
document.fonts.ready.then(() => {
|
||||
test(() => {
|
||||
const targets = test2.querySelectorAll('.target');
|
||||
|
||||
const style1 = getComputedStyle(targets[0]);
|
||||
assert_equals(style1.top, '20px');
|
||||
assert_equals(style1.bottom, '0px');
|
||||
assert_equals(style1.left, '-120px');
|
||||
assert_equals(style1.right, '80px');
|
||||
const style1 = getComputedStyle(targets[0]);
|
||||
assert_equals(style1.top, '20px');
|
||||
assert_equals(style1.bottom, '0px');
|
||||
assert_equals(style1.left, '-120px');
|
||||
assert_equals(style1.right, '80px');
|
||||
|
||||
const style2 = getComputedStyle(targets[1]);
|
||||
assert_equals(style2.top, '20px');
|
||||
assert_equals(style2.bottom, '0px');
|
||||
assert_equals(style2.left, '0px');
|
||||
assert_equals(style2.right, '0px');
|
||||
}, 'getComputedStyle() with fragmented containing block in inline layout');
|
||||
const style2 = getComputedStyle(targets[1]);
|
||||
assert_equals(style2.top, '20px');
|
||||
assert_equals(style2.bottom, '0px');
|
||||
assert_equals(style2.left, '0px');
|
||||
assert_equals(style2.right, '0px');
|
||||
}, 'getComputedStyle() with fragmented containing block in inline layout');
|
||||
|
||||
done();
|
||||
})
|
||||
</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>
|
||||
<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 item2_width = parseInt(getComputedStyle(item2).width);
|
||||
const container_width = parseInt(getComputedStyle(container).width);
|
||||
|
@ -73,4 +74,7 @@
|
|||
test(() => {
|
||||
assert_equals(parseInt(getComputedStyle(item2, "::before").width), item2_width);
|
||||
}, "The size of the flex item #2 should be given by its contents");
|
||||
|
||||
done();
|
||||
})
|
||||
</script>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<script src="support/cq-testcommon.js"></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,
|
||||
// then clean up.
|
||||
|
@ -171,12 +171,14 @@ test_template(document.currentScript.previousElementSibling, (t) => {
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
test_template(document.currentScript.previousElementSibling, (t) => {
|
||||
t.add_cleanup(() => main.classList.remove("larger"));
|
||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, red);
|
||||
main.classList.add("larger");
|
||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, green);
|
||||
}, 'cap units respond to changes');
|
||||
document.fonts.load("10px Ahem").then(() => {
|
||||
test_template(document.currentScript.previousElementSibling, (t) => {
|
||||
t.add_cleanup(() => main.classList.remove("larger"));
|
||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, red);
|
||||
main.classList.add("larger");
|
||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, green);
|
||||
}, 'cap units respond to changes');
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -319,10 +321,14 @@ test_template(document.currentScript.previousElementSibling, (t) => {
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
test_template(document.currentScript.previousElementSibling, (t) => {
|
||||
t.add_cleanup(() => document.documentElement.classList.remove("larger"));
|
||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, red);
|
||||
document.documentElement.classList.add("larger");
|
||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, green);
|
||||
}, 'rcap units respond to changes');
|
||||
document.fonts.load("10px Ahem").then(() => {
|
||||
test_template(document.currentScript.previousElementSibling, (t) => {
|
||||
t.add_cleanup(() => document.documentElement.classList.remove("larger"));
|
||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, red);
|
||||
document.documentElement.classList.add("larger");
|
||||
assert_equals(getComputedStyle(main.querySelector("#test")).color, green);
|
||||
}, 'rcap units respond to changes');
|
||||
|
||||
done();
|
||||
})
|
||||
</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:
|
||||
- kojiishi
|
||||
- plinss
|
||||
- cbiesinger
|
||||
- fantasai
|
||||
- rachelandrew
|
||||
- tabatkins
|
||||
|
|
|
@ -28,6 +28,9 @@ features:
|
|||
files:
|
||||
- alternates-order.html
|
||||
- font-variant-alternates-*
|
||||
- name: font-variant-emoji
|
||||
files:
|
||||
- font-variant-emoji-*
|
||||
- name: font-variant-position
|
||||
files:
|
||||
- font-variant-position-*
|
||||
|
|
|
@ -29,3 +29,9 @@ features:
|
|||
- name: font-variant-alternates
|
||||
files:
|
||||
- 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;
|
||||
height: 80px;
|
||||
margin-top: 2px;
|
||||
width: 640px;
|
||||
width: 160px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
float: right;
|
||||
height: 80px;
|
||||
margin-top: 2px;
|
||||
width: 640px;
|
||||
width: 160px;
|
||||
}
|
||||
</style>
|
||||
</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>
|
||||
<meta name="timeout" content="long">
|
||||
<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="match" href="monolithic-overflow-024-print-ref.html">
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<meta name="timeout" content="long">
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="">
|
||||
<link rel="match" href="monolithic-overflow-025-print-ref.html">
|
||||
|
|
|
@ -37,47 +37,49 @@ function checkMarkerSize(expectedWidth, expectedHeight) {
|
|||
}
|
||||
setup({explicit_done: true});
|
||||
addEventListener("load", () => {
|
||||
test(() => {
|
||||
// Marker string: "1. "
|
||||
target.style.listStyleType = "decimal";
|
||||
checkMarkerSize("30px", "10px");
|
||||
}, "Decimal ::marker");
|
||||
test(() => {
|
||||
// Marker string: "10. "
|
||||
target.setAttribute("value", "10");
|
||||
checkMarkerSize("40px", "10px");
|
||||
}, "Decimal ::marker with custom value");
|
||||
test(() => {
|
||||
// Marker string: "st"
|
||||
target.style.listStyleType = "'st'";
|
||||
checkMarkerSize("20px", "10px");
|
||||
}, "String ::marker");
|
||||
test(() => {
|
||||
// No marker box
|
||||
target.style.listStyleType = "none";
|
||||
checkMarkerSize("auto", "auto");
|
||||
}, "::marker with no box due to 'list-style'");
|
||||
test(() => {
|
||||
// Marker contents: "foo", "bar"
|
||||
target.style.setProperty("--content", "'foo' 'bar'");
|
||||
checkMarkerSize("60px", "10px");
|
||||
}, "::marker with custom string contents");
|
||||
test(() => {
|
||||
// Marker contents: 100x50 image (+2px due to baseline alignment)
|
||||
target.style.setProperty("--content", "var(--image)");
|
||||
checkMarkerSize("100px", "52px");
|
||||
}, "::marker with custom image contents");
|
||||
test(() => {
|
||||
// Marker contents: "foo", 100x50 image (+2px due to baseline alignment)
|
||||
target.style.setProperty("--content", "'foo' var(--image)");
|
||||
checkMarkerSize("130px", "52px");
|
||||
}, "::marker with custom string and image contents");
|
||||
test(() => {
|
||||
// No marker box
|
||||
target.style.listStyleType = "";
|
||||
target.style.setProperty("--content", "none");
|
||||
checkMarkerSize("auto", "auto");
|
||||
}, "::marker with no box due to 'content'");
|
||||
done();
|
||||
document.fonts.load("10px Ahem").then(() => {
|
||||
test(() => {
|
||||
// Marker string: "1. "
|
||||
target.style.listStyleType = "decimal";
|
||||
checkMarkerSize("30px", "10px");
|
||||
}, "Decimal ::marker");
|
||||
test(() => {
|
||||
// Marker string: "10. "
|
||||
target.setAttribute("value", "10");
|
||||
checkMarkerSize("40px", "10px");
|
||||
}, "Decimal ::marker with custom value");
|
||||
test(() => {
|
||||
// Marker string: "st"
|
||||
target.style.listStyleType = "'st'";
|
||||
checkMarkerSize("20px", "10px");
|
||||
}, "String ::marker");
|
||||
test(() => {
|
||||
// No marker box
|
||||
target.style.listStyleType = "none";
|
||||
checkMarkerSize("auto", "auto");
|
||||
}, "::marker with no box due to 'list-style'");
|
||||
test(() => {
|
||||
// Marker contents: "foo", "bar"
|
||||
target.style.setProperty("--content", "'foo' 'bar'");
|
||||
checkMarkerSize("60px", "10px");
|
||||
}, "::marker with custom string contents");
|
||||
test(() => {
|
||||
// Marker contents: 100x50 image (+2px due to baseline alignment)
|
||||
target.style.setProperty("--content", "var(--image)");
|
||||
checkMarkerSize("100px", "52px");
|
||||
}, "::marker with custom image contents");
|
||||
test(() => {
|
||||
// Marker contents: "foo", 100x50 image (+2px due to baseline alignment)
|
||||
target.style.setProperty("--content", "'foo' var(--image)");
|
||||
checkMarkerSize("130px", "52px");
|
||||
}, "::marker with custom string and image contents");
|
||||
test(() => {
|
||||
// No marker box
|
||||
target.style.listStyleType = "";
|
||||
target.style.setProperty("--content", "none");
|
||||
checkMarkerSize("auto", "auto");
|
||||
}, "::marker with no box due to 'content'");
|
||||
done();
|
||||
});
|
||||
}, {once: true});
|
||||
</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>
|
||||
|
||||
<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>
|
||||
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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 style="height: 100px"></tr>
|
||||
</table>
|
||||
|
@ -82,7 +82,7 @@
|
|||
assert_equals(window.getComputedStyle(document.querySelector("#notitalic")).fontStyle, "normal");
|
||||
}, "decoration does not propagate into table");
|
||||
test(_ => {
|
||||
assert_equals(document.querySelector("#rowspan").rowSpan, 1);
|
||||
}, "rowspan can't be zero");
|
||||
assert_equals(document.querySelector("#rowspan").rowSpan, 0);
|
||||
}, "rowspan can be zero");
|
||||
document.fonts.ready.then(() => checkLayout("table"));
|
||||
</script>
|
||||
|
|
|
@ -2,3 +2,6 @@ features:
|
|||
- name: text-emphasis
|
||||
files:
|
||||
- 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;
|
||||
background-color: limegreen;
|
||||
border: 1px solid black;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -29,34 +29,40 @@ function getBoundingClientRect(node, start, end) {
|
|||
return rect;
|
||||
}
|
||||
|
||||
test(() => {
|
||||
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>');
|
||||
setup({ explicit_done: true });
|
||||
|
||||
test(() => {
|
||||
const element = document.querySelector('#text-2');
|
||||
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 transform');
|
||||
document.fonts.ready.then(() => {
|
||||
test(() => {
|
||||
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(() => {
|
||||
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');
|
||||
test(() => {
|
||||
const element = document.querySelector('#text-2');
|
||||
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 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>
|
||||
</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);
|
||||
},"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() {
|
||||
var angleDeg = 75;
|
||||
var result = initialDOMMatrix().skewX(angleDeg);
|
||||
|
|
|
@ -231,4 +231,24 @@
|
|||
);
|
||||
}
|
||||
}, "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>
|
||||
|
|
|
@ -339,4 +339,6 @@ Emulation of browser APIs via [WebDriver BiDi Emulation](https://www.w3.org/TR/w
|
|||
|
||||
```eval_rst
|
||||
.. 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_equals(element.nodeType, Node.ELEMENT_NODE)
|
||||
assert_equals(element.ownerDocument, doc)
|
||||
var qualified = String(qualifiedName), names = []
|
||||
var qualified = String(qualifiedName)
|
||||
var names = []
|
||||
var firstColonIndex = qualified.indexOf(":")
|
||||
if (firstColonIndex >= 0) {
|
||||
names.push(qualified.substring(0, firstColonIndex));
|
||||
names.push(qualified.substring(firstColonIndex + 1));
|
||||
names = qualifiedName.split(":", 2);
|
||||
} else {
|
||||
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