mirror of
https://github.com/servo/servo.git
synced 2025-08-29 17:18:23 +01:00
Sync WPT with upstream (24-08-2025) (#38893)
Automated downstream sync of changes from upstream as of 24-08-2025 [no-wpt-sync] Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
This commit is contained in:
parent
1fc857865f
commit
fa42968a61
365 changed files with 7904 additions and 2377 deletions
38
tests/wpt/meta/FileAPI/blob/Blob-slice.any.js.ini
vendored
Normal file
38
tests/wpt/meta/FileAPI/blob/Blob-slice.any.js.ini
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
[Blob-slice.any.html]
|
||||
[Slicing test: slice (1,1).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,3).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,5).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,7).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,8).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,9).]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[Blob-slice.any.worker.html]
|
||||
[Slicing test: slice (1,1).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,3).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,5).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,7).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,8).]
|
||||
expected: FAIL
|
||||
|
||||
[Slicing test: slice (1,9).]
|
||||
expected: FAIL
|
|
@ -12,6 +12,3 @@
|
|||
|
||||
[Revoke blob URL after creating Request, then clone Request, will fetch]
|
||||
expected: FAIL
|
||||
|
||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
||||
expected: FAIL
|
||||
|
|
66
tests/wpt/meta/IndexedDB/idlharness.any.js.ini
vendored
66
tests/wpt/meta/IndexedDB/idlharness.any.js.ini
vendored
|
@ -134,6 +134,39 @@
|
|||
[IDBFactory interface: [object IDBFactory\] must inherit property "databases()" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[IDBObjectStore interface: operation getAllRecords(optional IDBGetAllOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[IDBIndex interface: operation getAllRecords(optional IDBGetAllOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: attribute key]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: attribute primaryKey]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: attribute value]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
@ -270,3 +303,36 @@
|
|||
|
||||
[IDBFactory interface: [object IDBFactory\] must inherit property "databases()" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[IDBObjectStore interface: operation getAllRecords(optional IDBGetAllOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[IDBIndex interface: operation getAllRecords(optional IDBGetAllOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: attribute key]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: attribute primaryKey]
|
||||
expected: FAIL
|
||||
|
||||
[IDBRecord interface: attribute value]
|
||||
expected: FAIL
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
[Deactivation of new transactions happens at end of invocation]
|
||||
expected: FAIL
|
||||
|
||||
[New transactions are deactivated before next task]
|
||||
expected: FAIL
|
||||
|
||||
[New transactions from microtask are deactivated before next task]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[transaction-deactivation-timing.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
|
1758
tests/wpt/meta/MANIFEST.json
vendored
1758
tests/wpt/meta/MANIFEST.json
vendored
File diff suppressed because it is too large
Load diff
4
tests/wpt/meta/content-security-policy/xslt/document-function-blocked.html.ini
vendored
Normal file
4
tests/wpt/meta/content-security-policy/xslt/document-function-blocked.html.ini
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
[document-function-blocked.html]
|
||||
expected: TIMEOUT
|
||||
[XSL document() function is blocked by CSP]
|
||||
expected: TIMEOUT
|
4
tests/wpt/meta/content-security-policy/xslt/xsltprocessor-include-blocked.html.ini
vendored
Normal file
4
tests/wpt/meta/content-security-policy/xslt/xsltprocessor-include-blocked.html.ini
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
[xsltprocessor-include-blocked.html]
|
||||
expected: TIMEOUT
|
||||
[xsltprocessor-include-blocked]
|
||||
expected: TIMEOUT
|
3
tests/wpt/meta/css/css-cascade/layer-cssom-order-reverse.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-cascade/layer-cssom-order-reverse.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[layer-cssom-order-reverse.html]
|
||||
[Delete layer invalidates @font-face]
|
||||
expected: FAIL
|
|
@ -5,3 +5,9 @@
|
|||
|
||||
[@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
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[chrome-bug-439886903-crash.html]
|
||||
expected: TIMEOUT
|
2
tests/wpt/meta/css/css-fonts/downloadable-font-scoped-to-document.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-fonts/downloadable-font-scoped-to-document.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
[downloadable-font-scoped-to-document.html]
|
||||
expected: FAIL
|
12
tests/wpt/meta/css/css-mixins/cssom.tentative.html.ini
vendored
Normal file
12
tests/wpt/meta/css/css-mixins/cssom.tentative.html.ini
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
[cssom.tentative.html]
|
||||
[serialization of @mixin]
|
||||
expected: FAIL
|
||||
|
||||
[serialization of rule with @apply]
|
||||
expected: FAIL
|
||||
|
||||
[serialization of @mixin with @contents]
|
||||
expected: FAIL
|
||||
|
||||
[serialization of rule with @apply and contents argument]
|
||||
expected: FAIL
|
9
tests/wpt/meta/css/css-mixins/invalidation.tentative.html.ini
vendored
Normal file
9
tests/wpt/meta/css/css-mixins/invalidation.tentative.html.ini
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
[invalidation.tentative.html]
|
||||
[invalidation of @mixin from same stylesheet]
|
||||
expected: FAIL
|
||||
|
||||
[invalidation of @mixin from different stylesheet]
|
||||
expected: FAIL
|
||||
|
||||
[invalidation on adding @apply rule]
|
||||
expected: FAIL
|
3
tests/wpt/meta/css/css-mixins/media-queries.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-mixins/media-queries.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[media-queries.html]
|
||||
[CSS Mixins: Media Queries and invalidation]
|
||||
expected: FAIL
|
18
tests/wpt/meta/css/css-transforms/parsing/rotate-parsing-computed.html.ini
vendored
Normal file
18
tests/wpt/meta/css/css-transforms/parsing/rotate-parsing-computed.html.ini
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
[rotate-parsing-computed.html]
|
||||
[Property rotate value '-0.5 0 0 400grad']
|
||||
expected: FAIL
|
||||
|
||||
[Property rotate value '-1 0 0 400grad']
|
||||
expected: FAIL
|
||||
|
||||
[Property rotate value '0 -0.5 0 400grad']
|
||||
expected: FAIL
|
||||
|
||||
[Property rotate value '0 -1 0 400grad']
|
||||
expected: FAIL
|
||||
|
||||
[Property rotate value '0 0 -0.5 400grad']
|
||||
expected: FAIL
|
||||
|
||||
[Property rotate value '0 0 -1 400grad']
|
||||
expected: FAIL
|
|
@ -1,3 +1,21 @@
|
|||
[rotate-parsing-valid.html]
|
||||
[e.style['rotate'\] = "z 400grad" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['rotate'\] = "-0.5 0 0 400grad" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['rotate'\] = "-1 0 0 400grad" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['rotate'\] = "0 -0.5 0 400grad" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['rotate'\] = "0 -1 0 400grad" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['rotate'\] = "0 0 -0.5 400grad" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['rotate'\] = "0 0 -1 400grad" should set the property value]
|
||||
expected: FAIL
|
||||
|
|
|
@ -35,9 +35,6 @@
|
|||
[CSS Values and Units Test: attr 12]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 16]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 17]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -62,9 +59,6 @@
|
|||
[CSS Values and Units Test: attr 23]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 14]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 28]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -74,18 +68,9 @@
|
|||
[CSS Values and Units Test: attr 40]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 41]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 42]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 43]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 44]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 45]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -122,9 +107,6 @@
|
|||
[CSS Values and Units Test: attr 59]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 60]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 61]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -158,9 +140,6 @@
|
|||
[CSS Values and Units Test: attr 29]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 32]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 71]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -185,15 +164,6 @@
|
|||
[CSS Values and Units Test: attr 78]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 15]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 30]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 31]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 33]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -212,15 +182,6 @@
|
|||
[CSS Values and Units Test: attr 82]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 92]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 93]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 94]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 8]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -239,5 +200,44 @@
|
|||
[CSS Values and Units Test: attr 83]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 95]
|
||||
[CSS Values and Units Test: attr 35]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 36]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 38]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 54]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 84]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 85]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 86]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 87]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 88]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 89]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 98]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 99]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 100]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Values and Units Test: attr 101]
|
||||
expected: FAIL
|
||||
|
|
2
tests/wpt/meta/css/filter-effects/backdrop-filter-inline-positioning.html.ini
vendored
Normal file
2
tests/wpt/meta/css/filter-effects/backdrop-filter-inline-positioning.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
[backdrop-filter-inline-positioning.html]
|
||||
expected: FAIL
|
2
tests/wpt/meta/css/filter-effects/svg-empty-element-with-filter-001.html.ini
vendored
Normal file
2
tests/wpt/meta/css/filter-effects/svg-empty-element-with-filter-001.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
[svg-empty-element-with-filter-001.html]
|
||||
expected: FAIL
|
30
tests/wpt/meta/css/selectors/parsing/parse-heading.html.ini
vendored
Normal file
30
tests/wpt/meta/css/selectors/parsing/parse-heading.html.ini
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
[parse-heading.html]
|
||||
[":heading" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
[":heading(2)" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
[":heading(99999)" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
[":heading(0)" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
[":heading(0, 1, 2)" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
[":heading(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
[":heading(-1)" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
["h1:heading" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
["h1:heading(1)" should be a valid selector]
|
||||
expected: FAIL
|
||||
|
||||
["h1:heading(2)" should be a valid selector]
|
||||
expected: FAIL
|
|
@ -30,7 +30,7 @@
|
|||
expected: ERROR
|
||||
|
||||
[AbortSignal.https.any.shadowrealm-in-audioworklet.html]
|
||||
expected: TIMEOUT
|
||||
expected: ERROR
|
||||
|
||||
[AbortSignal.any.shadowrealm-in-dedicatedworker.html]
|
||||
expected: ERROR
|
||||
|
|
2
tests/wpt/meta/dom/abort/event.any.js.ini
vendored
2
tests/wpt/meta/dom/abort/event.any.js.ini
vendored
|
@ -24,7 +24,7 @@
|
|||
expected: ERROR
|
||||
|
||||
[event.https.any.shadowrealm-in-audioworklet.html]
|
||||
expected: TIMEOUT
|
||||
expected: ERROR
|
||||
|
||||
[event.https.any.shadowrealm-in-serviceworker.html]
|
||||
expected: ERROR
|
||||
|
|
30
tests/wpt/meta/fetch/api/idlharness.any.js.ini
vendored
30
tests/wpt/meta/fetch/api/idlharness.any.js.ini
vendored
|
@ -64,6 +64,36 @@
|
|||
[Request interface: new Request('about:blank') must inherit property "duplex" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[FetchLaterResult interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[FetchLaterResult interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[FetchLaterResult interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[FetchLaterResult interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[FetchLaterResult interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[FetchLaterResult interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[FetchLaterResult interface: attribute activated]
|
||||
expected: FAIL
|
||||
|
||||
[Window interface: operation fetchLater(RequestInfo, optional DeferredRequestInit)]
|
||||
expected: FAIL
|
||||
|
||||
[Window interface: window must inherit property "fetchLater(RequestInfo, optional DeferredRequestInit)" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[Window interface: calling fetchLater(RequestInfo, optional DeferredRequestInit) on window with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
|
|
@ -49,3 +49,6 @@
|
|||
|
||||
[sec-fetch-storage-access - Not sent to non-trustworthy same-site destination]
|
||||
expected: FAIL
|
||||
|
||||
[sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination]
|
||||
expected: FAIL
|
||||
|
|
|
@ -10,6 +10,3 @@
|
|||
|
||||
[load event does not fire on window.open('about:blank?foo')]
|
||||
expected: FAIL
|
||||
|
||||
[load event does not fire on window.open('about:blank')]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
2
tests/wpt/meta/html/canvas/element/manual/text/canvas.2d.disconnected.html.ini
vendored
Normal file
2
tests/wpt/meta/html/canvas/element/manual/text/canvas.2d.disconnected.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
[canvas.2d.disconnected.html]
|
||||
expected: FAIL
|
|
@ -1,9 +0,0 @@
|
|||
[the-anchor-attribute-003.tentative.html]
|
||||
[::before uses originating element's implicit anchor]
|
||||
expected: FAIL
|
||||
|
||||
[::after uses originating element's implicit anchor]
|
||||
expected: FAIL
|
||||
|
||||
[::backdrop uses originating element's implicit anchor]
|
||||
expected: FAIL
|
|
@ -7107,3 +7107,21 @@
|
|||
|
||||
[HTMLTemplateElement interface: document.createElement("template") must inherit property "shadowRootCustomElementRegistry" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectedContentElement interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectedContentElement interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectedContentElement interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectedContentElement interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectedContentElement interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectedContentElement interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[document-with-fragment-empty.html]
|
||||
expected: TIMEOUT
|
||||
[Autofocus elements in iframed documents with empty fragments should work.]
|
||||
expected: FAIL
|
||||
|
||||
[Autofocus elements in top-level browsing context's documents with empty fragments should work.]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
|
2
tests/wpt/meta/html/semantics/forms/the-fieldset-element/disabled-003.html.ini
vendored
Normal file
2
tests/wpt/meta/html/semantics/forms/the-fieldset-element/disabled-003.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
[disabled-003.html]
|
||||
expected: CRASH
|
4
tests/wpt/meta/html/semantics/permission-element/parent-image-mask.tentative.html.ini
vendored
Normal file
4
tests/wpt/meta/html/semantics/permission-element/parent-image-mask.tentative.html.ini
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
[parent-image-mask.tentative.html]
|
||||
expected: TIMEOUT
|
||||
[Permission element is invalid if it has a parent with mask-image.]
|
||||
expected: TIMEOUT
|
4
tests/wpt/meta/html/semantics/permission-element/parent-mask.tentative.html.ini
vendored
Normal file
4
tests/wpt/meta/html/semantics/permission-element/parent-mask.tentative.html.ini
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
[parent-mask.tentative.html]
|
||||
expected: TIMEOUT
|
||||
[Permission element is invalid if it has a parent with a mask.]
|
||||
expected: TIMEOUT
|
3
tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini
vendored
Normal file
3
tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[077.html]
|
||||
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[script-src-event-handler.html]
|
||||
[Speculative parsing, page load: script-src-event-handler]
|
||||
expected: FAIL
|
|
@ -1,3 +1,3 @@
|
|||
[script-src-nomodule.html]
|
||||
[script-src-nomodule.tentative.html]
|
||||
[Speculative parsing, page load: script-src-nomodule]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[script-src-unsupported-language.html]
|
||||
[Speculative parsing, page load: script-src-unsupported-language]
|
||||
expected: FAIL
|
|
@ -1,3 +1,3 @@
|
|||
[script-src-unsupported-type.html]
|
||||
[script-src-unsupported-type.tentative.html]
|
||||
[Speculative parsing, page load: script-src-unsupported-type]
|
||||
expected: FAIL
|
|
@ -8,6 +8,12 @@
|
|||
[ServiceWorkerRegistration interface: operation getNotifications(optional GetNotificationOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[Notification interface: attribute navigate]
|
||||
expected: FAIL
|
||||
|
||||
[Notification interface: notification must inherit property "navigate" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.any.html]
|
||||
[ServiceWorkerRegistration interface: operation showNotification(DOMString, optional NotificationOptions)]
|
||||
|
@ -16,6 +22,12 @@
|
|||
[ServiceWorkerRegistration interface: operation getNotifications(optional GetNotificationOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[Notification interface: attribute navigate]
|
||||
expected: FAIL
|
||||
|
||||
[Notification interface: notification must inherit property "navigate" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
|
|
@ -56,9 +56,6 @@
|
|||
[MIME-blocked-nosniff (script): main]
|
||||
expected: FAIL
|
||||
|
||||
[CORS (xhr): main]
|
||||
expected: FAIL
|
||||
|
||||
[success (xhr): main]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -74,5 +71,5 @@
|
|||
[404 (script): main]
|
||||
expected: FAIL
|
||||
|
||||
[CORS (script): main]
|
||||
[Decode-error (style): main]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
[svg.html]
|
||||
[The initiator type for <image> in an <svg> must be 'image']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator type for <use> in an <svg> must be 'other']
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
[document-initiated.html]
|
||||
[Ensure initiator Attribute matches with Document ResourceID]
|
||||
expected: TIMEOUT
|
||||
|
||||
[initiatorUrl by main html file]
|
||||
expected: FAIL
|
||||
|
||||
[initiatorUrl for resource by document.write()]
|
||||
expected: FAIL
|
42
tests/wpt/meta/resource-timing/tentative/initiator-url/document-initiated.html.ini
vendored
Normal file
42
tests/wpt/meta/resource-timing/tentative/initiator-url/document-initiated.html.ini
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
[document-initiated.html]
|
||||
[The initiator Url for empty.js?blocking initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for display_paragraph.js initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for empty.js?async initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for empty.js?deferred initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for empty.js?module initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for empty_style.css?link initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for blue.png?inline-style initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for Ahem.ttf?initiator-html initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for blue.png?using-Img-tag initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for empty_style.css?inline-script initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for blue.png?inline-script initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for blue.png?inline-script-doc-write initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for empty_style.css?inline-script-doc-write initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
||||
|
||||
[The initiator Url for empty.js?doc-write initiatorUrl from document-initiated must be 'http://web-platform.test:8000/resource-timing/tentative/initiator-url/document-initiated.html']
|
||||
expected: FAIL
|
|
@ -1,4 +1,4 @@
|
|||
[stylesheet-initiated.html]
|
||||
expected: TIMEOUT
|
||||
expected: ERROR
|
||||
[Ensure initiator Attribute matches with Stylesheet ResourceID]
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -108,6 +108,21 @@
|
|||
[Window interface: attribute caches]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[NavigationPreloadManager interface: operation enable()]
|
||||
expected: TIMEOUT
|
||||
|
||||
[NavigationPreloadManager interface: operation disable()]
|
||||
expected: TIMEOUT
|
||||
|
||||
[NavigationPreloadManager interface: operation setHeaderValue(ByteString)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[NavigationPreloadManager interface: operation getState()]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
||||
[idlharness.https.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
|
3
tests/wpt/meta/service-workers/service-worker/intercepted-referrer.https.html.ini
vendored
Normal file
3
tests/wpt/meta/service-workers/service-worker/intercepted-referrer.https.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[intercepted-referrer.https.html]
|
||||
[document.referrer for a navigation intercepted by a Service Worker is unchanged and matches the parent URL]
|
||||
expected: FAIL
|
|
@ -29,3 +29,6 @@
|
|||
|
||||
[directive "require-trusted-types-for 'invalid'%20'script'" (required-ascii-whitespace)]
|
||||
expected: NOTRUN
|
||||
|
||||
[directive "require-trusted-types-for 'invalid'%0D%20'script'" (required-ascii-whitespace)]
|
||||
expected: NOTRUN
|
||||
|
|
18
tests/wpt/meta/urlpattern/urlpattern.any.js.ini
vendored
18
tests/wpt/meta/urlpattern/urlpattern.any.js.ini
vendored
|
@ -41,6 +41,15 @@
|
|||
[Pattern: [{"hostname":"bad\\\\:hostname"}\] Inputs: undefined]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com/ignoredpath"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com\\\\?ignoredsearch"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com#ignoredhash"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[urlpattern.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
@ -88,6 +97,15 @@
|
|||
[Pattern: [{"hostname":"bad\\\\:hostname"}\] Inputs: undefined]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com/ignoredpath"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com\\\\?ignoredsearch"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com#ignoredhash"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[urlpattern.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
|
|
@ -44,6 +44,15 @@
|
|||
[Pattern: [{"hostname":"bad\\\\:hostname"}\] Inputs: undefined]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com/ignoredpath"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com\\\\?ignoredsearch"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com#ignoredhash"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[urlpattern.https.any.worker.html]
|
||||
[Pattern: [{"protocol":"http","port":"80 "}\] Inputs: [{"protocol":"http","port":"80"}\]]
|
||||
|
@ -88,6 +97,15 @@
|
|||
[Pattern: [{"hostname":"bad\\\\:hostname"}\] Inputs: undefined]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com/ignoredpath"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com\\\\?ignoredsearch"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
[Pattern: [{"protocol":"http","hostname":"example.com#ignoredhash"}\] Inputs: ["http://example.com/"\]]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[urlpattern.https.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
|
|
@ -10,3 +10,6 @@
|
|||
|
||||
[# AUDIT TASK RUNNER FINISHED: 1 out of 5 tasks were failed.]
|
||||
expected: FAIL
|
||||
|
||||
[AudioNodeOptions behavior for ChannelMergerNode]
|
||||
expected: FAIL
|
||||
|
|
|
@ -7,3 +7,12 @@
|
|||
|
||||
[Executing "test3"]
|
||||
expected: FAIL
|
||||
|
||||
[Compare value setter and setValueAtTime]
|
||||
expected: FAIL
|
||||
|
||||
[Automation effects]
|
||||
expected: FAIL
|
||||
|
||||
[Dezippering of GainNode removed]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
[waveshaper-limits.html]
|
||||
[Executing "test"]
|
||||
expected: FAIL
|
||||
|
||||
[WaveShaperNode maps input values outside [-1,1\] according to curve and clamps output correctly]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
[waveshaper.html]
|
||||
[Executing "test"]
|
||||
expected: FAIL
|
||||
|
||||
[WaveShaperNode applies non-linear distortion correctly]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[render_state_update.https.html]
|
||||
expected: ERROR
|
4
tests/wpt/tests/.github/workflows/docker.yml
vendored
4
tests/wpt/tests/.github/workflows/docker.yml
vendored
|
@ -26,14 +26,14 @@ jobs:
|
|||
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
|
||||
# Based on https://docs.github.com/en/actions/publishing-packages/publishing-docker-images.
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
|
||||
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
id: meta
|
||||
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
|
||||
uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
|
|
8
tests/wpt/tests/.well-known/device-bound-sessions
vendored
Normal file
8
tests/wpt/tests/.well-known/device-bound-sessions
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
import json
|
||||
|
||||
def main(request, response):
|
||||
response_body = {
|
||||
"registering_origins": ['https://www.' + request.headers.get('host').decode("utf-8")],
|
||||
}
|
||||
return (200, [('Content-Type', 'application/json'), ('Set-Cookie', 'well_known_fetched=true; Path=/device-bound-session-credentials')],
|
||||
json.dumps(response_body))
|
15
tests/wpt/tests/FileAPI/blob/Blob-slice.any.js
vendored
15
tests/wpt/tests/FileAPI/blob/Blob-slice.any.js
vendored
|
@ -73,6 +73,21 @@ test(function() {
|
|||
{start: 7, end: 4, contents: ""}]
|
||||
],
|
||||
|
||||
// Test double start/end values
|
||||
[
|
||||
["abcd"],
|
||||
[{start: 0.5, contents: "abcd"},
|
||||
{start: 1.5, contents: "cd"},
|
||||
{start: 2.5, contents: "cd"},
|
||||
{start: 3.5, contents: ""},
|
||||
{start: 0, end: 0.5, contents: ""},
|
||||
{start: 0, end: 1.5, contents: "ab"},
|
||||
{start: 0, end: 2.5, contents: "ab"},
|
||||
{start: 0, end: 3.5, contents: "abcd"},
|
||||
{start: 1.5, end: 2.5, contents: ""},
|
||||
{start: 1.5, end: 3.5, contents: "cd"}]
|
||||
],
|
||||
|
||||
// Test 3 strings
|
||||
[
|
||||
["foo", "bar", "baz"],
|
||||
|
|
56
tests/wpt/tests/container-timing/tentative/nested-containertiming-child-img-with-ignore.html
vendored
Normal file
56
tests/wpt/tests/container-timing/tentative/nested-containertiming-child-img-with-ignore.html
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, with a child img inside of the inner, and a containertiming-ignore between the roots</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 1, 'one entry expected for the image, for the inner containertiming');
|
||||
const entry = entryList.getEntries()[0];
|
||||
checkContainerEntry(entry, 'div2_ct', 'img_id', beforeRender)
|
||||
checkRect(entry, [0, 100, 0, 100])
|
||||
checkContainerSize(entry, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
div1.setAttribute('containertiming-nesting', 'transparent');
|
||||
document.body.appendChild(div1);
|
||||
|
||||
// Intermediate div with containertiming-ignore blocking propagation to
|
||||
// the parent containertiming root
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('containertiming-ignore', '');
|
||||
div1.appendChild(div2);
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div3 = document.createElement('div');
|
||||
div3.setAttribute('containertiming', 'div2_ct');
|
||||
div2.appendChild(div3);
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div3.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root with transparent nesting policy does not get paints from children containertiming roots if an intermediate ignore is set.');
|
||||
</script>
|
||||
|
||||
</body>
|
|
@ -0,0 +1,55 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, with a child img inside of the inner, and an intermediate nesting policy that is not used</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 1, 'one entry expected for the image, for the inner containertiming');
|
||||
const entry = entryList.getEntries()[0];
|
||||
checkContainerEntry(entry, 'div3_ct', 'img_id', beforeRender)
|
||||
checkRect(entry, [0, 100, 0, 100])
|
||||
checkContainerSize(entry, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
document.body.appendChild(div1);
|
||||
|
||||
// Add an intermediate div between container timing roots, that sets a
|
||||
// nesting policy. This should be ignored.
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('containertiming-nesting', 'transparent');
|
||||
div1.appendChild(div2);
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div3 = document.createElement('div');
|
||||
div3.setAttribute('containertiming', 'div3_ct');
|
||||
div2.appendChild(div3);
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div3.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root with default nesting policy does not get paints from children containertiming roots, even if an intermediate node could set a different nesting policy.');
|
||||
</script>
|
||||
|
||||
</body>
|
|
@ -45,7 +45,7 @@ body {
|
|||
div2.appendChild(img);
|
||||
beforeRender = performance.now();
|
||||
};
|
||||
}, 'A parent containertiming root does not get paints from children containertiming roots.');
|
||||
}, 'A parent containertiming root with default nesting policy does not get paints from children containertiming roots.');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, parent gets invalid, then transparent nesting policy, with a child img inside of the inner</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 2, 'one entry expected for each of the containertiming roots');
|
||||
const entries = entryList.getEntries();
|
||||
|
||||
const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
|
||||
checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender)
|
||||
checkRect(entry_div1, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div1, 10000);
|
||||
|
||||
const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
|
||||
checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
|
||||
checkRect(entry_div2, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div2, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root, set invalid nesting, then
|
||||
// transparent
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
div1.setAttribute('containertiming-nesting', 'invalid');
|
||||
document.body.appendChild(div1);
|
||||
div1.setAttribute('containertiming-nesting', 'transparent');
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('containertiming', 'div2_ct');
|
||||
div1.appendChild(div2);
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div2.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root switches from invalid nesting policy to transparent, generating one painting from each container timing root.');
|
||||
</script>
|
||||
|
||||
</body>
|
51
tests/wpt/tests/container-timing/tentative/nested-containertiming-nesting-change-to-invalid.html
vendored
Normal file
51
tests/wpt/tests/container-timing/tentative/nested-containertiming-nesting-change-to-invalid.html
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, parent switching from transparent to invalid nesting policy, with a child img inside of the inner</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 1, 'one entry expected for the image, for the inner containertiming');
|
||||
const entry = entryList.getEntries()[0];
|
||||
checkContainerEntry(entry, 'div2_ct', 'img_id', beforeRender)
|
||||
checkRect(entry, [0, 100, 0, 100])
|
||||
checkContainerSize(entry, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
div1.setAttribute('containertiming-nesting', 'transparent');
|
||||
document.body.appendChild(div1);
|
||||
div1.setAttribute('containertiming-nesting', 'invalid');
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('containertiming', 'div2_ct');
|
||||
div1.appendChild(div2);
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div2.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root switches from transparent nesting policy to invalid, generating only a paint for the inner container timing.');
|
||||
</script>
|
||||
|
||||
</body>
|
58
tests/wpt/tests/container-timing/tentative/nested-shadowed-containertiming-child-img.html
vendored
Normal file
58
tests/wpt/tests/container-timing/tentative/nested-shadowed-containertiming-child-img.html
vendored
Normal file
|
@ -0,0 +1,58 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, parent with shadowed mode, with a child img inside of the inner</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each container timing');
|
||||
const entries = entryList.getEntries();
|
||||
|
||||
const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
|
||||
checkContainerEntry(entry_div1, 'div1_ct', 'div2_id', beforeRender)
|
||||
checkRect(entry_div1, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div1, 10000);
|
||||
|
||||
const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
|
||||
checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
|
||||
checkRect(entry_div2, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div2, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
div1.setAttribute('containertiming-nesting', 'shadowed');
|
||||
document.body.appendChild(div1);
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('id', 'div2_id');
|
||||
div2.setAttribute('containertiming', 'div2_ct');
|
||||
div1.appendChild(div2);
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div2.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root with shadowed nesting policy gets only child containertiming paints without element data.');
|
||||
</script>
|
||||
|
||||
</body>
|
|
@ -0,0 +1,59 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, parent with shadowed mode changed to transparent mode, with a child img inside of the inner</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each containertiming');
|
||||
const entries = entryList.getEntries();
|
||||
|
||||
const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
|
||||
checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender)
|
||||
checkRect(entry_div1, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div1, 10000);
|
||||
|
||||
const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
|
||||
checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
|
||||
checkRect(entry_div2, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div2, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
div1.setAttribute('containertiming-nesting', 'shadowed');
|
||||
document.body.appendChild(div1);
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('containertiming', 'div2_ct');
|
||||
div1.appendChild(div2);
|
||||
|
||||
div1.setAttribute('containertiming-nesting', 'transparent');
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div2.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root with shadowed then transparent nesting policy gets child containertiming paints with element data.');
|
||||
</script>
|
||||
|
||||
</body>
|
|
@ -0,0 +1,54 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, parent with transparent mode, with a child img inside of the inner, and an intermediate ignore node</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 1, 'only inner containertiming gets events, ignore breaks propagation to parent even if nesting is set to transparent');
|
||||
const entry = entryList.getEntries()[0];
|
||||
checkContainerEntry(entry, 'div3_ct', 'img_id', beforeRender)
|
||||
checkRect(entry, [0, 100, 0, 100])
|
||||
checkContainerSize(entry, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
div1.setAttribute('containertiming-nesting', 'transparent');
|
||||
document.body.appendChild(div1);
|
||||
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('containertiming-ignore', '');
|
||||
div1.appendChild(div2);
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div3 = document.createElement('div');
|
||||
div3.setAttribute('containertiming', 'div3_ct');
|
||||
div2.appendChild(div3);
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div3.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root with transparent nesting policy and child containertiming including image, an intermediate ignore blocks paints to parent root.');
|
||||
</script>
|
||||
|
||||
</body>
|
57
tests/wpt/tests/container-timing/tentative/nested-transparent-containertiming-child-img.html
vendored
Normal file
57
tests/wpt/tests/container-timing/tentative/nested-transparent-containertiming-child-img.html
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, parent with transparent mode, with a child img inside of the inner</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each containertiming');
|
||||
const entries = entryList.getEntries();
|
||||
|
||||
const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
|
||||
checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender)
|
||||
checkRect(entry_div1, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div1, 10000);
|
||||
|
||||
const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
|
||||
checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
|
||||
checkRect(entry_div2, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div2, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
div1.setAttribute('containertiming-nesting', 'transparent');
|
||||
document.body.appendChild(div1);
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('containertiming', 'div2_ct');
|
||||
div1.appendChild(div2);
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div2.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root with transparent nesting policy gets child containertiming paints with element data.');
|
||||
</script>
|
||||
|
||||
</body>
|
|
@ -0,0 +1,60 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset=utf-8>
|
||||
<title>Container Timing: two nested containertiming nodes, parent with transparent mode, changed to shadowed mode, with a child img inside of the inner</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/container-timing/resources/container-timing-helpers.js"></script>
|
||||
<script src="/element-timing/resources/element-timing-helpers.js"></script>
|
||||
<script>
|
||||
let beforeRender;
|
||||
async_test(function (t) {
|
||||
assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
|
||||
const observer = new PerformanceObserver(
|
||||
t.step_func_done(function(entryList) {
|
||||
assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each container timing');
|
||||
const entries = entryList.getEntries();
|
||||
|
||||
const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
|
||||
checkContainerEntry(entry_div1, 'div1_ct', 'div2_id', beforeRender)
|
||||
checkRect(entry_div1, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div1, 10000);
|
||||
|
||||
const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
|
||||
checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
|
||||
checkRect(entry_div2, [0, 100, 0, 100])
|
||||
checkContainerSize(entry_div2, 10000);
|
||||
})
|
||||
);
|
||||
observer.observe({entryTypes: ['container']});
|
||||
|
||||
// Add a div that is the container timing root
|
||||
const div1 = document.createElement('div');
|
||||
div1.setAttribute('containertiming', 'div1_ct');
|
||||
div1.setAttribute('containertiming-nesting', 'transparent');
|
||||
document.body.appendChild(div1);
|
||||
|
||||
// Add another div, child of the first, that is also a container root
|
||||
const div2 = document.createElement('div');
|
||||
div2.setAttribute('id', 'div2_id');
|
||||
div2.setAttribute('containertiming', 'div2_ct');
|
||||
div1.appendChild(div2);
|
||||
|
||||
div1.setAttribute('containertiming-nesting', 'shadowed');
|
||||
|
||||
// Add image of width equal to 100 and height equal to 100.
|
||||
img = document.createElement('img');
|
||||
img.src = '/container-timing/resources/square100.png';
|
||||
img.setAttribute('id', 'img_id');
|
||||
div2.appendChild(img);
|
||||
|
||||
beforeRender = performance.now();
|
||||
}, 'A parent containertiming root with transparent then shadowed nesting policy gets child containertiming paints without element data.');
|
||||
</script>
|
||||
|
||||
</body>
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>A Report-Only policy with a nonce does not send a report for an allowed link preload</title>
|
||||
<script nonce="abc" src="/resources/testharness.js"></script>
|
||||
<script nonce="abc" src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script nonce="abc">
|
||||
var testName = "Report should not be sent for an allowed link preload";
|
||||
addEventListener("load", () => {
|
||||
const script = document.createElement("script");
|
||||
script.nonce = "abc";
|
||||
script.src = `../support/checkReport.sub.js?reportExists=false&testName=${encodeURIComponent(testName)}`;
|
||||
|
||||
document.body.appendChild(script);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,4 @@
|
|||
Set-Cookie: link-preload-report-only-nonce={{$id:uuid()}}; Path=/content-security-policy/reporting
|
||||
Content-Security-Policy: script-src 'self' 'unsafe-inline'
|
||||
Content-Security-Policy-Report-Only: script-src 'nonce-abc'; report-uri /reporting/resources/report.py?op=put&reportID={{$id}}
|
||||
Link: </content-security-policy/support/pass.js>;rel=preload;as=script;nonce=abc
|
21
tests/wpt/tests/content-security-policy/reporting/link-preload-report-only-nonce.sub.html
vendored
Normal file
21
tests/wpt/tests/content-security-policy/reporting/link-preload-report-only-nonce.sub.html
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>A Report-Only policy with a nonce does not send a report for an allowed link preload</title>
|
||||
<script nonce="abc" src="/resources/testharness.js"></script>
|
||||
<script nonce="abc" src="/resources/testharnessreport.js"></script>
|
||||
<link nonce="abc" rel="preload" as="script" href="../support/pass.js">
|
||||
</head>
|
||||
<body>
|
||||
<script nonce="abc">
|
||||
var testName = "Report should not be sent for an allowed link preload";
|
||||
addEventListener("load", () => {
|
||||
const script = document.createElement("script");
|
||||
script.nonce = "abc";
|
||||
script.src = `../support/checkReport.sub.js?reportExists=false&testName=${encodeURIComponent(testName)}`;
|
||||
|
||||
document.body.appendChild(script);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,3 @@
|
|||
Set-Cookie: link-preload-report-only-nonce={{$id:uuid()}}; Path=/content-security-policy/reporting
|
||||
Content-Security-Policy: script-src 'self' 'unsafe-inline'
|
||||
Content-Security-Policy-Report-Only: script-src 'nonce-abc'; report-uri /reporting/resources/report.py?op=put&reportID={{$id}}
|
1
tests/wpt/tests/content-security-policy/support/pass.js
vendored
Normal file
1
tests/wpt/tests/content-security-policy/support/pass.js
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
// intentionally left blank.
|
17
tests/wpt/tests/content-security-policy/xslt/document-function-blocked.html
vendored
Normal file
17
tests/wpt/tests/content-security-policy/xslt/document-function-blocked.html
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/content-security-policy/support/testharness-helper.js"></script>
|
||||
<body>
|
||||
<script>
|
||||
async_test(t => {
|
||||
let iframe = document.createElement("iframe");
|
||||
iframe.src = "/content-security-policy/xslt/support/xml-with-stylesheet.xml";
|
||||
document.body.append(iframe);
|
||||
|
||||
iframe.contentWindow.addEventListener("securitypolicyviolation", t.step_func_done(e => {
|
||||
assert_true(e.blockedURI.endsWith("xslt/support/empty.xml"), "Blocked empty.xml request")
|
||||
}));
|
||||
}, "XSL document() function is blocked by CSP");
|
||||
</script>
|
||||
</body>
|
5
tests/wpt/tests/content-security-policy/xslt/support/document.xsl
vendored
Normal file
5
tests/wpt/tests/content-security-policy/xslt/support/document.xsl
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:template match="/">
|
||||
<xsl:value-of select="document('/content-security-policy/xslt/support/empty.xml')//foo" />
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
2
tests/wpt/tests/content-security-policy/xslt/support/empty.xml
vendored
Normal file
2
tests/wpt/tests/content-security-policy/xslt/support/empty.xml
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" ?>
|
||||
<root/>
|
3
tests/wpt/tests/content-security-policy/xslt/support/xml-with-stylesheet.xml
vendored
Normal file
3
tests/wpt/tests/content-security-policy/xslt/support/xml-with-stylesheet.xml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/xsl" href="/content-security-policy/xslt/support/document.xsl"?>
|
||||
<root/>
|
1
tests/wpt/tests/content-security-policy/xslt/support/xml-with-stylesheet.xml.headers
vendored
Normal file
1
tests/wpt/tests/content-security-policy/xslt/support/xml-with-stylesheet.xml.headers
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
Content-Security-Policy: connect-src 'none';
|
33
tests/wpt/tests/content-security-policy/xslt/xsltprocessor-include-blocked.html
vendored
Normal file
33
tests/wpt/tests/content-security-policy/xslt/xsltprocessor-include-blocked.html
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<script nonce="abc" src="/resources/testharness.js"></script>
|
||||
<script nonce="abc" src="/resources/testharnessreport.js"></script>
|
||||
<script nonce="abc" src="/content-security-policy/support/testharness-helper.js"></script>
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'nonce-abc';">
|
||||
<body>
|
||||
<script nonce="abc">
|
||||
async_test(t => {
|
||||
waitUntilEvent(window, "securitypolicyviolation").then(t.step_func_done(e => {
|
||||
assert_equals(e.documentURI, document.location.toString());
|
||||
assert_true(e.blockedURI.endsWith("/support/document.xsl"));
|
||||
}));
|
||||
|
||||
const XSLT_DOC = `
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:include href="/content-security-policy/xslt/support/document.xsl" />
|
||||
<xsl:template match="/">
|
||||
<b>test</b>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>`;
|
||||
|
||||
const parser = new DOMParser();
|
||||
const xmlDoc = parser.parseFromString(`<root/>`, "application/xml");
|
||||
const xsltDoc = parser.parseFromString(XSLT_DOC, "application/xml");
|
||||
|
||||
try {
|
||||
const xsltProcessor = new XSLTProcessor();
|
||||
xsltProcessor.importStylesheet(xsltDoc);
|
||||
xsltProcessor.transformToFragment(xmlDoc, document);
|
||||
} catch {}
|
||||
});
|
||||
</script>
|
||||
</body>
|
92
tests/wpt/tests/css/CSS2/generated-content/WEB_FEATURES.yml
vendored
Normal file
92
tests/wpt/tests/css/CSS2/generated-content/WEB_FEATURES.yml
vendored
Normal file
|
@ -0,0 +1,92 @@
|
|||
features:
|
||||
- name: attr-contents
|
||||
files:
|
||||
- content-037.xht
|
||||
- content-038.xht
|
||||
- content-039.xht
|
||||
- content-040.xht
|
||||
- content-041.xht
|
||||
- content-042.xht
|
||||
- content-043.xht
|
||||
- content-046.xht
|
||||
- content-047.xht
|
||||
- content-048.xht
|
||||
- content-049.xht
|
||||
- content-050.xht
|
||||
- content-051.xht
|
||||
- content-052.xht
|
||||
- content-053.xht
|
||||
- content-054.xht
|
||||
- content-056.xht
|
||||
- content-057.xht
|
||||
- content-063.xht
|
||||
- content-065.xht
|
||||
- content-066.xht
|
||||
- content-067.xht
|
||||
- content-068.xht
|
||||
- content-070.xht
|
||||
- content-072.xht
|
||||
- content-073.xht
|
||||
- content-075.xht
|
||||
- content-076.xht
|
||||
- content-077.xht
|
||||
- content-078.xht
|
||||
- content-080.xht
|
||||
- content-081.xht
|
||||
- content-082.xht
|
||||
- content-083.xht
|
||||
- content-085.xht
|
||||
- content-086.xht
|
||||
- content-089.xht
|
||||
- content-090.xht
|
||||
- content-091.xht
|
||||
- content-096.xht
|
||||
- content-097.xht
|
||||
- content-099.xht
|
||||
- content-100.xht
|
||||
- content-103.xht
|
||||
- content-105.xht
|
||||
- content-107.xht
|
||||
- content-108.xht
|
||||
- content-109.xht
|
||||
- content-110.xht
|
||||
- content-111.xht
|
||||
- content-112.xht
|
||||
- content-113.xht
|
||||
- content-114.xht
|
||||
- content-115.xht
|
||||
- content-116.xht
|
||||
- content-117.xht
|
||||
- content-118.xht
|
||||
- content-119.xht
|
||||
- content-121.xht
|
||||
- content-122.xht
|
||||
- content-123.xht
|
||||
- content-126.xht
|
||||
- content-127.xht
|
||||
- content-129.xht
|
||||
- content-130.xht
|
||||
- content-131.xht
|
||||
- content-132.xht
|
||||
- content-135.xht
|
||||
- content-136.xht
|
||||
- content-138.xht
|
||||
- content-140.xht
|
||||
- content-141.xht
|
||||
- content-142.xht
|
||||
- content-143.xht
|
||||
- content-144.xht
|
||||
- content-145.xht
|
||||
- content-146.xht
|
||||
- content-147.xht
|
||||
- content-149.xht
|
||||
- content-150.xht
|
||||
- content-151.xht
|
||||
- content-152.xht
|
||||
- content-153.xht
|
||||
- content-155.xht
|
||||
- content-attr-001.xht
|
||||
- content-attr-002.xht
|
||||
- content-attr-case-001.html
|
||||
- content-attr-case-002.xht
|
||||
- other-attribute-001.xht
|
|
@ -8,7 +8,7 @@
|
|||
<link rel="reviewer" title="Mihai Țică" href="mailto:mitica@adobe.com">
|
||||
<link rel="help" href="https://drafts.fxtf.org/compositing-1/#mix-blend-mode">
|
||||
<meta name="assert" content="Test checks that the element with mix-blend-mode blends with the parent element (both with 3D transform)">
|
||||
<meta name="fuzzy" content="0-128;0-1000">
|
||||
<meta name="fuzzy" content="0-180;0-1000">
|
||||
<link rel="match" href="reference/mix-blend-mode-both-parent-and-blended-with-3D-transform-ref.html">
|
||||
<style type="text/css">
|
||||
.parent {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<title>Tests scroll adjustments of element anchored to a sticky-position element</title>
|
||||
<link rel="author" href="mailto:wangxianzhu@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-anchor-1/">
|
||||
<link rel="match" href="reference/anchor-scroll-to-sticky-001-ref.html">
|
||||
<link rel="match" href="reference/anchor-scroll-to-sticky-003-ref.html">
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
|
|
40
tests/wpt/tests/css/css-anchor-position/reference/anchor-scroll-to-sticky-003-ref.html
vendored
Normal file
40
tests/wpt/tests/css/css-anchor-position/reference/anchor-scroll-to-sticky-003-ref.html
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
div {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
#scroller {
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
#anchor {
|
||||
height: 20px;
|
||||
background: orange;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#anchored {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
left: 0;
|
||||
background: green;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="anchored"></div>
|
||||
<div id="scroller">
|
||||
<div style="height: 200px"></div>
|
||||
<div id="anchor"></div>
|
||||
<div style="height: 150px"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
scroller.scrollTop = 200;
|
||||
</script>
|
|
@ -16,6 +16,7 @@ div {
|
|||
#anchor {
|
||||
height: 20px;
|
||||
background: orange;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#anchored {
|
||||
|
@ -27,12 +28,12 @@ div {
|
|||
|
||||
</style>
|
||||
|
||||
<div id="anchored"></div>
|
||||
<div id="scroller">
|
||||
<div style="height: 250px"></div>
|
||||
<div id="anchor"></div>
|
||||
<div style="height: 180px"></div>
|
||||
</div>
|
||||
<div id="anchored"></div>
|
||||
|
||||
<script>
|
||||
scroller.scrollTop = 200;
|
||||
|
|
11
tests/wpt/tests/css/css-animations/animation-duration-infinite-ref.html
vendored
Normal file
11
tests/wpt/tests/css/css-animations/animation-duration-infinite-ref.html
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<style>
|
||||
|
||||
div {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div></div>
|
29
tests/wpt/tests/css/css-animations/animation-duration-infinite.html
vendored
Normal file
29
tests/wpt/tests/css/css-animations/animation-duration-infinite.html
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Setting 'animation-duration' to an infinite value should not hang</title>
|
||||
<link rel="author" title="Antoine Quint" href="mailto:graouts@webkit.org">
|
||||
<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=297596">
|
||||
<link rel="match" href="animation-duration-infinite-ref.html">
|
||||
<meta name="assert" content="Setting 'animation-duration' to an infinite value should not hang">
|
||||
<style>
|
||||
|
||||
div {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: black;
|
||||
|
||||
animation-name: slide;
|
||||
animation-duration: calc(infinity * 1s);
|
||||
}
|
||||
|
||||
@keyframes slide {
|
||||
to { margin-left: 100px }
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div></div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="fuzzy" content="1;0-50">
|
||||
|
||||
<title>CSS Backgrounds and Borders Test: table cell background-image with local attachment</title>
|
||||
|
||||
<!--
|
||||
|
|
6
tests/wpt/tests/css/css-break/table/repeated-section/text-in-nested-multicol-ref.html
vendored
Normal file
6
tests/wpt/tests/css/css-break/table/repeated-section/text-in-nested-multicol-ref.html
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<p>"hahaha" should be seen below.</p>
|
||||
<div style="width:fit-content; columns:6; gap:0; column-fill:auto; line-height:20px; height:20px;">
|
||||
h<br>a<br>h<br>a<br>h<br>a<br>
|
||||
</div>
|
15
tests/wpt/tests/css/css-break/table/repeated-section/text-in-nested-multicol.html
vendored
Normal file
15
tests/wpt/tests/css/css-break/table/repeated-section/text-in-nested-multicol.html
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://issues.chromium.org/issues/435811611">
|
||||
<link rel="match" href="text-in-nested-multicol-ref.html">
|
||||
<p>"hahaha" should be seen below.</p>
|
||||
<div style="columns:3; width:fit-content; column-fill:auto; height:100px; gap:0; line-height:20px; orphans:1; widows:1;">
|
||||
<div style="display:table;">
|
||||
<div style="display:table-header-group; break-inside:avoid;">
|
||||
<div style="columns:2; gap:0; column-fill:auto; height:20px;">
|
||||
h<br>a<br>
|
||||
</div>
|
||||
</div>
|
||||
<div style="height:200px;"></div>
|
||||
</div>
|
||||
</div>
|
16
tests/wpt/tests/css/css-conditional/container-queries/crashtests/chrome-bug-439886903-crash.html
vendored
Normal file
16
tests/wpt/tests/css/css-conditional/container-queries/crashtests/chrome-bug-439886903-crash.html
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Chrome crash issue 439886903</title>
|
||||
<link rel="help" href="https://crbug.com/439886903">
|
||||
<html class="test-wait">
|
||||
<div id="container" style="container-type:inline-size">
|
||||
<div id="target"></div>
|
||||
<object id="svg" data='data:image/svg+xml,<?xml version="1.0"?><svg></svg>'></object>
|
||||
</div>
|
||||
<script type="module">
|
||||
await new Promise(r => svg.addEventListener("load", r, { once: true }));
|
||||
document.body.offsetTop;
|
||||
container.style.width = "100px";
|
||||
target.style.backgroundColor = "red";
|
||||
document.body.offsetTop;
|
||||
document.documentElement.classList.remove("test-wait");
|
||||
</script>
|
|
@ -1,7 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="fuzzy" content="1;0-50">
|
||||
|
||||
<title>CSS Test: 'contain: layout' on element that overflows and its parent has 'overflow: scroll'</title>
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="fuzzy" content="1;0-50">
|
||||
<title>CSS Test: 'contain: layout' should force all overflow to be ink overflow.</title>
|
||||
<link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
features:
|
||||
- name: attr-contents
|
||||
files:
|
||||
- attr-case-sensitivity-001.html
|
||||
- attr-case-sensitivity-002.html
|
||||
- attr-case-sensitivity-003.html
|
||||
- name: quotes
|
||||
files:
|
||||
- quotes-*
|
||||
|
|
|
@ -30,6 +30,26 @@ test_invalid_value("grid-template-columns", '-5fr repeat(auto-fill, auto)');
|
|||
test_invalid_value("grid-template-columns", '-10px repeat(auto-fill, min-content)');
|
||||
test_invalid_value("grid-template-columns", '-20% repeat(auto-fit, max-content)');
|
||||
test_invalid_value("grid-template-columns", 'repeat(auto-fill, fit-content)');
|
||||
test_invalid_value("grid-template-columns", 'auto repeat(auto-fill, auto) auto');
|
||||
test_invalid_value("grid-template-columns", 'min-content repeat(auto-fill, auto) min-content');
|
||||
test_invalid_value("grid-template-columns", 'max-content repeat(auto-fill, auto) max-content');
|
||||
test_invalid_value("grid-template-columns", 'fit-content(200px) repeat(auto-fill, auto) fit-content(200px)');
|
||||
test_invalid_value("grid-template-columns", 'auto repeat(auto-fill, auto) repeat(5, auto)');
|
||||
test_invalid_value("grid-template-columns", 'auto repeat(auto-fill, min-content) auto');
|
||||
test_invalid_value("grid-template-columns", 'min-content repeat(auto-fill, min-content) min-content');
|
||||
test_invalid_value("grid-template-columns", 'max-content repeat(auto-fill, min-content) max-content');
|
||||
test_invalid_value("grid-template-columns", 'fit-content(200px) repeat(auto-fill, min-content) fit-content(200px)');
|
||||
test_invalid_value("grid-template-columns", 'min-content repeat(auto-fill, min-content) repeat(5, min-content)');
|
||||
test_invalid_value("grid-template-columns", 'auto repeat(auto-fill, max-content) auto');
|
||||
test_invalid_value("grid-template-columns", 'min-content repeat(auto-fill, max-content) min-content');
|
||||
test_invalid_value("grid-template-columns", 'max-content repeat(auto-fill, max-content) max-content');
|
||||
test_invalid_value("grid-template-columns", 'fit-content(200px) repeat(auto-fill, max-content) fit-content(200px)');
|
||||
test_invalid_value("grid-template-columns", 'max-content repeat(auto-fill, max-content) repeat(5, max-content)');
|
||||
test_invalid_value("grid-template-columns", 'auto repeat(auto-fill, fit-content(200px)) auto');
|
||||
test_invalid_value("grid-template-columns", 'min-content repeat(auto-fill, fit-content(200px)) min-content');
|
||||
test_invalid_value("grid-template-columns", 'max-content repeat(auto-fill, fit-content(200px)) max-content');
|
||||
test_invalid_value("grid-template-columns", 'fit-content(200px) repeat(auto-fill, fit-content(200px)) fit-content(200px)');
|
||||
test_invalid_value("grid-template-columns", 'fit-content(200px) repeat(auto-fill, fit-content(200px)) repeat(5, fit-content(200px))');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -30,6 +30,26 @@ test_invalid_value("grid-template-rows", '-10px repeat(auto-fit, auto)');
|
|||
test_invalid_value("grid-template-rows", '-10px repeat(auto-fill, min-content)');
|
||||
test_invalid_value("grid-template-rows", '-20% repeat(auto-fit, max-content)');
|
||||
test_invalid_value("grid-template-rows", 'repeat(auto-fill, fit-content)');
|
||||
test_invalid_value("grid-template-rows", 'auto repeat(auto-fill, auto) auto');
|
||||
test_invalid_value("grid-template-rows", 'min-content repeat(auto-fill, auto) min-content');
|
||||
test_invalid_value("grid-template-rows", 'max-content repeat(auto-fill, auto) max-content');
|
||||
test_invalid_value("grid-template-rows", 'fit-content(200px) repeat(auto-fill, auto) fit-content(200px)');
|
||||
test_invalid_value("grid-template-rows", 'auto repeat(auto-fill, auto) repeat(5, auto)');
|
||||
test_invalid_value("grid-template-rows", 'auto repeat(auto-fill, min-content) auto');
|
||||
test_invalid_value("grid-template-rows", 'min-content repeat(auto-fill, min-content) min-content');
|
||||
test_invalid_value("grid-template-rows", 'max-content repeat(auto-fill, min-content) max-content');
|
||||
test_invalid_value("grid-template-rows", 'fit-content(200px) repeat(auto-fill, min-content) fit-content(200px)');
|
||||
test_invalid_value("grid-template-rows", 'min-content repeat(auto-fill, min-content) repeat(5, min-content)');
|
||||
test_invalid_value("grid-template-rows", 'auto repeat(auto-fill, max-content) auto');
|
||||
test_invalid_value("grid-template-rows", 'min-content repeat(auto-fill, max-content) min-content');
|
||||
test_invalid_value("grid-template-rows", 'max-content repeat(auto-fill, max-content) max-content');
|
||||
test_invalid_value("grid-template-rows", 'fit-content(200px) repeat(auto-fill, max-content) fit-content(200px)');
|
||||
test_invalid_value("grid-template-rows", 'max-content repeat(auto-fill, max-content) repeat(5, max-content)');
|
||||
test_invalid_value("grid-template-rows", 'auto repeat(auto-fill, fit-content(200px)) auto');
|
||||
test_invalid_value("grid-template-rows", 'min-content repeat(auto-fill, fit-content(200px)) min-content');
|
||||
test_invalid_value("grid-template-rows", 'max-content repeat(auto-fill, fit-content(200px)) max-content');
|
||||
test_invalid_value("grid-template-rows", 'fit-content(200px) repeat(auto-fill, fit-content(200px)) fit-content(200px)');
|
||||
test_invalid_value("grid-template-rows", 'fit-content(200px) repeat(auto-fill, fit-content(200px)) repeat(5, fit-content(200px))');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -28,12 +28,10 @@ test_valid_value("grid-template-rows", 'repeat(auto-fit, max-content 100px max-c
|
|||
test_valid_value("grid-template-rows", 'repeat(auto-fill, minmax(30px, 5fr) [two] max-content)');
|
||||
test_valid_value("grid-template-rows", 'repeat(auto-fit, [three] max-content [four])');
|
||||
|
||||
|
||||
test_valid_value("grid-template-rows", 'repeat(auto-fill, fit-content(200px))');
|
||||
test_valid_value("grid-template-rows", 'repeat(auto-fit, fit-content(200px) 100px fit-content(200px))');
|
||||
test_valid_value("grid-template-rows", 'repeat(auto-fill, minmax(30px, 5fr) [two] fit-content(200px))');
|
||||
test_valid_value("grid-template-rows", 'repeat(auto-fit, [three] fit-content(200px) [four])');
|
||||
</script>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
18
tests/wpt/tests/css/css-highlight-api/crashtests/highlight-first-letter-float-crash.html
vendored
Normal file
18
tests/wpt/tests/css/css-highlight-api/crashtests/highlight-first-letter-float-crash.html
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<html contenteditable>
|
||||
<style>
|
||||
div::first-letter {
|
||||
float: right;
|
||||
}
|
||||
::highlight(test) { background-color: purple; }
|
||||
</style>
|
||||
<div><span id="span1">a<span>bc</span></span></div>
|
||||
<script>
|
||||
const span1 = document.getElementById("span1");
|
||||
const text_node = span1.firstChild;
|
||||
const range = document.createRange();
|
||||
range.setStart(text_node, 0);
|
||||
range.setEnd(text_node, 1);
|
||||
const highlight = new Highlight(range);
|
||||
CSS.highlights.set("test", highlight);
|
||||
</script>
|
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