From 32cc2e03c4069cbd7680c470bb486dc037c3c2fe Mon Sep 17 00:00:00 2001
From: WPT Sync Bot
Date: Sat, 28 Jan 2023 01:49:33 +0000
Subject: [PATCH] Update web-platform-tests to revision
b'544363de4568baf9ae90d71e4822661edc546650'
---
tests/wpt/metadata/MANIFEST.json | 597 ++++++++++----
.../CSS2/floats/hit-test-floats-001.html.ini | 3 +
.../CSS2/floats/hit-test-floats-004.html.ini | 3 +
.../CSS2/floats/hit-test-floats-005.html.ini | 3 +
.../block-in-inline-hittest-001.html.ini | 3 +
.../block-in-inline-hittest-002.html.ini | 3 +
.../hit-test-anonymous-block.html.ini | 3 +
...ty-animation-ending-correctly-002.html.ini | 2 -
.../at-font-face-font-matching.html.ini | 6 -
.../properties-value-001.html.ini | 300 -------
.../properties-value-003.html.ini | 30 +
.../properties-value-inherit-001.html.ini | 423 ----------
.../properties-value-inherit-002.html.ini | 273 +++++++
.../cssom-view/elementFromPoint-001.html.ini | 3 +
...tFromPoint-ellipsis-in-inline-box.html.ini | 3 +
...lementFromPoint-float-in-relative.html.ini | 3 +
.../elementFromPoint-list-001.html.ini | 5 +-
.../cssom-view/elementFromPosition.html.ini | 3 +
.../elementsFromPoint-invalid-cases.html.ini | 3 -
.../ElementInternals-setFormValue.html.ini | 3 -
.../content-length/parsing.window.js.ini | 2 +-
.../css-images.sub.tentative.html.ini | 5 +-
.../nosniff/parsing-nosniff.window.js.ini | 3 +
...c-aboutblank-navigate-immediately.html.ini | 3 -
.../javascript-url-referrer.window.js.ini | 4 +
.../nav-cancelation-2.sub.html.ini | 3 +-
.../traverse-during-unload.html.ini | 4 -
.../traverse_the_history_1.html.ini | 3 +
...after-nav-about-srcdoc.https.window.js.ini | 7 +
.../supported-elements.html.ini | 12 +-
.../http-equiv-and-name.html.ini | 6 +
.../iframe_sandbox_popups_escaping-2.html.ini | 3 +-
.../non-active-document.html.ini | 6 +
.../multipart-formdata.window.js.ini | 3 +
.../text-plain.window.js.ini | 6 +
...lid-invalid-fieldset-disconnected.html.ini | 6 +
.../module-static-import-delayed.html.ini | 3 -
.../promise-rejection-events.html.ini | 3 +-
.../content-type-parsing.html.ini | 20 +-
.../url/url-setters-a-area.window.js.ini | 12 +-
tests/wpt/metadata/url/url-setters.any.js.ini | 10 +-
.../audiocontext-not-fully-active.html.ini | 1 +
.../cross-partition.https.tentative.html.ini | 2 +-
.../webmessaging/with-ports/017.html.ini | 4 -
...s-3P-window.partitioned.tentative.html.ini | 4 +
.../metadata/xhr/event-error.sub.any.js.ini | 4 +
.../formdata/constructor-submitter.html.ini | 15 +
.../mozilla/task_queue_throttling.any.js.ini | 5 +
.../anchor-position-dynamic-002.html | 4 +-
.../anchor-position-dynamic-003.html | 4 +-
.../anchor-position-dynamic-004.html | 8 +-
.../anchor-query-fallback.html | 56 +-
.../border-image-slice-005.htm | 2 +-
.../border-image-slice-007.htm | 2 +-
.../css3-border-image-repeat-repeat.html | 1 +
...nested-flex-item-expansion-in-mulicol.html | 16 +
.../at-container-parsing.html | 12 -
.../at-container-style-parsing.html | 75 ++
.../baseline-source-vertical-align.html | 17 +
.../css/css-nesting/cssom.html | 18 +
.../css-overflow/overflow-overlay-ref.html | 11 +
.../overflow-overlay.tentative.html | 13 +
.../scoped-reference-animation-001.html | 42 -
.../scoped-reference-animation-002.html | 55 --
.../scoped-reference-animation-ref.html | 30 -
.../fit-content-block-size-abspos.html | 20 +
.../fit-content-block-size-fixedpos-ref.html | 14 +
.../fit-content-block-size-fixedpos.html | 17 +
.../css/css-tables/whitespace-001-ref.html | 24 +
.../css/css-tables/whitespace-001.html | 32 +
.../acos-asin-atan-atan2-computed.html | 4 +-
.../css/css-values/exp-log-compute.html | 8 +-
.../css-values/hypot-pow-sqrt-computed.html | 14 +-
.../css-values/hypot-pow-sqrt-invalid.html | 6 +-
.../css/css-values/signs-abs-computed.html | 188 ++---
.../cssom/xml-stylesheet-pi-in-doctype.xhtml | 17 +
.../css/support/computed-testcommon.js | 6 +-
...and-height-to-both-be-specified.https.html | 24 +
.../dom/events/scrolling/scroll_support.js | 12 +-
.../scrollend-event-for-user-scroll.html | 34 +-
.../dom/nodes/Comment-in-doctype.xhtml | 15 +
.../ProcessingInstruction-in-doctype.xhtml | 15 +
.../web-platform-tests/editing/data/delete.js | 62 ++
.../editing/data/forecolor.js | 11 +-
.../editing/data/forwarddelete.js | 62 ++
.../math/stretchy-centered-on-baseline.woff | Bin 0 -> 1508 bytes
.../fonts/math/stretchy.woff | Bin 1400 -> 1428 bytes
.../line-styles/2d.line.cap.butt.html | 5 +
.../line-styles/2d.line.cap.butt.worker.js | 5 +
.../line-styles/2d.line.cap.closed.html | 3 +
.../line-styles/2d.line.cap.closed.worker.js | 3 +
.../line-styles/2d.line.cap.invalid.html | 6 +
.../line-styles/2d.line.cap.invalid.worker.js | 6 +
.../line-styles/2d.line.cap.open.html | 3 +
.../line-styles/2d.line.cap.open.worker.js | 3 +
.../line-styles/2d.line.cap.round.html | 12 +
.../line-styles/2d.line.cap.round.worker.js | 12 +
.../line-styles/2d.line.cap.square.html | 5 +
.../line-styles/2d.line.cap.square.worker.js | 5 +
.../line-styles/2d.line.cap.valid.html | 2 +
.../line-styles/2d.line.cap.valid.worker.js | 2 +
.../offscreen/line-styles/2d.line.cross.html | 3 +
.../line-styles/2d.line.cross.worker.js | 3 +
.../2d.line.invalid.strokestyle.html | 37 +
.../2d.line.invalid.strokestyle.worker.js | 33 +
.../line-styles/2d.line.join.bevel.html | 11 +
.../line-styles/2d.line.join.bevel.worker.js | 11 +
.../line-styles/2d.line.join.closed.html | 3 +
.../line-styles/2d.line.join.closed.worker.js | 3 +
.../line-styles/2d.line.join.invalid.html | 6 +
.../2d.line.join.invalid.worker.js | 6 +
.../line-styles/2d.line.join.miter.html | 11 +
.../line-styles/2d.line.join.miter.worker.js | 11 +
.../line-styles/2d.line.join.open.html | 3 +
.../line-styles/2d.line.join.open.worker.js | 3 +
.../line-styles/2d.line.join.parallel.html | 2 +
.../2d.line.join.parallel.worker.js | 2 +
.../line-styles/2d.line.join.round.html | 11 +
.../line-styles/2d.line.join.round.worker.js | 11 +
.../line-styles/2d.line.join.valid.html | 2 +
.../line-styles/2d.line.join.valid.worker.js | 2 +
.../line-styles/2d.line.miter.acute.html | 4 +
.../line-styles/2d.line.miter.acute.worker.js | 4 +
.../line-styles/2d.line.miter.exceeded.html | 3 +
.../2d.line.miter.exceeded.worker.js | 3 +
.../line-styles/2d.line.miter.invalid.html | 17 +
.../2d.line.miter.invalid.worker.js | 17 +
.../line-styles/2d.line.miter.lineedge.html | 3 +
.../2d.line.miter.lineedge.worker.js | 3 +
.../line-styles/2d.line.miter.obtuse.html | 4 +
.../2d.line.miter.obtuse.worker.js | 4 +
.../line-styles/2d.line.miter.rightangle.html | 3 +
.../2d.line.miter.rightangle.worker.js | 3 +
.../line-styles/2d.line.miter.valid.html | 3 +
.../line-styles/2d.line.miter.valid.worker.js | 3 +
.../line-styles/2d.line.miter.within.html | 3 +
.../2d.line.miter.within.worker.js | 3 +
.../offscreen/line-styles/2d.line.union.html | 3 +
.../line-styles/2d.line.union.worker.js | 3 +
.../line-styles/2d.line.width.basic.html | 4 +
.../line-styles/2d.line.width.basic.worker.js | 4 +
.../line-styles/2d.line.width.invalid.html | 17 +
.../2d.line.width.invalid.worker.js | 17 +
.../2d.line.width.scaledefault.html | 2 +
.../2d.line.width.scaledefault.worker.js | 2 +
.../2d.line.width.transformed.html | 4 +
.../2d.line.width.transformed.worker.js | 4 +
.../line-styles/2d.line.width.valid.html | 3 +
.../line-styles/2d.line.width.valid.worker.js | 3 +
.../html/canvas/tools/gentestutils.py | 559 ++++++-------
.../html/canvas/tools/gentestutilsunion.py | 651 +++++++--------
.../html/canvas/tools/name2dir-canvas.yaml | 3 +-
.../html/canvas/tools/name2dir-offscreen.yaml | 1 -
.../drawing-images-to-the-canvas.yaml | 3 +-
.../element => yaml-new}/line-styles.yaml | 0
.../tools/yaml/offscreen/line-styles.yaml | 773 ------------------
...ges-after-nav-about-srcdoc.https.window.js | 83 ++
.../resources/send-back-base-url.html | 8 +
.../the-meta-element/http-equiv-and-name.html | 18 +
.../valid-invalid-fieldset-disconnected.html | 57 ++
tests/wpt/web-platform-tests/lint.ignore | 2 +-
.../painting-stretchy-operator-001-ref.html | 22 +
.../painting-stretchy-operator-001.html | 73 ++
.../tools/stretchy-centered-on-baseline.py | 43 +
.../mathml/tools/stretchy.py | 2 +-
.../mathml/tools/utils/mathfont.py | 12 +-
...ions-reject.html => takePhoto-reject.html} | 0
.../mixed-content-cors.https.sub.html | 84 ++
.../resources/nested-contexts.js | 37 +-
.../resources/chromium/mock-imagecapture.js | 2 +-
...wakelock-document-hidden-manual.https.html | 30 -
.../wakelock-document-hidden.https.html | 49 ++
.../css/animation-timeline-computed.html | 10 +-
.../css/animation-timeline-parsing.html | 10 +-
...tml => scroll-timeline-axis-computed.html} | 8 +-
...html => scroll-timeline-axis-parsing.html} | 10 +-
...tml => scroll-timeline-name-computed.html} | 9 +-
...html => scroll-timeline-name-parsing.html} | 9 +-
.../scroll-timeline-shorthand.tentative.html | 74 +-
...line-animation-range-update.tentative.html | 77 ++
...-view-timeline-current-time.tentative.html | 20 +-
.../view-timelines/testcommon.js | 26 +-
...-timeline-get-current-time-range-name.html | 5 +-
.../view-timeline-subject-size-changes.html | 7 +-
.../storage-access-api/helpers.js | 53 +-
...igin-iframe-navigation.sub.https.window.js | 2 +-
.../resources/embedded_responder.js | 9 +-
.../resources/permissions-iframe.https.html | 10 +
...rage-access-permission.sub.https.window.js | 87 ++
.../top-level-storage-access-api/README.md | 4 +
...equestStorageAccessForOrigin.sub.window.js | 127 +++
.../requestStorageAccessForOrigin-iframe.html | 9 +
.../url/resources/setters_tests.json | 12 +-
.../set-metadata.https.html | 2 +
.../webrtc-stats/rtp-stats-creation.html | 2 +-
.../webrtc-stats/supported-stats.https.html | 3 +-
.../xhr/formdata/constructor-submitter.html | 92 +++
197 files changed, 3539 insertions(+), 2824 deletions(-)
create mode 100644 tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini
create mode 100644 tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
create mode 100644 tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
create mode 100644 tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-001.html.ini
create mode 100644 tests/wpt/metadata/css/CSS2/normal-flow/hit-test-anonymous-block.html.ini
delete mode 100644 tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini
create mode 100644 tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
create mode 100644 tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini
create mode 100644 tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini
delete mode 100644 tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
delete mode 100644 tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini
create mode 100644 tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
create mode 100644 tests/wpt/metadata/html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.js.ini
create mode 100644 tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/http-equiv-and-name.html.ini
create mode 100644 tests/wpt/metadata/html/semantics/selectors/pseudo-classes/valid-invalid-fieldset-disconnected.html.ini
delete mode 100644 tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini
delete mode 100644 tests/wpt/metadata/webmessaging/with-ports/017.html.ini
create mode 100644 tests/wpt/metadata/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html.ini
create mode 100644 tests/wpt/metadata/xhr/formdata/constructor-submitter.html.ini
create mode 100644 tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini
create mode 100644 tests/wpt/web-platform-tests/css/css-break/flexbox/nested-flex-item-expansion-in-mulicol.html
create mode 100644 tests/wpt/web-platform-tests/css/css-contain/container-queries/at-container-style-parsing.html
create mode 100644 tests/wpt/web-platform-tests/css/css-inline/baseline-source/baseline-source-vertical-align.html
create mode 100644 tests/wpt/web-platform-tests/css/css-overflow/overflow-overlay-ref.html
create mode 100644 tests/wpt/web-platform-tests/css/css-overflow/overflow-overlay.tentative.html
delete mode 100644 tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html
delete mode 100644 tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html
delete mode 100644 tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html
create mode 100644 tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-abspos.html
create mode 100644 tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-fixedpos-ref.html
create mode 100644 tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-fixedpos.html
create mode 100644 tests/wpt/web-platform-tests/css/css-tables/whitespace-001-ref.html
create mode 100644 tests/wpt/web-platform-tests/css/css-tables/whitespace-001.html
create mode 100644 tests/wpt/web-platform-tests/css/cssom/xml-stylesheet-pi-in-doctype.xhtml
create mode 100644 tests/wpt/web-platform-tests/document-picture-in-picture/requires-width-and-height-to-both-be-specified.https.html
create mode 100644 tests/wpt/web-platform-tests/dom/nodes/Comment-in-doctype.xhtml
create mode 100644 tests/wpt/web-platform-tests/dom/nodes/ProcessingInstruction-in-doctype.xhtml
create mode 100644 tests/wpt/web-platform-tests/fonts/math/stretchy-centered-on-baseline.woff
create mode 100644 tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.invalid.strokestyle.html
create mode 100644 tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.invalid.strokestyle.worker.js
rename tests/wpt/web-platform-tests/html/canvas/tools/{yaml/element => yaml-new}/line-styles.yaml (100%)
delete mode 100644 tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/line-styles.yaml
create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.js
create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/urls/terminology-0/resources/send-back-base-url.html
create mode 100644 tests/wpt/web-platform-tests/html/semantics/document-metadata/the-meta-element/http-equiv-and-name.html
create mode 100644 tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/valid-invalid-fieldset-disconnected.html
create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html
create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/operators/painting-stretchy-operator-001.html
create mode 100755 tests/wpt/web-platform-tests/mathml/tools/stretchy-centered-on-baseline.py
rename tests/wpt/web-platform-tests/mediacapture-image/{setOptions-reject.html => takePhoto-reject.html} (100%)
create mode 100644 tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/mixed-content-cors.https.sub.html
delete mode 100644 tests/wpt/web-platform-tests/screen-wake-lock/wakelock-document-hidden-manual.https.html
create mode 100644 tests/wpt/web-platform-tests/screen-wake-lock/wakelock-document-hidden.https.html
rename tests/wpt/web-platform-tests/scroll-animations/css/{scroll-timeline-axis-computed.tentative.html => scroll-timeline-axis-computed.html} (81%)
rename tests/wpt/web-platform-tests/scroll-animations/css/{scroll-timeline-axis-parsing.tentative.html => scroll-timeline-axis-parsing.html} (68%)
rename tests/wpt/web-platform-tests/scroll-animations/css/{scroll-timeline-name-computed.tentative.html => scroll-timeline-name-computed.html} (78%)
rename tests/wpt/web-platform-tests/scroll-animations/css/{scroll-timeline-name-parsing.tentative.html => scroll-timeline-name-parsing.html} (81%)
create mode 100644 tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-animation-range-update.tentative.html
create mode 100644 tests/wpt/web-platform-tests/storage-access-api/resources/permissions-iframe.https.html
create mode 100644 tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js
create mode 100644 tests/wpt/web-platform-tests/top-level-storage-access-api/README.md
create mode 100644 tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.js
create mode 100644 tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html
create mode 100644 tests/wpt/web-platform-tests/xhr/formdata/constructor-submitter.html
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 9e39bb43f96..05cb83081e4 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -21889,15 +21889,6 @@
]
]
},
- "screen-wake-lock": {
- "wakelock-document-hidden-manual.https.html": [
- "05368bdfb89b2fd9e4ea442b4124fa784babfc10",
- [
- null,
- {}
- ]
- ]
- },
"selection": {
"dir-manual.html": [
"39cf6555234b7b2e189412e97aed5a93b19ccea2",
@@ -134206,7 +134197,7 @@
]
],
"border-image-slice-005.htm": [
- "9993ccd673cdb0543352b0ff7a639f687b55d48f",
+ "5d8bd7df1c3fe1b09a8a9387e355e2c7d111b805",
[
null,
[
@@ -134222,11 +134213,11 @@
[
[
0,
- 35
+ 92
],
[
0,
- 1250
+ 5314
]
]
]
@@ -134235,7 +134226,7 @@
]
],
"border-image-slice-007.htm": [
- "7666444ce574c1c4c283b6a8fcb27e6dd0ed9917",
+ "e9c1827fc76c00f0bb81a23f27335a2f2074ace2",
[
null,
[
@@ -134251,11 +134242,11 @@
[
[
0,
- 35
+ 92
],
[
0,
- 1250
+ 5314
]
]
]
@@ -135613,7 +135604,7 @@
]
],
"css3-border-image-repeat-repeat.html": [
- "1b8e7588d261e9478cbe35a68039b0da06c900e3",
+ "b6db467a668856eac84475dc2b86e03fc4342095",
[
null,
[
@@ -135622,7 +135613,23 @@
"=="
]
],
- {}
+ {
+ "fuzzy": [
+ [
+ null,
+ [
+ [
+ 0,
+ 58
+ ],
+ [
+ 0,
+ 412
+ ]
+ ]
+ ]
+ ]
+ }
]
],
"css3-border-image-repeat-stretch.html": [
@@ -139227,6 +139234,19 @@
{}
]
],
+ "nested-flex-item-expansion-in-mulicol.html": [
+ "56aa3ec5c26878e4b12be7fe09e2700021e6b19c",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"single-line-column-flex-fragmentation-001.html": [
"d1411f9a16a14585b945408b162182ed343419d2",
[
@@ -207711,6 +207731,19 @@
{}
]
],
+ "overflow-overlay.tentative.html": [
+ "e3cb8d7180e4bc5ddb84506e401c0b8c90d81470",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/overflow-overlay-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"overflow-recalc-001.html": [
"9c5919a5044bdbac0e782fbb662f1ff3b81857fc",
[
@@ -216863,32 +216896,6 @@
{}
]
],
- "scoped-reference-animation-001.html": [
- "891bda52a39b42322cf15cb01727f9cad58cf026",
- [
- null,
- [
- [
- "/css/css-scoping/scoped-reference-animation-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "scoped-reference-animation-002.html": [
- "d5c25f06c0aa73269615ec9bf2b6399729ea261a",
- [
- null,
- [
- [
- "/css/css-scoping/scoped-reference-animation-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
"shadow-assign-dynamic-001.html": [
"b9a0d1a2991c071bb3654995f93c4ac7ff495aee",
[
@@ -224745,6 +224752,32 @@
{}
]
],
+ "fit-content-block-size-abspos.html": [
+ "d8ce91f9f626f8569bd9452c9fd90ead9a75ee4e",
+ [
+ null,
+ [
+ [
+ "/css/css-sizing/fit-content-block-size-fixedpos-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "fit-content-block-size-fixedpos.html": [
+ "1f08c6ab9f20747a3ab166a12654e106b5d51efd",
+ [
+ null,
+ [
+ [
+ "/css/css-sizing/fit-content-block-size-fixedpos-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"fit-content-contribution-001.html": [
"efe3d49f4c8e51e9a4d5c0354cf8a35678658f06",
[
@@ -227266,6 +227299,19 @@
{}
]
],
+ "whitespace-001.html": [
+ "3fc6040b472228506b94ccc5fc546d9116cdc94d",
+ [
+ null,
+ [
+ [
+ "/css/css-tables/whitespace-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"zero-rowspan-001.html": [
"bef5b947fcc817f165fbd0c73fb5b260c520e632",
[
@@ -310401,6 +310447,19 @@
],
{}
]
+ ],
+ "painting-stretchy-operator-001.html": [
+ "2a9578badc0474075e219bf44a0a855a6fdc362c",
+ [
+ null,
+ [
+ [
+ "/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
]
},
"radicals": {
@@ -383236,6 +383295,10 @@
"e81f5c158a91b87f7c9d385331842ed56f09e4b3",
[]
],
+ "overflow-overlay-ref.html": [
+ "3d88b75890c0e20a6beda2f4607ed0ae6ef49d4a",
+ []
+ ],
"overflow-scroll-big-border-small-content-ref.html": [
"c7ea1807443ef1b2d454edd547e65c89a59cea16",
[]
@@ -385330,10 +385393,6 @@
[]
]
},
- "scoped-reference-animation-ref.html": [
- "9f407eb690e0fb3d033afba0817082f84e30b783",
- []
- ],
"slotted-placeholder-ref.html": [
"f99c0385d061766b49d55e7703bf596fe69d6ec2",
[]
@@ -386618,6 +386677,10 @@
"c8d67a8d27457acc6edaf3a60d31fc005791d6ed",
[]
],
+ "fit-content-block-size-fixedpos-ref.html": [
+ "0f9f8bd1b0352ea66763232f3a093eb569ca9511",
+ []
+ ],
"hori-block-size-small-or-larger-than-container-with-min-or-max-content-1-ref.html": [
"263a0869aedbaceb06ebe81a53372c905e8acd9e",
[]
@@ -387338,6 +387401,10 @@
"27eceb19b5a41355f288f94dbfa4daba574cbfde",
[]
],
+ "whitespace-001-ref.html": [
+ "e9d5c50ccd6fb293976675968dcc591a144cfdf9",
+ []
+ ],
"zero-rowspan-001-ref.html": [
"4f1dbdf96d301579da7fe3e9e493318e1920b705",
[]
@@ -400107,7 +400174,7 @@
[]
],
"computed-testcommon.js": [
- "e8d3a523477e11650bea357b1e891faa1a3d9e26",
+ "831baf311a308ad30f93755ac69d698767254ebb",
[]
],
"delete-other-rule-crash.css": [
@@ -401318,7 +401385,7 @@
},
"scrolling": {
"scroll_support.js": [
- "847a9891d6a87ce3ac5ccfeb382e619f59992999",
+ "de23b6f84ff668c1542bd5210962e8535eae526d",
[]
]
}
@@ -401891,7 +401958,7 @@
[]
],
"delete.js": [
- "26858d17197e124728c548a58796d7a16a08eb03",
+ "c1f48a74b2010bd44ff71a33f9f9f4b4cbb5caac",
[]
],
"fontname.js": [
@@ -401903,7 +401970,7 @@
[]
],
"forecolor.js": [
- "efca1970ec9f57da8f8ff544f64d21ca875c965f",
+ "c3271b32c965c7fe56ba8ab85de40eb7ea7e69c1",
[]
],
"formatblock.js": [
@@ -401911,7 +401978,7 @@
[]
],
"forwarddelete.js": [
- "323d2b81b9f45f044729331e0490ef7d2682a4cd",
+ "832ba608a04587feeb85308f23f6b530b3e65b79",
[]
],
"hilitecolor.js": [
@@ -406038,8 +406105,12 @@
"7a90c74f3e51bf9d61870ec33d16b0857bb07772",
[]
],
+ "stretchy-centered-on-baseline.woff": [
+ "fd753edf7611a36570045a357690a1137ee5d137",
+ []
+ ],
"stretchy.woff": [
- "fc1b75c948d460b5f6061122bca29b4ad737fc79",
+ "eb67181e1ea241ff03a2a5d6b98c93238cc011cf",
[]
],
"underover-accentbaseheight4000-overbarextraascender3000.woff": [
@@ -410162,19 +410233,19 @@
[]
],
"gentestutils.py": [
- "16ca5f410c0dd1182271b151fc2fa3e0530248e6",
+ "2517568a5a83c9e8539a7c93e69aaf8a085504f4",
[]
],
"gentestutilsunion.py": [
- "047dd6c802b14f375f8049afa211ba921715ca6c",
+ "4c65d688c25f27d6d29f4732f1f250323385a945",
[]
],
"name2dir-canvas.yaml": [
- "f1ebe4b8a9d0c3c1df735f8c00ea9f7f443c3b82",
+ "c3818ebc76e8d85636ed298a580ec14f8253a6fa",
[]
],
"name2dir-offscreen.yaml": [
- "4ac261fe325fddc6563f49423c400a15e4884563",
+ "807b09507b1cb137cef392be63a550f49bdd9725",
[]
],
"name2dir.yaml": [
@@ -410199,10 +410270,6 @@
"fe7b8841ae97ed4f55abef0f48fd684206d5a4aa",
[]
],
- "line-styles.yaml": [
- "604f4f3659a40b89b05f1bce3968f2580dce3c6f",
- []
- ],
"meta.yaml": [
"b8ffbd5075860d9b3600ed2bb794b5da9fa2de5e",
[]
@@ -410241,10 +410308,6 @@
"9d34588c100cc47586bc1573de182f5b2a7eaf5b",
[]
],
- "line-styles.yaml": [
- "984949827db86ce0c071db266e399b617fc5c7f1",
- []
- ],
"meta.yaml": [
"aa850d4e48f37d0231c2af35c6f4ac807c095ede",
[]
@@ -410293,7 +410356,7 @@
[]
],
"drawing-images-to-the-canvas.yaml": [
- "83de88113f23a5051bed0296db4ce17c2bec9ebe",
+ "e263bf0253dd121a97f32e3747c32e7799518ccd",
[]
],
"drawing-rectangles-to-the-canvas.yaml": [
@@ -410304,6 +410367,10 @@
"cc5dfe7fefbcd9a5cbf487e46cdab3afdd84c3d1",
[]
],
+ "line-styles.yaml": [
+ "604f4f3659a40b89b05f1bce3968f2580dce3c6f",
+ []
+ ],
"reset.yaml": [
"4107166248a8a652fbc0441e3c4d30bf71bb4484",
[]
@@ -415108,6 +415175,14 @@
]
}
}
+ },
+ "terminology-0": {
+ "resources": {
+ "send-back-base-url.html": [
+ "6fdf81d1db76a752283a740a45b79461aaae071a",
+ []
+ ]
+ }
}
}
},
@@ -423955,7 +424030,7 @@
]
},
"lint.ignore": [
- "011f05c607e24b53f0d1120dc9c8a6cf5fdf06d9",
+ "f6776a6617497600fb985d921859e5672f2f8df3",
[]
],
"loading": {
@@ -424565,6 +424640,10 @@
"2cbed129401e721fccfeb12874d6b7223bff8def",
[]
],
+ "painting-stretchy-operator-001-ref.html": [
+ "0c7642a20ac6ebc0779a2c9e2222797c92dad579",
+ []
+ ],
"support": {
"operator-dictionary-tests.css": [
"4f80ad7f8dd0e28a40900b0c11ee9adaa800bd97",
@@ -425108,8 +425187,12 @@
"f112a707690e7eb095c9cf7152d0f3877e17a27c",
[]
],
+ "stretchy-centered-on-baseline.py": [
+ "fa75bafcf0eb6368bae11b9ac144e6703b58d2ca",
+ []
+ ],
"stretchy.py": [
- "b93dbcee74d01b53c8d4cd884fb3b7395f0c0e04",
+ "1d1096261cb6350291ce1a406c749c0dc434d929",
[]
],
"underover.py": [
@@ -425126,7 +425209,7 @@
[]
],
"mathfont.py": [
- "d030c9f2ce07785112cea4b9e786cdbe7020829e",
+ "79772a24cb5e8b4269005ef5337495062ccdb8f8",
[]
],
"misc.py": [
@@ -430057,7 +430140,7 @@
[]
],
"nested-contexts.js": [
- "c0822943e86a68f43d003e03166fbc987014946e",
+ "31337ae5da2e181df178fa881bb38c3f394580b1",
[]
],
"nested.css": [
@@ -430273,7 +430356,7 @@
[]
],
"mock-imagecapture.js": [
- "97d45d453bdda968b2356acf0b129d2eb0347f64",
+ "5753b7ec502389bcf248ed91ecb4c75d7a975ed3",
[]
],
"mock-managed-config.js": [
@@ -431025,7 +431108,7 @@
},
"view-timelines": {
"testcommon.js": [
- "12693c35d768263b9db625702f174d7cf79606c0",
+ "65301215c4732720f578140b32b6207a7325f400",
[]
]
}
@@ -434782,12 +434865,12 @@
[]
],
"helpers.js": [
- "337a92c5d4a7ca14ec40f165bb95a82c63dd39d1",
+ "e607124155e031a273f5abe7e9dad2da8b988d7e",
[]
],
"resources": {
"embedded_responder.js": [
- "0d563e6b30ccaf55229de06e5e1c0a846f5f4e4b",
+ "0ff599d0bbe4d1afab068baf35222d397d7016f7",
[]
],
"hasStorageAccess-iframe.html": [
@@ -434798,6 +434881,10 @@
"95169503c2a8466ddc5e3d0928de96b4e268b3a8",
[]
],
+ "permissions-iframe.https.html": [
+ "b83a05c3f1bdf00107447527d5e009b06ddb0187",
+ []
+ ],
"requestStorageAccess-iframe.html": [
"8b47786e17d43ab6b468683dd460d1c77960f47e",
[]
@@ -445700,6 +445787,20 @@
}
}
},
+ "top-level-storage-access-api": {
+ "README.md": [
+ "31a32b8033e3e3d3b2c6f9a04230b76186fbc1c3",
+ []
+ ],
+ "tentative": {
+ "resources": {
+ "requestStorageAccessForOrigin-iframe.html": [
+ "3e2f6d5b6288993714f3ee56ae89631e03d563b9",
+ []
+ ]
+ }
+ }
+ },
"touch-events": {
"META.yml": [
"3dcab9a534bc43753827b2d4f7cc6d3cd9974404",
@@ -446459,7 +446560,7 @@
[]
],
"setters_tests.json": [
- "df75ab57c420dc18067c1ba6d601503a64e9422a",
+ "9c4eedc60893edc7adab53d85b88e76fe6b9e5a2",
[]
],
"toascii.json": [
@@ -487915,21 +488016,21 @@
]
],
"anchor-position-dynamic-002.html": [
- "f70f93441d0281c99eb84b3078a11136f09845cd",
+ "a0924e92201993d081b01ca2a20b9ae37895698a",
[
null,
{}
]
],
"anchor-position-dynamic-003.html": [
- "04ccd56c77c3dc4fae24d90ebc19ad26a29f0eb1",
+ "6deba86c7efe75dce05a3c3280e4193e7719ae79",
[
null,
{}
]
],
"anchor-position-dynamic-004.html": [
- "b818e23c7fa24dc6cb5e76d09a63c069ff6e7b7a",
+ "01f1cd2ebc7e185db37c570139bd803756f51c27",
[
null,
{}
@@ -488069,7 +488170,7 @@
]
],
"anchor-query-fallback.html": [
- "8d413fd862d5b697b07d4777ce12053b34c4d7e5",
+ "95d43ffedb7b8cbe437c2e444d5b454d5738ffcb",
[
null,
{}
@@ -491270,7 +491371,7 @@
]
],
"at-container-parsing.html": [
- "2fbd4b8b6f46185d97b2badf1a71129012cc7df4",
+ "d0aef94de55eca8c00cde4d3ddb7bd94105573c8",
[
null,
{}
@@ -491283,6 +491384,13 @@
{}
]
],
+ "at-container-style-parsing.html": [
+ "5bd9e018c1a317f5fe0dd055e04ef3f87d55f1cd",
+ [
+ null,
+ {}
+ ]
+ ],
"at-container-style-serialization.html": [
"9544463859106e2a4a3ca34cd80364139de29160",
[
@@ -499914,6 +500022,13 @@
null,
{}
]
+ ],
+ "baseline-source-vertical-align.html": [
+ "32bbe434974df6bfab2a91c42dca3b8e4bf7f43f",
+ [
+ null,
+ {}
+ ]
]
},
"inheritance.html": [
@@ -501616,7 +501731,7 @@
},
"css-nesting": {
"cssom.html": [
- "c7150cec5db459824e22d2ae445a62db6a484684",
+ "987c31103677ca662b8d2e2c2d14a542a155103a",
[
null,
{}
@@ -514746,7 +514861,7 @@
]
],
"acos-asin-atan-atan2-computed.html": [
- "6fc8bdfe6af42bb53bbdfdaff71a9bb13135ccb4",
+ "2835e7a20abc917e111d22a9b04fca17493b4793",
[
null,
{}
@@ -515000,7 +515115,7 @@
]
],
"exp-log-compute.html": [
- "8812253bf10bb940e855b9b0af5a57ab62fbf216",
+ "3fa240004426d6968f01808a4ab1f3fba3114522",
[
null,
{}
@@ -515042,14 +515157,14 @@
]
],
"hypot-pow-sqrt-computed.html": [
- "a7d7dae72a5282f950fce5b42017755cc5f43116",
+ "aa4ec22edf2ff32fa5ad129e0cdeb0ca4d6e8fb1",
[
null,
{}
]
],
"hypot-pow-sqrt-invalid.html": [
- "517acf57efd70e88d4f4b68a2206d1e3300fa658",
+ "edb3138012687d3a6d75a1bdc1a6623aec8deb1d",
[
null,
{}
@@ -515308,7 +515423,7 @@
]
],
"signs-abs-computed.html": [
- "ba672f23cec532befccc2947c4ee14e48d1e2a79",
+ "74dff7c9c0c157a06db97868cac7abf3b1804d45",
[
null,
{}
@@ -517592,6 +517707,13 @@
null,
{}
]
+ ],
+ "xml-stylesheet-pi-in-doctype.xhtml": [
+ "d25ca1765617f1457b90d31451925adc9817a084",
+ [
+ null,
+ {}
+ ]
]
},
"cssom-view": {
@@ -522237,6 +522359,15 @@
{}
]
],
+ "requires-width-and-height-to-both-be-specified.https.html": [
+ "0c707c668e9980901a2250ccb28042eb40c86f8c",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"returns-window-with-document.https.html": [
"a1d7363e54bdc5fbc04a6ad6e0aad30b552ea8d7",
[
@@ -523812,7 +523943,7 @@
]
],
"scrollend-event-for-user-scroll.html": [
- "e9be7c98483b86b9a8a7ce29202ba96e837df371",
+ "d51472fcb5127bfb7a51ef9c12a575be0b365afd",
[
null,
{
@@ -524174,6 +524305,13 @@
{}
]
],
+ "Comment-in-doctype.xhtml": [
+ "c0817d353de18ecad2234b6e0b648ee03d437557",
+ [
+ null,
+ {}
+ ]
+ ],
"DOMImplementation-createDocument.html": [
"835002b47077672583df7b364323428dd67ffee8",
[
@@ -525409,6 +525547,13 @@
{}
]
],
+ "ProcessingInstruction-in-doctype.xhtml": [
+ "c35e710f9cc81217e6fdddf4ea5b9ee3b5160d3a",
+ [
+ null,
+ {}
+ ]
+ ],
"ProcessingInstruction-literal-1.xhtml": [
"4eaf86cbdcea2df23fee6a802679affb548713e1",
[
@@ -578562,112 +578707,112 @@
},
"line-styles": {
"2d.line.cap.butt.html": [
- "7f34def5648a8d8b44deb038dfe091792893c2f0",
+ "717317de706f27c2603ac856b0852b9bfd6513eb",
[
null,
{}
]
],
"2d.line.cap.butt.worker.js": [
- "3eacba11a3e16bf038a81808c1eb8a3a04f9816f",
+ "3ad21e9da96c507cd33974000b9e34013f1272da",
[
"html/canvas/offscreen/line-styles/2d.line.cap.butt.worker.html",
{}
]
],
"2d.line.cap.closed.html": [
- "0a3f3fcab77edc110f8e338ce78a9b561b96d16f",
+ "b6479be77e10886954076487816b48085fdcd1d9",
[
null,
{}
]
],
"2d.line.cap.closed.worker.js": [
- "24bace4c27535bda8afccb7d742a04aecb36d7a3",
+ "50c81519d2e7d44e7c0ee6e47bea2badb0f70c1c",
[
"html/canvas/offscreen/line-styles/2d.line.cap.closed.worker.html",
{}
]
],
"2d.line.cap.invalid.html": [
- "f02cfcc758ce360334780143834e8bea22e54f7e",
+ "b4598fdd85ee385b287c8dfd1a1f4c66bcd75a06",
[
null,
{}
]
],
"2d.line.cap.invalid.worker.js": [
- "4ef69f35afa820dc2faf7e237c86797cedcf0e45",
+ "bf933941023265afaca4c97a5d791ffb89613d22",
[
"html/canvas/offscreen/line-styles/2d.line.cap.invalid.worker.html",
{}
]
],
"2d.line.cap.open.html": [
- "00b72b62d2d66f01c60e9e31e6b50b6ec62e4b63",
+ "211ff760f662a71385862f4c69fb687ed091676a",
[
null,
{}
]
],
"2d.line.cap.open.worker.js": [
- "621de99a83f1dc83f215b46f0a5ae781846fba11",
+ "ff081deb7d0773dc2ad2b344d9f8b28734080b7c",
[
"html/canvas/offscreen/line-styles/2d.line.cap.open.worker.html",
{}
]
],
"2d.line.cap.round.html": [
- "9f6c66567e9030c3347c80d61d5b33c38bd93ec6",
+ "37a27b17bcd57cf1c9d4efc888fda5d454fb12de",
[
null,
{}
]
],
"2d.line.cap.round.worker.js": [
- "e744d2906fae4da099554f6fc215a85a36aef448",
+ "f03579ee54ba7e4405f52b50d529da8d1a74ada6",
[
"html/canvas/offscreen/line-styles/2d.line.cap.round.worker.html",
{}
]
],
"2d.line.cap.square.html": [
- "0fd4b2c71a75515ca3a4bd4b0d7356d4bcbc2523",
+ "75f9e44e21ab7633e7704f3993f6b29fbc1a75bd",
[
null,
{}
]
],
"2d.line.cap.square.worker.js": [
- "7684bbbc85f318b6c5f8e22cf322ff67f1e6f7ef",
+ "439f100409afeb8cb8b93ea7b68ce64df2f94dfa",
[
"html/canvas/offscreen/line-styles/2d.line.cap.square.worker.html",
{}
]
],
"2d.line.cap.valid.html": [
- "ce7b4c8ad62c955d0b4b213e3f9f88a1d565528d",
+ "d4fcdfc0b5ef1deffefc6b8781035b73d2bd5228",
[
null,
{}
]
],
"2d.line.cap.valid.worker.js": [
- "7fa84f4d6f445932912c8121be3362bb08196bcf",
+ "52907f433eccf6c2a115a555af60cb38d1eea48f",
[
"html/canvas/offscreen/line-styles/2d.line.cap.valid.worker.html",
{}
]
],
"2d.line.cross.html": [
- "09d3a00b3177e26090857d6c86ee302ffa6c138e",
+ "51fd1c407846a99496c6a6c52e29a3c8889642f2",
[
null,
{}
]
],
"2d.line.cross.worker.js": [
- "82b289bdeaca6fb5c85d608623f8fde79832c9ad",
+ "e455aa6155dd1f693e245f9930b35ccf0ca81928",
[
"html/canvas/offscreen/line-styles/2d.line.cross.worker.html",
{}
@@ -578687,309 +578832,323 @@
{}
]
],
+ "2d.line.invalid.strokestyle.html": [
+ "c1bb974dbf79d11f2edb822c44eca65e7f3e0e17",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.line.invalid.strokestyle.worker.js": [
+ "c9f2fa3d9f2a4ead65a29d9efb9b98e9a1290e81",
+ [
+ "html/canvas/offscreen/line-styles/2d.line.invalid.strokestyle.worker.html",
+ {}
+ ]
+ ],
"2d.line.join.bevel.html": [
- "45c8d3eb5439224a9f70fc1a8a9a7d9db5454315",
+ "ecf83e7b5a0daf54fcb9d7f57c0f3860fb226de7",
[
null,
{}
]
],
"2d.line.join.bevel.worker.js": [
- "2dfbf34f1566a8fbd446694d43da8c2c7d382396",
+ "87bf6a8d37c83ed5bce18d0470c86d1a7ccb8116",
[
"html/canvas/offscreen/line-styles/2d.line.join.bevel.worker.html",
{}
]
],
"2d.line.join.closed.html": [
- "5e88ad0d0179b35b3150aceb6ce8f6682a9d6e67",
+ "7ce6599f4c100281033f251b7b7b6d0e90ab5da7",
[
null,
{}
]
],
"2d.line.join.closed.worker.js": [
- "f2b029ecaf08058e1af459c9fa6b486b6f0b2a28",
+ "cc7073fadba492825e7d66092bcf97b65903e6b9",
[
"html/canvas/offscreen/line-styles/2d.line.join.closed.worker.html",
{}
]
],
"2d.line.join.invalid.html": [
- "a54861205edf7801fcfedd9cd7c52682cbba7006",
+ "59d8b4311d8e0a9f03021d383d181c3145eda7a1",
[
null,
{}
]
],
"2d.line.join.invalid.worker.js": [
- "23dfe67230df1034a6a9f8adbd509cd3e6c77a96",
+ "fa19bd70b0c3441c56d26cbe7bbc3e2ff5077f00",
[
"html/canvas/offscreen/line-styles/2d.line.join.invalid.worker.html",
{}
]
],
"2d.line.join.miter.html": [
- "64918eca38382e4bcbda700df72c717f319abb12",
+ "d28fb8b69f384b18d9a7242efd0d06d2feab4974",
[
null,
{}
]
],
"2d.line.join.miter.worker.js": [
- "02712a806eb2315b8d2456ab0e4fa6597a01ec98",
+ "3a3eb8f86f2803ca605e8555913a67cb84e52e7c",
[
"html/canvas/offscreen/line-styles/2d.line.join.miter.worker.html",
{}
]
],
"2d.line.join.open.html": [
- "48154df59b63718fc26e3ddc8243a2d3a0b28bc0",
+ "5bd8e48061c30df3a46d4f0d470963442e3f5a82",
[
null,
{}
]
],
"2d.line.join.open.worker.js": [
- "133854bf5488968ecc025385cdbd8d107fc4dbfa",
+ "5f52b6337adb6b7df37f263575ffe69ec727f977",
[
"html/canvas/offscreen/line-styles/2d.line.join.open.worker.html",
{}
]
],
"2d.line.join.parallel.html": [
- "fdda123dd8a45ce88e41160e1c766fde0c3caba7",
+ "928bb86f120693444f24ab7c7852e3e34994f88f",
[
null,
{}
]
],
"2d.line.join.parallel.worker.js": [
- "68ed957b6d7a00120f3fd2363a30e47115e4396a",
+ "d431d5e99f5ee26ec644fa0e5d8a24946b73d90a",
[
"html/canvas/offscreen/line-styles/2d.line.join.parallel.worker.html",
{}
]
],
"2d.line.join.round.html": [
- "ebc71c30f8389fa91252473cabd9003491c6eabd",
+ "9441585e50d4b22373a5859ee2487fb8f285c223",
[
null,
{}
]
],
"2d.line.join.round.worker.js": [
- "c7da3520b3fa3dfe05e0e64637826af215948753",
+ "44a847bd30cfbf3ec905789ccf8d3005fdf1e10d",
[
"html/canvas/offscreen/line-styles/2d.line.join.round.worker.html",
{}
]
],
"2d.line.join.valid.html": [
- "eaa7c24967e99193cd6690c0179b4005ce85dd16",
+ "b3b15fc09d68111536cb93825efe6cec90314b93",
[
null,
{}
]
],
"2d.line.join.valid.worker.js": [
- "4e7154358a0d17fd9150b812b1dd6d03f90d3b0d",
+ "407dbdd59e0fa3522dad0fc785909b812a3c786c",
[
"html/canvas/offscreen/line-styles/2d.line.join.valid.worker.html",
{}
]
],
"2d.line.miter.acute.html": [
- "fd6902ca4d694e72483f9976ed1bd8d9742d4d2c",
+ "1713d8174ea27ed99aaeec806332ab439b03f1dc",
[
null,
{}
]
],
"2d.line.miter.acute.worker.js": [
- "ef2954a7fe2e21342471f14016f3bd26884fe489",
+ "95040d131943b6b8486f7b02f6cfde1fcd5ad431",
[
"html/canvas/offscreen/line-styles/2d.line.miter.acute.worker.html",
{}
]
],
"2d.line.miter.exceeded.html": [
- "fd0e7a1ca2ffd61480370c788ae6f6a3002c9a74",
+ "172c63ca1cedee595df9c12031cd87134c0fcc6b",
[
null,
{}
]
],
"2d.line.miter.exceeded.worker.js": [
- "2e0fbd4910cec862ff397076a8273246cabc3ca5",
+ "e2b04e21f63c63fb01a0548793314ae8c4f991df",
[
"html/canvas/offscreen/line-styles/2d.line.miter.exceeded.worker.html",
{}
]
],
"2d.line.miter.invalid.html": [
- "35bda1a11ac95c4ae331547580e4613af516bf4a",
+ "27251d4902aff9b6aa1448c276dec82be88bfd42",
[
null,
{}
]
],
"2d.line.miter.invalid.worker.js": [
- "ef4c17eea2d64a87159c7bd05ece8a5eaf111cf6",
+ "dbc64d52d94f9075f97fcebc848d60a83d276464",
[
"html/canvas/offscreen/line-styles/2d.line.miter.invalid.worker.html",
{}
]
],
"2d.line.miter.lineedge.html": [
- "292ed560de64898cd49c06e526eeb036a95273b8",
+ "5ede60b8995dbb7345dd182783836700b3ef9b87",
[
null,
{}
]
],
"2d.line.miter.lineedge.worker.js": [
- "c7fa1e6d17334953694aa1be8c210d5f84df6071",
+ "24f4fa30f5ea0f0a14849ab310b606edd7bca556",
[
"html/canvas/offscreen/line-styles/2d.line.miter.lineedge.worker.html",
{}
]
],
"2d.line.miter.obtuse.html": [
- "4e60253ddcad8abacc6527a39ca7f19e6e996104",
+ "0eaeedfa4197622d387b316ec27a1bb76e4833a4",
[
null,
{}
]
],
"2d.line.miter.obtuse.worker.js": [
- "3cf78ed21e8ed72e5b0c82ff8717381845692cbc",
+ "45900dbc88a33d8dc1e8016b5375d1954743ac5f",
[
"html/canvas/offscreen/line-styles/2d.line.miter.obtuse.worker.html",
{}
]
],
"2d.line.miter.rightangle.html": [
- "33cbe5d02c3b9dcc500d9296998f0f1326d2e993",
+ "7f8134f180fe52abdaa4bb44286f47a60cfa92d0",
[
null,
{}
]
],
"2d.line.miter.rightangle.worker.js": [
- "895318c3ef35bee0a24b3c556651a42dbe700d0d",
+ "a2a07247b1e5667c4c4ea9940cbb28c884aa475d",
[
"html/canvas/offscreen/line-styles/2d.line.miter.rightangle.worker.html",
{}
]
],
"2d.line.miter.valid.html": [
- "1d034052aa04b8b2a4e105a65349e1f2e11e46a0",
+ "2702fc57a3c18ce503590431a0dd73ae506872c4",
[
null,
{}
]
],
"2d.line.miter.valid.worker.js": [
- "b34561407ea5c875d3d93d63fa67ef9cc314de61",
+ "c71c726f126de39180db96ecba995c9bf29affde",
[
"html/canvas/offscreen/line-styles/2d.line.miter.valid.worker.html",
{}
]
],
"2d.line.miter.within.html": [
- "4af7c84a6a1532778e5c002d99231ab0ece16807",
+ "a9f7a366a38a687d54ea14d06f235e4dfe791045",
[
null,
{}
]
],
"2d.line.miter.within.worker.js": [
- "64fe4312c27164eefc0906a70a6ccdb8db4e4c6b",
+ "c09ad957e89bd39f5952488252a99b7742864188",
[
"html/canvas/offscreen/line-styles/2d.line.miter.within.worker.html",
{}
]
],
"2d.line.union.html": [
- "60defee7cb8aa32028ef7c71c814285c4c8bdd2b",
+ "1f8b3a0d67c7f2b43edeb43c7a880e504b3a8665",
[
null,
{}
]
],
"2d.line.union.worker.js": [
- "ed262373374890d50fecc717b75ae3ce567b0b07",
+ "02ebbfd8af01ee2a6ea492af9c3f1bee3cad6d38",
[
"html/canvas/offscreen/line-styles/2d.line.union.worker.html",
{}
]
],
"2d.line.width.basic.html": [
- "9b81b1c386c15d6bcd1c8e03c234625072c2aa35",
+ "1d0e0298288891a002c3322701f4325da44f846d",
[
null,
{}
]
],
"2d.line.width.basic.worker.js": [
- "e822679c637a90c0d256ce564f29ed802cdb5548",
+ "d066427897971977a964faa1f427402fe7d42aca",
[
"html/canvas/offscreen/line-styles/2d.line.width.basic.worker.html",
{}
]
],
"2d.line.width.invalid.html": [
- "439af5ecf29222c2cee965320ff9104a097ae7a9",
+ "993dc17948f42c334d0a3122e3722fafdb595891",
[
null,
{}
]
],
"2d.line.width.invalid.worker.js": [
- "d87b87e901ba6ff58cf70e04273c5490269ef58f",
+ "dc5e2c29263ffcea8330f4cc136c52cec754acec",
[
"html/canvas/offscreen/line-styles/2d.line.width.invalid.worker.html",
{}
]
],
"2d.line.width.scaledefault.html": [
- "78139978580c48c1b4caaf1c4e969d15a61c2789",
+ "091fd80c298a2cd0c29e84b9f408b2048dc56a52",
[
null,
{}
]
],
"2d.line.width.scaledefault.worker.js": [
- "f9506c4accfa95b407fa68420fe3a50ad92b1627",
+ "a692f4cc11331236a028641bcebe5719a2fefac7",
[
"html/canvas/offscreen/line-styles/2d.line.width.scaledefault.worker.html",
{}
]
],
"2d.line.width.transformed.html": [
- "e75cccd99127f0e0c5ec1ad4eae3b5de265c21fb",
+ "c54943e462cc70b0e04ab33a7b8cc1e610e3ae36",
[
null,
{}
]
],
"2d.line.width.transformed.worker.js": [
- "f377d03ca75d6b50384e899c1dc5807cb344e1ed",
+ "e26e93b1e4f93e87557bd00d59bb728db4e74744",
[
"html/canvas/offscreen/line-styles/2d.line.width.transformed.worker.html",
{}
]
],
"2d.line.width.valid.html": [
- "adaabccc114ce753372d0d748e4e1944a7aef83e",
+ "bdd86c6fbbf5cd69f5f1dfd5678f39cfa0f983ea",
[
null,
{}
]
],
"2d.line.width.valid.worker.js": [
- "f409e1fa8bf08fadfdd2a8992383e0825b6ad817",
+ "df6ee9838e8a808ee8390e24c5cdf7257591ecd9",
[
"html/canvas/offscreen/line-styles/2d.line.width.valid.worker.html",
{}
@@ -591074,6 +591233,20 @@
{}
]
],
+ "document-base-url-changes-after-nav-about-srcdoc.https.window.js": [
+ "897647a45e1f41a2b3d1eae16a2fa1b6631e0da1",
+ [
+ "html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/common/get-host-info.sub.js"
+ ]
+ ]
+ }
+ ]
+ ],
"document-base-url-initiated-grand-parent.https.window.js": [
"1983f02c267837a9152f94d91bdbde4b1c3add6d",
[
@@ -593528,6 +593701,13 @@
]
]
},
+ "http-equiv-and-name.html": [
+ "144217df3848851445f78d4e1b725dc1d479584e",
+ [
+ null,
+ {}
+ ]
+ ],
"pragma-directives": {
"attr-meta-http-equiv-refresh": {
"allow-scripts-flag-changing-1.html": [
@@ -606165,6 +606345,13 @@
{}
]
],
+ "valid-invalid-fieldset-disconnected.html": [
+ "6ad329438a86b411ebdab81a2a35a6ce8e95d6c9",
+ [
+ null,
+ {}
+ ]
+ ],
"valid-invalid.html": [
"d93407707f07e99dec7a45a9c2b5df388c17d98d",
[
@@ -619214,7 +619401,7 @@
}
]
],
- "setOptions-reject.html": [
+ "takePhoto-reject.html": [
"4deee97d7bc77859602aa25d51e547bd0290409b",
[
null,
@@ -621601,6 +621788,13 @@
{}
]
],
+ "mixed-content-cors.https.sub.html": [
+ "eb7b443df39bbca15767df3ad474a4375d5ab429",
+ [
+ null,
+ {}
+ ]
+ ],
"video-upgrade.https.sub.html": [
"ea2d07309c06af5d56e5553ed7a3f9a9a80bca8f",
[
@@ -646499,6 +646693,15 @@
{}
]
],
+ "wakelock-document-hidden.https.html": [
+ "c8c9712bdd95f65b292535df844634aedb5abb19",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"wakelock-enabled-by-permissions-policy-attribute-redirect-on-load.https.html": [
"acfce43f96247949d7e4963970d0502d9c0b5d5d",
[
@@ -646649,7 +646852,7 @@
]
],
"animation-timeline-computed.html": [
- "9cabaab1fee19011dc6f6eff464beb1d16fc796a",
+ "aaff44ecc913e3b1892c9bc0d3d06c94b5fed28e",
[
null,
{}
@@ -646691,7 +646894,7 @@
]
],
"animation-timeline-parsing.html": [
- "1a30f11f851824801abc2b9501037c509588112d",
+ "a1e9963f1fac38f0614a1dacbb4a0bda2da0560a",
[
null,
{}
@@ -646739,15 +646942,15 @@
{}
]
],
- "scroll-timeline-axis-computed.tentative.html": [
- "8e23968b8e5db583eb0f093e2447da1eb472c508",
+ "scroll-timeline-axis-computed.html": [
+ "b971aba6c0f8a5bd5a6e18ddbef1cc296263c305",
[
null,
{}
]
],
- "scroll-timeline-axis-parsing.tentative.html": [
- "81be07e38f31f6b4f64dde75df6415c63a36bcb2",
+ "scroll-timeline-axis-parsing.html": [
+ "25f48f0c70ab57359e291ac65f7c37436bd97425",
[
null,
{}
@@ -646795,15 +646998,15 @@
{}
]
],
- "scroll-timeline-name-computed.tentative.html": [
- "1acb964ef7455ab30c4c627c24f12b9c186753d0",
+ "scroll-timeline-name-computed.html": [
+ "bfffafc652319721a56aea35757124b03d716e3a",
[
null,
{}
]
],
- "scroll-timeline-name-parsing.tentative.html": [
- "a8f2e316501b1070dd8dde58c79500903e30f7b9",
+ "scroll-timeline-name-parsing.html": [
+ "0fb271250ad9ab12dd022579b016b4e4a1c50323",
[
null,
{}
@@ -646852,7 +647055,7 @@
]
],
"scroll-timeline-shorthand.tentative.html": [
- "b74113a52a20819f2e10d00abc8706128e072e21",
+ "24597b91e2f1d2b4b224e02b998436d4da1667a6",
[
null,
{}
@@ -646872,6 +647075,13 @@
{}
]
],
+ "view-timeline-animation-range-update.tentative.html": [
+ "41386bd7c55baff1062e3d0caa7f663cf80c0637",
+ [
+ null,
+ {}
+ ]
+ ],
"view-timeline-animation.html": [
"b816bb689732b3be59df48c0653ed892dc70cdd4",
[
@@ -647188,14 +647398,14 @@
]
],
"inline-view-timeline-current-time.tentative.html": [
- "412145b04c0a951aa96312afb641159884ae5756",
+ "5b37798fe89035a5eb459ae479fc94ac42a05689",
[
null,
{}
]
],
"view-timeline-get-current-time-range-name.html": [
- "8f385e7b6ebaa208582bc3bec068cc1beb791fd8",
+ "09714b572bc742607e030fc4d8934f5cbecded8d",
[
null,
{}
@@ -647244,7 +647454,7 @@
]
],
"view-timeline-subject-size-changes.html": [
- "553facb52fa18323369c8061ce934ceb74d50f0e",
+ "a47fed8e4467093807ecc080686bd80501abade8",
[
null,
{}
@@ -656637,7 +656847,7 @@
]
],
"requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js": [
- "958b6095e359f0305e845360cd188f8e3a603449",
+ "a469d1b9628194cc25d7ae11da24c91fdb50efa5",
[
"storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.html",
{
@@ -656849,6 +657059,28 @@
{}
]
],
+ "storage-access-permission.sub.https.window.js": [
+ "88473ce38988246d165c351d8ea9a85c948eb186",
+ [
+ "storage-access-api/storage-access-permission.sub.https.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "helpers.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver-vendor.js"
+ ]
+ ]
+ }
+ ]
+ ],
"storageAccess.testdriver.sub.html": [
"80108b5190bdb6cb010194a3fbb79ec24ffa8aa2",
[
@@ -664265,6 +664497,32 @@
]
]
},
+ "top-level-storage-access-api": {
+ "tentative": {
+ "requestStorageAccessForOrigin.sub.window.js": [
+ "f7dd478a7078673643d91fece6f64bf0148c7ec6",
+ [
+ "top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/storage-access-api/helpers.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver-vendor.js"
+ ]
+ ]
+ }
+ ]
+ ]
+ }
+ },
"touch-events": {
"expose-legacy-touch-event-apis.html": [
"2dab74dccd60f3b737a7a57362e28aac85a6cbd3",
@@ -685219,7 +685477,7 @@
]
],
"set-metadata.https.html": [
- "3840bfc7a28d5dda404d48e5cdfef812350e8092",
+ "ad346c12e44e27c60862bb693cb84a96ac16f4fa",
[
null,
{
@@ -685446,14 +685704,14 @@
]
],
"rtp-stats-creation.html": [
- "c12f266362ea432bff5f657413f8fbf612332a11",
+ "df672a7f0d99d6bddf19a857d1a1aeba17de2646",
[
null,
{}
]
],
"supported-stats.https.html": [
- "2fdd3ad9094cc6436232d4d8ea78b379d4bfb480",
+ "24b4d3f06f04d740d3b45b4813222d97f891cbcc",
[
null,
{
@@ -705349,6 +705607,13 @@
{}
]
],
+ "constructor-submitter.html": [
+ "fd4ec862387698158e615b4c91744ea2e5e421d5",
+ [
+ null,
+ {}
+ ]
+ ],
"constructor.any.js": [
"43704538ab2489a6cbd7a2449532a040fdb4adbd",
[
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini
new file mode 100644
index 00000000000..0842d0b5727
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini
@@ -0,0 +1,3 @@
+[hit-test-floats-001.html]
+ [hit-test-floats-001]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
new file mode 100644
index 00000000000..13bd6abf376
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
@@ -0,0 +1,3 @@
+[hit-test-floats-004.html]
+ [Miss float below something else]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
new file mode 100644
index 00000000000..147f062e548
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
@@ -0,0 +1,3 @@
+[hit-test-floats-005.html]
+ [Miss clipped float]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-001.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-001.html.ini
new file mode 100644
index 00000000000..b4eea326212
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-001.html.ini
@@ -0,0 +1,3 @@
+[block-in-inline-hittest-001.html]
+ [block-in-inline-hittest-001]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
index 51432362d66..ee34bc91078 100644
--- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
+++ b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
@@ -1,3 +1,6 @@
[block-in-inline-hittest-002.html]
[elementsFromPoint]
expected: FAIL
+
+ [elementFromPoint]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/hit-test-anonymous-block.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/hit-test-anonymous-block.html.ini
new file mode 100644
index 00000000000..7c07b71d77c
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/normal-flow/hit-test-anonymous-block.html.ini
@@ -0,0 +1,3 @@
+[hit-test-anonymous-block.html]
+ [Hit test beside line of text inside anonymous block]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini b/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini
deleted file mode 100644
index eb3cf41a070..00000000000
--- a/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[opacity-animation-ending-correctly-002.html]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
index 68d900bb5b0..e7defcbf180 100644
--- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
@@ -149,9 +149,6 @@
[Matching font-style: 'oblique 0deg' should prefer 'oblique 40deg 50deg' over 'italic']
expected: FAIL
- [Matching font-stretch: '90%' should prefer '60% 70%' over '110% 140%']
- expected: FAIL
-
[Matching font-style: 'italic' should prefer 'oblique 5deg 10deg' over 'oblique 5deg']
expected: FAIL
@@ -245,9 +242,6 @@
[Matching font-weight: '501' should prefer '500' over '450 460']
expected: FAIL
- [Matching font-style: 'oblique -21deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg']
- expected: FAIL
-
[Matching font-weight: '400' should prefer '351 398' over '501 550']
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini
index 2b9002f0e0c..14fcc6f7632 100644
--- a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini
@@ -175,303 +175,3 @@
[padding-bottom length(em) / values]
expected: FAIL
-
- [padding-bottom length(ex) / values]
- expected: FAIL
-
- [padding-bottom length(mm) / values]
- expected: FAIL
-
- [padding-bottom length(cm) / values]
- expected: FAIL
-
- [padding-bottom length(in) / values]
- expected: FAIL
-
- [padding-left length(pt) / values]
- expected: FAIL
-
- [padding-left length(pc) / values]
- expected: FAIL
-
- [padding-left length(px) / values]
- expected: FAIL
-
- [padding-left length(em) / values]
- expected: FAIL
-
- [padding-left length(ex) / values]
- expected: FAIL
-
- [padding-left length(mm) / values]
- expected: FAIL
-
- [padding-left length(cm) / values]
- expected: FAIL
-
- [padding-left length(in) / values]
- expected: FAIL
-
- [padding-right length(pt) / values]
- expected: FAIL
-
- [padding-right length(pc) / values]
- expected: FAIL
-
- [padding-right length(px) / values]
- expected: FAIL
-
- [padding-right length(em) / values]
- expected: FAIL
-
- [padding-right length(ex) / values]
- expected: FAIL
-
- [padding-right length(mm) / values]
- expected: FAIL
-
- [padding-right length(cm) / values]
- expected: FAIL
-
- [padding-right length(in) / values]
- expected: FAIL
-
- [padding-top length(pt) / values]
- expected: FAIL
-
- [padding-top length(pc) / values]
- expected: FAIL
-
- [padding-top length(px) / values]
- expected: FAIL
-
- [padding-top length(em) / values]
- expected: FAIL
-
- [padding-top length(ex) / values]
- expected: FAIL
-
- [padding-top length(mm) / values]
- expected: FAIL
-
- [padding-top length(cm) / values]
- expected: FAIL
-
- [padding-top length(in) / values]
- expected: FAIL
-
- [margin-bottom length(pt) / values]
- expected: FAIL
-
- [margin-bottom length(pc) / values]
- expected: FAIL
-
- [margin-bottom length(px) / values]
- expected: FAIL
-
- [margin-bottom length(em) / values]
- expected: FAIL
-
- [margin-bottom length(ex) / values]
- expected: FAIL
-
- [margin-bottom length(mm) / values]
- expected: FAIL
-
- [margin-bottom length(cm) / values]
- expected: FAIL
-
- [margin-bottom length(in) / values]
- expected: FAIL
-
- [margin-left length(pt) / values]
- expected: FAIL
-
- [margin-left length(pc) / values]
- expected: FAIL
-
- [margin-left length(px) / values]
- expected: FAIL
-
- [margin-left length(em) / values]
- expected: FAIL
-
- [margin-left length(ex) / values]
- expected: FAIL
-
- [margin-left length(mm) / values]
- expected: FAIL
-
- [margin-left length(cm) / values]
- expected: FAIL
-
- [margin-left length(in) / values]
- expected: FAIL
-
- [margin-right length(pt) / values]
- expected: FAIL
-
- [margin-right length(pc) / values]
- expected: FAIL
-
- [margin-right length(px) / values]
- expected: FAIL
-
- [margin-right length(em) / values]
- expected: FAIL
-
- [margin-right length(ex) / values]
- expected: FAIL
-
- [margin-right length(mm) / values]
- expected: FAIL
-
- [color color(rgba) / values]
- expected: FAIL
-
- [font-size length(pt) / values]
- expected: FAIL
-
- [font-size length(pc) / values]
- expected: FAIL
-
- [font-size length(px) / values]
- expected: FAIL
-
- [font-size length(em) / values]
- expected: FAIL
-
- [font-size length(ex) / values]
- expected: FAIL
-
- [font-size length(mm) / values]
- expected: FAIL
-
- [font-size length(cm) / values]
- expected: FAIL
-
- [font-size length(in) / values]
- expected: FAIL
-
- [font-size percentage(%) / values]
- expected: FAIL
-
- [font-weight font-weight(keyword) / values]
- expected: FAIL
-
- [font-weight font-weight(numeric) / values]
- expected: FAIL
-
- [line-height number(integer) / values]
- expected: FAIL
-
- [line-height number(decimal) / values]
- expected: FAIL
-
- [line-height length(pt) / values]
- expected: FAIL
-
- [line-height length(pc) / values]
- expected: FAIL
-
- [line-height length(px) / values]
- expected: FAIL
-
- [line-height length(em) / values]
- expected: FAIL
-
- [line-height length(ex) / values]
- expected: FAIL
-
- [line-height length(mm) / values]
- expected: FAIL
-
- [line-height length(cm) / values]
- expected: FAIL
-
- [line-height length(in) / values]
- expected: FAIL
-
- [line-height percentage(%) / values]
- expected: FAIL
-
- [letter-spacing length(pt) / values]
- expected: FAIL
-
- [letter-spacing length(pc) / values]
- expected: FAIL
-
- [letter-spacing length(px) / values]
- expected: FAIL
-
- [letter-spacing length(em) / values]
- expected: FAIL
-
- [letter-spacing length(ex) / values]
- expected: FAIL
-
- [letter-spacing length(mm) / values]
- expected: FAIL
-
- [letter-spacing length(cm) / values]
- expected: FAIL
-
- [letter-spacing length(in) / values]
- expected: FAIL
-
- [word-spacing length(pt) / values]
- expected: FAIL
-
- [word-spacing length(pc) / values]
- expected: FAIL
-
- [word-spacing length(px) / values]
- expected: FAIL
-
- [word-spacing length(em) / values]
- expected: FAIL
-
- [word-spacing length(ex) / values]
- expected: FAIL
-
- [word-spacing length(mm) / values]
- expected: FAIL
-
- [word-spacing length(cm) / values]
- expected: FAIL
-
- [word-spacing length(in) / values]
- expected: FAIL
-
- [word-spacing percentage(%) / values]
- expected: FAIL
-
- [text-indent length(pt) / values]
- expected: FAIL
-
- [text-indent length(pc) / values]
- expected: FAIL
-
- [text-indent length(px) / values]
- expected: FAIL
-
- [text-indent length(em) / values]
- expected: FAIL
-
- [text-indent length(ex) / values]
- expected: FAIL
-
- [text-indent length(mm) / values]
- expected: FAIL
-
- [text-indent length(cm) / values]
- expected: FAIL
-
- [text-indent length(in) / values]
- expected: FAIL
-
- [text-indent percentage(%) / values]
- expected: FAIL
-
- [text-shadow shadow(shadow) / values]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-003.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-003.html.ini
index 371e4c602b7..5349706e4ad 100644
--- a/tests/wpt/metadata/css/css-transitions/properties-value-003.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/properties-value-003.html.ini
@@ -490,3 +490,33 @@
[object-view-box object-view-box(xywh) / events]
expected: FAIL
+
+ [border-top-left-radius border-radius(px) / values]
+ expected: FAIL
+
+ [border-top-left-radius border-radius(px-px) / values]
+ expected: FAIL
+
+ [border-top-right-radius border-radius(px) / values]
+ expected: FAIL
+
+ [border-top-right-radius border-radius(px-px) / values]
+ expected: FAIL
+
+ [border-bottom-left-radius border-radius(px) / values]
+ expected: FAIL
+
+ [border-bottom-left-radius border-radius(px-px) / values]
+ expected: FAIL
+
+ [border-bottom-right-radius border-radius(px) / values]
+ expected: FAIL
+
+ [border-bottom-right-radius border-radius(px-px) / values]
+ expected: FAIL
+
+ [box-shadow box-shadow(shadow) / values]
+ expected: FAIL
+
+ [font-stretch font-stretch(keyword) / values]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini
index f4caeba01db..43cef12d2ef 100644
--- a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini
@@ -56,279 +56,6 @@
[background-position length(px) / events]
expected: FAIL
- [background-color color(rgba) / events]
- expected: FAIL
-
- [border-top-width length(pt) / events]
- expected: FAIL
-
- [border-top-width length(pc) / events]
- expected: FAIL
-
- [border-top-width length(px) / events]
- expected: FAIL
-
- [border-top-width length(em) / events]
- expected: FAIL
-
- [border-top-width length(ex) / events]
- expected: FAIL
-
- [border-top-width length(mm) / events]
- expected: FAIL
-
- [border-top-width length(cm) / events]
- expected: FAIL
-
- [border-top-width length(in) / events]
- expected: FAIL
-
- [border-right-width length(pt) / events]
- expected: FAIL
-
- [border-right-width length(pc) / events]
- expected: FAIL
-
- [border-right-width length(px) / events]
- expected: FAIL
-
- [border-right-width length(em) / events]
- expected: FAIL
-
- [border-right-width length(ex) / events]
- expected: FAIL
-
- [border-right-width length(mm) / events]
- expected: FAIL
-
- [border-right-width length(cm) / events]
- expected: FAIL
-
- [border-right-width length(in) / events]
- expected: FAIL
-
- [border-bottom-width length(pt) / events]
- expected: FAIL
-
- [border-bottom-width length(pc) / events]
- expected: FAIL
-
- [border-bottom-width length(px) / events]
- expected: FAIL
-
- [border-bottom-width length(em) / events]
- expected: FAIL
-
- [border-bottom-width length(ex) / events]
- expected: FAIL
-
- [border-bottom-width length(mm) / events]
- expected: FAIL
-
- [border-bottom-width length(cm) / events]
- expected: FAIL
-
- [border-bottom-width length(in) / events]
- expected: FAIL
-
- [border-left-width length(pt) / events]
- expected: FAIL
-
- [border-left-width length(pc) / events]
- expected: FAIL
-
- [border-left-width length(px) / events]
- expected: FAIL
-
- [border-left-width length(em) / events]
- expected: FAIL
-
- [border-left-width length(ex) / events]
- expected: FAIL
-
- [border-left-width length(mm) / events]
- expected: FAIL
-
- [border-left-width length(cm) / events]
- expected: FAIL
-
- [border-left-width length(in) / events]
- expected: FAIL
-
- [border-top-color color(rgba) / events]
- expected: FAIL
-
- [border-right-color color(rgba) / events]
- expected: FAIL
-
- [border-bottom-color color(rgba) / events]
- expected: FAIL
-
- [border-left-color color(rgba) / events]
- expected: FAIL
-
- [padding-bottom length(pt) / events]
- expected: FAIL
-
- [padding-bottom length(pc) / events]
- expected: FAIL
-
- [padding-bottom length(px) / events]
- expected: FAIL
-
- [padding-bottom length(em) / events]
- expected: FAIL
-
- [padding-bottom length(ex) / events]
- expected: FAIL
-
- [padding-bottom length(mm) / events]
- expected: FAIL
-
- [padding-bottom length(cm) / events]
- expected: FAIL
-
- [padding-bottom length(in) / events]
- expected: FAIL
-
- [padding-left length(pt) / events]
- expected: FAIL
-
- [padding-left length(pc) / events]
- expected: FAIL
-
- [padding-left length(px) / events]
- expected: FAIL
-
- [padding-left length(em) / events]
- expected: FAIL
-
- [padding-left length(ex) / events]
- expected: FAIL
-
- [padding-left length(mm) / events]
- expected: FAIL
-
- [padding-left length(cm) / events]
- expected: FAIL
-
- [padding-left length(in) / events]
- expected: FAIL
-
- [padding-right length(pt) / events]
- expected: FAIL
-
- [padding-right length(pc) / events]
- expected: FAIL
-
- [padding-right length(px) / events]
- expected: FAIL
-
- [padding-right length(em) / events]
- expected: FAIL
-
- [padding-right length(ex) / events]
- expected: FAIL
-
- [padding-right length(mm) / events]
- expected: FAIL
-
- [padding-right length(cm) / events]
- expected: FAIL
-
- [padding-right length(in) / events]
- expected: FAIL
-
- [padding-top length(pt) / events]
- expected: FAIL
-
- [padding-top length(pc) / events]
- expected: FAIL
-
- [padding-top length(px) / events]
- expected: FAIL
-
- [padding-top length(em) / events]
- expected: FAIL
-
- [padding-top length(ex) / events]
- expected: FAIL
-
- [padding-top length(mm) / events]
- expected: FAIL
-
- [padding-top length(cm) / events]
- expected: FAIL
-
- [padding-top length(in) / events]
- expected: FAIL
-
- [margin-bottom length(pt) / events]
- expected: FAIL
-
- [margin-bottom length(pc) / events]
- expected: FAIL
-
- [margin-bottom length(px) / events]
- expected: FAIL
-
- [margin-bottom length(em) / events]
- expected: FAIL
-
- [margin-bottom length(ex) / events]
- expected: FAIL
-
- [margin-bottom length(mm) / events]
- expected: FAIL
-
- [margin-bottom length(cm) / events]
- expected: FAIL
-
- [margin-bottom length(in) / events]
- expected: FAIL
-
- [margin-left length(pt) / events]
- expected: FAIL
-
- [margin-left length(pc) / events]
- expected: FAIL
-
- [margin-left length(px) / events]
- expected: FAIL
-
- [margin-left length(em) / events]
- expected: FAIL
-
- [margin-left length(ex) / events]
- expected: FAIL
-
- [margin-left length(mm) / events]
- expected: FAIL
-
- [margin-left length(cm) / events]
- expected: FAIL
-
- [margin-left length(in) / events]
- expected: FAIL
-
- [margin-right length(pt) / events]
- expected: FAIL
-
- [margin-right length(pc) / events]
- expected: FAIL
-
- [margin-right length(px) / events]
- expected: FAIL
-
- [margin-right length(em) / events]
- expected: FAIL
-
- [margin-right length(ex) / events]
- expected: FAIL
-
- [margin-right length(mm) / events]
- expected: FAIL
-
[margin-right length(cm) / events]
expected: FAIL
@@ -628,153 +355,3 @@
[left percentage(%) / events]
expected: FAIL
-
- [color color(rgba) / events]
- expected: FAIL
-
- [font-size length(pt) / events]
- expected: FAIL
-
- [font-size length(pc) / events]
- expected: FAIL
-
- [font-size length(px) / events]
- expected: FAIL
-
- [font-size length(em) / events]
- expected: FAIL
-
- [font-size length(ex) / events]
- expected: FAIL
-
- [font-size length(mm) / events]
- expected: FAIL
-
- [font-size length(cm) / events]
- expected: FAIL
-
- [font-size length(in) / events]
- expected: FAIL
-
- [font-size percentage(%) / events]
- expected: FAIL
-
- [font-weight font-weight(keyword) / events]
- expected: FAIL
-
- [font-weight font-weight(numeric) / events]
- expected: FAIL
-
- [line-height number(integer) / events]
- expected: FAIL
-
- [line-height number(decimal) / events]
- expected: FAIL
-
- [line-height length(pt) / events]
- expected: FAIL
-
- [line-height length(pc) / events]
- expected: FAIL
-
- [line-height length(px) / events]
- expected: FAIL
-
- [line-height length(em) / events]
- expected: FAIL
-
- [line-height length(ex) / events]
- expected: FAIL
-
- [line-height length(mm) / events]
- expected: FAIL
-
- [line-height length(cm) / events]
- expected: FAIL
-
- [line-height length(in) / events]
- expected: FAIL
-
- [line-height percentage(%) / events]
- expected: FAIL
-
- [letter-spacing length(pt) / events]
- expected: FAIL
-
- [letter-spacing length(pc) / events]
- expected: FAIL
-
- [letter-spacing length(px) / events]
- expected: FAIL
-
- [letter-spacing length(em) / events]
- expected: FAIL
-
- [letter-spacing length(ex) / events]
- expected: FAIL
-
- [letter-spacing length(mm) / events]
- expected: FAIL
-
- [letter-spacing length(cm) / events]
- expected: FAIL
-
- [letter-spacing length(in) / events]
- expected: FAIL
-
- [word-spacing length(pt) / events]
- expected: FAIL
-
- [word-spacing length(pc) / events]
- expected: FAIL
-
- [word-spacing length(px) / events]
- expected: FAIL
-
- [word-spacing length(em) / events]
- expected: FAIL
-
- [word-spacing length(ex) / events]
- expected: FAIL
-
- [word-spacing length(mm) / events]
- expected: FAIL
-
- [word-spacing length(cm) / events]
- expected: FAIL
-
- [word-spacing length(in) / events]
- expected: FAIL
-
- [word-spacing percentage(%) / events]
- expected: FAIL
-
- [text-indent length(pt) / events]
- expected: FAIL
-
- [text-indent length(pc) / events]
- expected: FAIL
-
- [text-indent length(px) / events]
- expected: FAIL
-
- [text-indent length(em) / events]
- expected: FAIL
-
- [text-indent length(ex) / events]
- expected: FAIL
-
- [text-indent length(mm) / events]
- expected: FAIL
-
- [text-indent length(cm) / events]
- expected: FAIL
-
- [text-indent length(in) / events]
- expected: FAIL
-
- [text-indent percentage(%) / events]
- expected: FAIL
-
- [text-shadow shadow(shadow) / events]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
index 242ba44bbca..5a107d55d99 100644
--- a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
@@ -52,3 +52,276 @@
[background-position length(px) / events]
expected: FAIL
+
+ [background-color color(rgba) / values]
+ expected: FAIL
+
+ [border-top-width length(pt) / values]
+ expected: FAIL
+
+ [border-top-width length(pc) / values]
+ expected: FAIL
+
+ [border-top-width length(px) / values]
+ expected: FAIL
+
+ [border-top-width length(em) / values]
+ expected: FAIL
+
+ [border-top-width length(ex) / values]
+ expected: FAIL
+
+ [border-top-width length(mm) / values]
+ expected: FAIL
+
+ [border-top-width length(cm) / values]
+ expected: FAIL
+
+ [border-top-width length(in) / values]
+ expected: FAIL
+
+ [border-right-width length(pt) / values]
+ expected: FAIL
+
+ [border-right-width length(pc) / values]
+ expected: FAIL
+
+ [border-right-width length(px) / values]
+ expected: FAIL
+
+ [border-right-width length(em) / values]
+ expected: FAIL
+
+ [border-right-width length(ex) / values]
+ expected: FAIL
+
+ [border-right-width length(mm) / values]
+ expected: FAIL
+
+ [border-right-width length(cm) / values]
+ expected: FAIL
+
+ [border-right-width length(in) / values]
+ expected: FAIL
+
+ [border-bottom-width length(pt) / values]
+ expected: FAIL
+
+ [border-bottom-width length(pc) / values]
+ expected: FAIL
+
+ [border-bottom-width length(px) / values]
+ expected: FAIL
+
+ [border-bottom-width length(em) / values]
+ expected: FAIL
+
+ [border-bottom-width length(ex) / values]
+ expected: FAIL
+
+ [border-bottom-width length(mm) / values]
+ expected: FAIL
+
+ [border-bottom-width length(cm) / values]
+ expected: FAIL
+
+ [border-bottom-width length(in) / values]
+ expected: FAIL
+
+ [border-left-width length(pt) / values]
+ expected: FAIL
+
+ [border-left-width length(pc) / values]
+ expected: FAIL
+
+ [border-left-width length(px) / values]
+ expected: FAIL
+
+ [border-left-width length(em) / values]
+ expected: FAIL
+
+ [border-left-width length(ex) / values]
+ expected: FAIL
+
+ [border-left-width length(mm) / values]
+ expected: FAIL
+
+ [border-left-width length(cm) / values]
+ expected: FAIL
+
+ [border-left-width length(in) / values]
+ expected: FAIL
+
+ [border-top-color color(rgba) / values]
+ expected: FAIL
+
+ [border-right-color color(rgba) / values]
+ expected: FAIL
+
+ [border-bottom-color color(rgba) / values]
+ expected: FAIL
+
+ [border-left-color color(rgba) / values]
+ expected: FAIL
+
+ [padding-bottom length(pt) / values]
+ expected: FAIL
+
+ [padding-bottom length(pc) / values]
+ expected: FAIL
+
+ [padding-bottom length(px) / values]
+ expected: FAIL
+
+ [padding-bottom length(em) / values]
+ expected: FAIL
+
+ [padding-bottom length(ex) / values]
+ expected: FAIL
+
+ [padding-bottom length(mm) / values]
+ expected: FAIL
+
+ [padding-bottom length(cm) / values]
+ expected: FAIL
+
+ [padding-bottom length(in) / values]
+ expected: FAIL
+
+ [padding-left length(pt) / values]
+ expected: FAIL
+
+ [padding-left length(pc) / values]
+ expected: FAIL
+
+ [padding-left length(px) / values]
+ expected: FAIL
+
+ [padding-left length(em) / values]
+ expected: FAIL
+
+ [padding-left length(ex) / values]
+ expected: FAIL
+
+ [padding-left length(mm) / values]
+ expected: FAIL
+
+ [padding-left length(cm) / values]
+ expected: FAIL
+
+ [padding-left length(in) / values]
+ expected: FAIL
+
+ [padding-right length(pt) / values]
+ expected: FAIL
+
+ [padding-right length(pc) / values]
+ expected: FAIL
+
+ [padding-right length(px) / values]
+ expected: FAIL
+
+ [padding-right length(em) / values]
+ expected: FAIL
+
+ [padding-right length(ex) / values]
+ expected: FAIL
+
+ [padding-right length(mm) / values]
+ expected: FAIL
+
+ [padding-right length(cm) / values]
+ expected: FAIL
+
+ [padding-right length(in) / values]
+ expected: FAIL
+
+ [padding-top length(pt) / values]
+ expected: FAIL
+
+ [padding-top length(pc) / values]
+ expected: FAIL
+
+ [padding-top length(px) / values]
+ expected: FAIL
+
+ [padding-top length(em) / values]
+ expected: FAIL
+
+ [padding-top length(ex) / values]
+ expected: FAIL
+
+ [padding-top length(mm) / values]
+ expected: FAIL
+
+ [padding-top length(cm) / values]
+ expected: FAIL
+
+ [padding-top length(in) / values]
+ expected: FAIL
+
+ [margin-bottom length(pt) / values]
+ expected: FAIL
+
+ [margin-bottom length(pc) / values]
+ expected: FAIL
+
+ [margin-bottom length(px) / values]
+ expected: FAIL
+
+ [margin-bottom length(em) / values]
+ expected: FAIL
+
+ [margin-bottom length(ex) / values]
+ expected: FAIL
+
+ [margin-bottom length(mm) / values]
+ expected: FAIL
+
+ [margin-bottom length(cm) / values]
+ expected: FAIL
+
+ [margin-bottom length(in) / values]
+ expected: FAIL
+
+ [margin-left length(pt) / values]
+ expected: FAIL
+
+ [margin-left length(pc) / values]
+ expected: FAIL
+
+ [margin-left length(px) / values]
+ expected: FAIL
+
+ [margin-left length(em) / values]
+ expected: FAIL
+
+ [margin-left length(ex) / values]
+ expected: FAIL
+
+ [margin-left length(mm) / values]
+ expected: FAIL
+
+ [margin-left length(cm) / values]
+ expected: FAIL
+
+ [margin-left length(in) / values]
+ expected: FAIL
+
+ [margin-right length(pt) / values]
+ expected: FAIL
+
+ [margin-right length(pc) / values]
+ expected: FAIL
+
+ [margin-right length(px) / values]
+ expected: FAIL
+
+ [margin-right length(em) / values]
+ expected: FAIL
+
+ [margin-right length(ex) / values]
+ expected: FAIL
+
+ [margin-right length(mm) / values]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
new file mode 100644
index 00000000000..72b09371038
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
@@ -0,0 +1,3 @@
+[elementFromPoint-001.html]
+ [CSSOM View - 5 - extensions to the Document interface]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini
new file mode 100644
index 00000000000..b905fe70fcb
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini
@@ -0,0 +1,3 @@
+[elementFromPoint-ellipsis-in-inline-box.html]
+ [elementFromPoint-ellipsis-in-inline-box]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini
new file mode 100644
index 00000000000..7e9331b6bc2
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini
@@ -0,0 +1,3 @@
+[elementFromPoint-float-in-relative.html]
+ [elementFromPoint-float-in-relative]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini
index 54775e607a3..07ff86d09aa 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini
@@ -14,8 +14,5 @@
[Outside 3 ]
expected: FAIL
- [Inside 2 ]
- expected: FAIL
-
- [Image Inside 1 ]
+ [Inside 1 ]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
index ceb43099040..898f39c4330 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
@@ -17,3 +17,6 @@
[test some point of the element: bottom right corner]
expected: FAIL
+
+ [test the top of layer]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
deleted file mode 100644
index a3496a40d07..00000000000
--- a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[elementsFromPoint-invalid-cases.html]
- [The root element is the last element returned for otherwise empty queries within the viewport]
- expected: FAIL
diff --git a/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-setFormValue.html.ini b/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-setFormValue.html.ini
index 1aa032e8274..dc50e20428b 100644
--- a/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-setFormValue.html.ini
+++ b/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-setFormValue.html.ini
@@ -1,8 +1,5 @@
[ElementInternals-setFormValue.html]
expected: ERROR
- [Single value - name is missing]
- expected: FAIL
-
[Single value - Non-empty name exists]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini b/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini
index e0663d34a38..e8237fbb8f9 100644
--- a/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini
@@ -77,5 +77,5 @@
[Input: "Content-Length: ". Expected: 42.]
expected: FAIL
- [Input: "Content-Length: 42\\r\\nContent-Length: 42". Expected: 42.]
+ [Input: "Content-Length: 42,42". Expected: 42.]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
index cd15896eae7..0d48169e3cc 100644
--- a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
@@ -147,8 +147,5 @@
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
expected: FAIL
- [border-image sec-fetch-site - HTTPS downgrade (header not sent)]
- expected: FAIL
-
- [background-image sec-fetch-site - Not sent to non-trustworthy same-site destination]
+ [background-image sec-fetch-site - HTTPS downgrade (header not sent)]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index e153b408731..6799c2c345e 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -13,3 +13,6 @@
[X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL
+
+ [X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini
index 856bb1c9901..fd493b56e5d 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini
@@ -5,6 +5,3 @@
[Navigating to a different document with form submission]
expected: TIMEOUT
-
- [Navigating to a different document with link click]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini
index 5a245d61359..bcda478adb1 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini
@@ -1,6 +1,10 @@
[javascript-url-referrer.window.html]
+ expected: TIMEOUT
[unsafe-url referrer policy used to create the starting page]
expected: FAIL
[origin referrer policy used to create the starting page]
expected: FAIL
+
+ [no-referrer referrer policy used to create the starting page]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini
index 9f7f24f662e..0e40ffc0656 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini
@@ -1,3 +1,4 @@
[nav-cancelation-2.sub.html]
+ expected: TIMEOUT
[grandparent cancels a pending navigation in a cross-origin grandchild]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini
deleted file mode 100644
index f5b7b25324f..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse-during-unload.html]
- expected: TIMEOUT
- [Traversing the history during unload]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..ba0aed26689
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,3 @@
+[traverse_the_history_1.html]
+ [Multiple history traversals from the same task]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.js.ini b/tests/wpt/metadata/html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.js.ini
new file mode 100644
index 00000000000..4aaf19379c4
--- /dev/null
+++ b/tests/wpt/metadata/html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.js.ini
@@ -0,0 +1,7 @@
+[document-base-url-changes-after-nav-about-srcdoc.https.window.html]
+ expected: TIMEOUT
+ [non-sandboxed srcdoc - parent changes baseURI]
+ expected: TIMEOUT
+
+ [sandboxed srcdoc - parent changes baseURI]
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
index d169bd2e9fa..58a99633547 100644
--- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
+++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
@@ -1,15 +1,19 @@
[supported-elements.html]
+ expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
[Element with tabindex should support autofocus]
- expected: FAIL
+ expected: TIMEOUT
[Host element with delegatesFocus including no focusable descendants should be skipped]
- expected: FAIL
+ expected: NOTRUN
[Area element should support autofocus]
- expected: FAIL
+ expected: NOTRUN
[Host element with delegatesFocus should support autofocus]
- expected: FAIL
+ expected: NOTRUN
+
+ [Non-HTMLElement should not support autofocus]
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/http-equiv-and-name.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/http-equiv-and-name.html.ini
new file mode 100644
index 00000000000..99f2e083da9
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-meta-element/http-equiv-and-name.html.ini
@@ -0,0 +1,6 @@
+[http-equiv-and-name.html]
+ [ set the color-scheme to dark]
+ expected: FAIL
+
+ [ set the content-language to dark]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
index 841bafc6eca..26704422bbe 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini
@@ -1,3 +1,4 @@
[iframe_sandbox_popups_escaping-2.html]
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
index 3cdeb8ebcbc..47b45e65a1c 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
@@ -1,3 +1,9 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
+
+ [createHTMLDocument]
+ expected: FAIL
+
+ []
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
index 35bc899ff38..018a3df1d56 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
@@ -175,3 +175,6 @@
[multipart/form-data: Basic test (formdata event)]
expected: FAIL
+
+ [multipart/form-data: 0x00 in value (normal form)]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini
index 0372084c73b..df084f97f3f 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini
@@ -172,3 +172,9 @@
[text/plain: backslash in name (formdata event)]
expected: FAIL
+
+ [text/plain: Basic test (formdata event)]
+ expected: FAIL
+
+ [text/plain: 0x00 in name (formdata event)]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/valid-invalid-fieldset-disconnected.html.ini b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/valid-invalid-fieldset-disconnected.html.ini
new file mode 100644
index 00000000000..56209882404
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/valid-invalid-fieldset-disconnected.html.ini
@@ -0,0 +1,6 @@
+[valid-invalid-fieldset-disconnected.html]
+ [ element becomes invalid inside disconnected ]
+ expected: FAIL
+
+ [ element becomes valid inside disconnected ]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini
deleted file mode 100644
index 53acb938c1b..00000000000
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[module-static-import-delayed.html]
- [document.write in an imported module]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
index 1d71471b73c..4a48dd15a9d 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
@@ -1,7 +1,6 @@
[promise-rejection-events.html]
- expected: TIMEOUT
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
- expected: TIMEOUT
+ expected: FAIL
[unhandledrejection: from createImageBitmap which is UA triggered]
expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini b/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini
index b232fd58335..f7bc47e5724 100644
--- a/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini
+++ b/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini
@@ -13,34 +13,34 @@
expected: FAIL
[content-type 4 : text/plain;charset=gbk,text/html;charset=windows-1254]
- expected: TIMEOUT
+ expected: FAIL
[content-type 5 : text/plain;charset=gbk,text/plain]
- expected: NOTRUN
+ expected: FAIL
[content-type 6 : text/plain;charset=gbk,text/plain;charset=windows-1252]
- expected: NOTRUN
+ expected: FAIL
[content-type 7 : text/html;charset=gbk,text/html;x=",text/plain]
- expected: NOTRUN
+ expected: FAIL
[content-type 8 : text/plain;charset=gbk;x=foo,text/plain]
- expected: NOTRUN
+ expected: FAIL
[content-type 9 : text/html;charset=gbk,text/plain,text/html]
- expected: NOTRUN
+ expected: FAIL
[content-type 10 : text/plain,*/*]
- expected: NOTRUN
+ expected: FAIL
[content-type 11 : text/html,*/*]
- expected: NOTRUN
+ expected: FAIL
[content-type 12 : */*,text/html]
- expected: NOTRUN
+ expected: FAIL
[content-type 13 : text/plain,*/*;charset=gbk]
- expected: NOTRUN
+ expected: TIMEOUT
[content-type 14 : text/html,*/*;charset=gbk]
expected: NOTRUN
diff --git a/tests/wpt/metadata/url/url-setters-a-area.window.js.ini b/tests/wpt/metadata/url/url-setters-a-area.window.js.ini
index 3c32b409102..183cfcd5002 100644
--- a/tests/wpt/metadata/url/url-setters-a-area.window.js.ini
+++ b/tests/wpt/metadata/url/url-setters-a-area.window.js.ini
@@ -1318,9 +1318,6 @@
[ : Setting .protocol = 'https\x0c']
expected: FAIL
- [: Setting .protocol = 'https\r']
- expected: FAIL
-
[ : Setting .protocol = 'https\r']
expected: FAIL
@@ -1330,6 +1327,15 @@
[ : Setting .protocol = 'https ']
expected: FAIL
+ [ : Setting .protocol = 'h\r\ntt\tps' Tab and newline are stripped]
+ expected: FAIL
+
+ [ : Setting .protocol = 'https\x0e']
+ expected: FAIL
+
+ [ : Setting .protocol = 'https\x0e']
+ expected: FAIL
+
[url-setters-a-area.window.html?include=mailto]
[ : Setting .protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.]
diff --git a/tests/wpt/metadata/url/url-setters.any.js.ini b/tests/wpt/metadata/url/url-setters.any.js.ini
index d33d0d44b55..90ca360575e 100644
--- a/tests/wpt/metadata/url/url-setters.any.js.ini
+++ b/tests/wpt/metadata/url/url-setters.any.js.ini
@@ -117,10 +117,10 @@
[URL: Setting .protocol = 'https\x0c']
expected: FAIL
- [URL: Setting .protocol = 'https\r']
+ [URL: Setting .protocol = 'https ']
expected: FAIL
- [URL: Setting .protocol = 'https ']
+ [URL: Setting .protocol = 'https\x0e']
expected: FAIL
@@ -200,8 +200,8 @@
[URL: Setting .protocol = 'https\x0c']
expected: FAIL
- [URL: Setting .protocol = 'https\r']
- expected: FAIL
-
[URL: Setting .protocol = 'https ']
expected: FAIL
+
+ [URL: Setting .protocol = 'https\x0e']
+ expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini
index eed03df37f3..b7537329068 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini
@@ -1,4 +1,5 @@
[audiocontext-not-fully-active.html]
+ expected: TIMEOUT
[frame in navigated remote-site frame]
expected: FAIL
diff --git a/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini b/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini
index 04c2032c723..39d039a0132 100644
--- a/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini
+++ b/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini
@@ -1,5 +1,5 @@
[cross-partition.https.tentative.html]
- expected: TIMEOUT
+ expected: CRASH
[BroadcastChannel messages aren't received from a cross-partition iframe]
expected: FAIL
diff --git a/tests/wpt/metadata/webmessaging/with-ports/017.html.ini b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini
deleted file mode 100644
index c7946fc91b4..00000000000
--- a/tests/wpt/metadata/webmessaging/with-ports/017.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[017.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, about:blank]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html.ini b/tests/wpt/metadata/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html.ini
new file mode 100644
index 00000000000..aa6c9e5b826
--- /dev/null
+++ b/tests/wpt/metadata/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html.ini
@@ -0,0 +1,4 @@
+[localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html]
+ expected: TIMEOUT
+ [StorageKey: test 3P about:blank window opened from a 3P iframe]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/xhr/event-error.sub.any.js.ini b/tests/wpt/metadata/xhr/event-error.sub.any.js.ini
index 65ea3e3d9d0..fe87364a1aa 100644
--- a/tests/wpt/metadata/xhr/event-error.sub.any.js.ini
+++ b/tests/wpt/metadata/xhr/event-error.sub.any.js.ini
@@ -1,7 +1,11 @@
[event-error.sub.any.html]
+ expected: TIMEOUT
[error while reading body should report zeros for loaded and total]
expected: FAIL
+ [onerror should be called]
+ expected: TIMEOUT
+
[event-error.sub.any.worker.html]
[error while reading body should report zeros for loaded and total]
diff --git a/tests/wpt/metadata/xhr/formdata/constructor-submitter.html.ini b/tests/wpt/metadata/xhr/formdata/constructor-submitter.html.ini
new file mode 100644
index 00000000000..1f81e642bed
--- /dev/null
+++ b/tests/wpt/metadata/xhr/formdata/constructor-submitter.html.ini
@@ -0,0 +1,15 @@
+[constructor-submitter.html]
+ [FormData construction should throw a TypeError if a non-null submitter is not a submit button]
+ expected: FAIL
+
+ [FormData construction should throw a 'NotFoundError' DOMException if a non-null submitter is not owned by the form]
+ expected: FAIL
+
+ [The constructed FormData object should contain an in-tree-order entry for a named submit button submitter]
+ expected: FAIL
+
+ [The constructed FormData object should contain in-tree-order entries for an activated Image Button submitter]
+ expected: FAIL
+
+ [The constructed FormData object should contain in-tree-order entries for an unactivated Image Button submitter]
+ expected: FAIL
diff --git a/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini b/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini
new file mode 100644
index 00000000000..49887a606ef
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini
@@ -0,0 +1,5 @@
+[task_queue_throttling.any.worker.html]
+
+[task_queue_throttling.any.html]
+ [Throttling the performance timeline task queue.]
+ expected: FAIL
diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-dynamic-002.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-dynamic-002.html
index f70f93441d0..a0924e92201 100644
--- a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-dynamic-002.html
+++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-dynamic-002.html
@@ -41,7 +41,7 @@
+
@@ -39,9 +39,7 @@
data-expected-width=30 data-expected-height=20>
diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-query-fallback.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-query-fallback.html
index 8d413fd862d..95d43ffedb7 100644
--- a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-query-fallback.html
+++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-query-fallback.html
@@ -34,34 +34,36 @@
}
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-slice-005.htm b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-slice-005.htm
index 9993ccd673c..5d8bd7df1c3 100644
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-slice-005.htm
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-slice-005.htm
@@ -10,7 +10,7 @@
-->
-
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-nesting/cssom.html b/tests/wpt/web-platform-tests/css/css-nesting/cssom.html
index c7150cec5db..987c3110367 100644
--- a/tests/wpt/web-platform-tests/css/css-nesting/cssom.html
+++ b/tests/wpt/web-platform-tests/css/css-nesting/cssom.html
@@ -124,4 +124,22 @@
& .c { color: blue; }
}`, 'color is changed, new rule is ignored');
});
+
+ // We cannot insert anything starting with an tag, as that would cause
+ // the serialized rule not to parse back. Compounds starting with a tag
+ // that are _not_ the first compound in a complex selector are OK, though,
+ // as are complex selectors that are not the first in the list.
+ test(() => {
+ document.getElementById('ss').innerHTML = sampleSheetText;
+ let [ss] = document.styleSheets;
+ ss.cssRules[0].cssRules[0].selectorText = 'div.b .c &'; // Ignored.
+ ss.cssRules[0].cssRules[1].selectorText = '.c div.b &, div &'; // Allowed.
+ assert_throws_dom('SyntaxError', () => { ss.cssRules[0].insertRule('div & {}'); });
+ assert_equals(ss.cssRules[0].cssText,
+`.a {
+ color: red;
+ & .b { color: green; }
+ .c div.b &, div & { color: blue; }
+}`, 'one rule is kept unchanged, the other is changed');
+ });
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/overflow-overlay-ref.html b/tests/wpt/web-platform-tests/css/css-overflow/overflow-overlay-ref.html
new file mode 100644
index 00000000000..3d88b75890c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/overflow-overlay-ref.html
@@ -0,0 +1,11 @@
+
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/overflow-overlay.tentative.html b/tests/wpt/web-platform-tests/css/css-overflow/overflow-overlay.tentative.html
new file mode 100644
index 00000000000..e3cb8d7180e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/overflow-overlay.tentative.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html
deleted file mode 100644
index 891bda52a39..00000000000
--- a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Tests animation with tree-scoped names and references
-
-
-
-
-
-
-
-
- List marker should be X
-
-
-
- List marker should be O
-
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html
deleted file mode 100644
index d5c25f06c0a..00000000000
--- a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-Tests animation with tree-scoped names and references
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html
deleted file mode 100644
index 9f407eb690e..00000000000
--- a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-Tests animation with tree-scoped names and references
-
-
-
-
- List marker should be X
-
-
-
- List marker should be O
-
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-abspos.html b/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-abspos.html
new file mode 100644
index 00000000000..d8ce91f9f62
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-abspos.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-fixedpos-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-fixedpos-ref.html
new file mode 100644
index 00000000000..0f9f8bd1b03
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-fixedpos-ref.html
@@ -0,0 +1,14 @@
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-fixedpos.html b/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-fixedpos.html
new file mode 100644
index 00000000000..1f08c6ab9f2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/fit-content-block-size-fixedpos.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-tables/whitespace-001-ref.html b/tests/wpt/web-platform-tests/css/css-tables/whitespace-001-ref.html
new file mode 100644
index 00000000000..e9d5c50ccd6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-tables/whitespace-001-ref.html
@@ -0,0 +1,24 @@
+
+
+CSS Test Reference
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-tables/whitespace-001.html b/tests/wpt/web-platform-tests/css/css-tables/whitespace-001.html
new file mode 100644
index 00000000000..3fc6040b472
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-tables/whitespace-001.html
@@ -0,0 +1,32 @@
+
+
+Whitespace inside table isn't incorrectly suppressed
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-values/acos-asin-atan-atan2-computed.html b/tests/wpt/web-platform-tests/css/css-values/acos-asin-atan-atan2-computed.html
index 6fc8bdfe6af..2835e7a20ab 100644
--- a/tests/wpt/web-platform-tests/css/css-values/acos-asin-atan-atan2-computed.html
+++ b/tests/wpt/web-platform-tests/css/css-values/acos-asin-atan-atan2-computed.html
@@ -28,7 +28,7 @@ test_math_used('calc(atan(e - 2.7182818284590452354) )', '0deg', {type:'angle',
// General calculations
test_math_used('calc(asin(sin(30deg + 1.0471967rad ) ))', '90deg', {type:'angle', approx:0.1});
-test_math_used('calc(acos(cos(30deg - 0.523599rad ) ))', '0deg'), {type:'angle', approx:0.1};
+test_math_used('calc(acos(cos(30deg - 0.523599rad ) ))', '0deg', {type:'angle', approx:0.1});
test_math_used('calc(asin(sin(3.14159 / 2 + 1 - 1) ))', '90deg', {type:'angle', approx:0.1});
test_math_used('calc(asin(sin(100grad) ))', '90deg', {type:'angle', approx:0.1});
test_math_used('calc(acos(cos(0 / 2 + 1 - 1) ))', '0deg', {type:'angle', approx:0.1});
@@ -66,4 +66,4 @@ test_math_used('atan2(1rad, -1rad)', '135deg', {type:'angle', approx:0.1});
test_math_used('atan2(1s, -1s)', '135deg', {type:'angle', approx:0.1});
test_math_used('atan2(1ms, -1ms)', '135deg', {type:'angle', approx:0.1});
-
\ No newline at end of file
+
diff --git a/tests/wpt/web-platform-tests/css/css-values/exp-log-compute.html b/tests/wpt/web-platform-tests/css/css-values/exp-log-compute.html
index 8812253bf10..3fa24000442 100644
--- a/tests/wpt/web-platform-tests/css/css-values/exp-log-compute.html
+++ b/tests/wpt/web-platform-tests/css/css-values/exp-log-compute.html
@@ -19,10 +19,10 @@ test_math_used('calc(e - exp(1))', '0', {type:'number', approx:0.1});
//General calculations
test_math_used('calc(log( 1 + 1 + 2 /2 - 2) )', '0', {type:'number', approx:0.1});
-test_math_used('calc(log(1) + exp(0))', '1'), {type:'number', approx:0.1};
-test_math_used('calc(exp(log(1) + exp(0)*2))', '7.4'), {type:'number', approx:0.1};
-test_math_used('calc(log(log(1) + exp(0)*10))', '2.3'), {type:'number', approx:0.1};
-test_math_used('calc(log(log(1) + exp(0)*20, 10))', '1.3'), {type:'number', approx:0.1};
+test_math_used('calc(log(1) + exp(0))', '1', {type:'number', approx:0.1});
+test_math_used('calc(exp(log(1) + exp(0)*2))', '7.4', {type:'number', approx:0.1});
+test_math_used('calc(log(log(1) + exp(0)*10))', '2.3', {type:'number', approx:0.1});
+test_math_used('calc(log(log(1) + exp(0)*20, 10))', '1.3', {type:'number', approx:0.1});
test_math_used('calc(log(e) / log(e) + exp(0)*2 * log(e))', '3', {type:'number', approx:0.1});
test_math_used('calc(log((1 + 1) /2) / log(e) + exp(0*1)*2 * log(e))', '2', {type:'number', approx:0.1});
test_math_used('calc(log((3 + 1) /2, 2) / log(e) + exp(0*1)*2 * log(e))', '3', {type:'number', approx:0.1});
diff --git a/tests/wpt/web-platform-tests/css/css-values/hypot-pow-sqrt-computed.html b/tests/wpt/web-platform-tests/css/css-values/hypot-pow-sqrt-computed.html
index a7d7dae72a5..aa4ec22edf2 100644
--- a/tests/wpt/web-platform-tests/css/css-values/hypot-pow-sqrt-computed.html
+++ b/tests/wpt/web-platform-tests/css/css-values/hypot-pow-sqrt-computed.html
@@ -10,14 +10,14 @@
\ No newline at end of file
+
diff --git a/tests/wpt/web-platform-tests/css/css-values/hypot-pow-sqrt-invalid.html b/tests/wpt/web-platform-tests/css/css-values/hypot-pow-sqrt-invalid.html
index 517acf57efd..edb31380126 100644
--- a/tests/wpt/web-platform-tests/css/css-values/hypot-pow-sqrt-invalid.html
+++ b/tests/wpt/web-platform-tests/css/css-values/hypot-pow-sqrt-invalid.html
@@ -27,7 +27,6 @@ test_invalid_number('hypot(1 * )');
test_invalid_number('hypot(1 / )');
test_invalid_number('hypot(1 2)');
test_invalid_number('hypot(1, , 2)');
-test_invalid_number('hypot(1, 2)');
test_invalid_number('sqrt()');
test_invalid_number('sqrt( )');
test_invalid_number('sqrt(,)');
@@ -50,7 +49,6 @@ test_invalid_number('pow(1 * )');
test_invalid_number('pow(1 / )');
test_invalid_number('pow(1 2)');
test_invalid_number('pow(1, , 2)');
-test_invalid_number('pow(1, 2)');
// General tests
test_invalid_length('calc(1px * pow(1))');
@@ -59,10 +57,12 @@ test_invalid_length('calc(sqrt(100px)');
test_invalid_length('hypot(2px, 40%)');
test_invalid_length('hypot(2px, 3)');
test_invalid_length('hypot(3, ,4)');
+test_invalid_length('hypot(1, 2)');
test_invalid_length('calc(1px * pow(2 3))');
test_invalid_length('hypot()');
test_invalid_length('calc(pow(2))');
test_invalid_length('pow())');
+test_invalid_length('pow(1, 2)');
test_invalid_length('calc(sqrt())');
test_invalid_length('calc(sqrt(100, 200))');
-
\ No newline at end of file
+
diff --git a/tests/wpt/web-platform-tests/css/css-values/signs-abs-computed.html b/tests/wpt/web-platform-tests/css/css-values/signs-abs-computed.html
index ba672f23cec..74dff7c9c0c 100644
--- a/tests/wpt/web-platform-tests/css/css-values/signs-abs-computed.html
+++ b/tests/wpt/web-platform-tests/css/css-values/signs-abs-computed.html
@@ -9,15 +9,15 @@
\ No newline at end of file
+
diff --git a/tests/wpt/web-platform-tests/css/cssom/xml-stylesheet-pi-in-doctype.xhtml b/tests/wpt/web-platform-tests/css/cssom/xml-stylesheet-pi-in-doctype.xhtml
new file mode 100644
index 00000000000..d25ca176561
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom/xml-stylesheet-pi-in-doctype.xhtml
@@ -0,0 +1,17 @@
+]>
+
+
+ xml-stylesheet processing instruction in doctype internal subset
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/support/computed-testcommon.js b/tests/wpt/web-platform-tests/css/support/computed-testcommon.js
index e8d3a523477..831baf311a3 100644
--- a/tests/wpt/web-platform-tests/css/support/computed-testcommon.js
+++ b/tests/wpt/web-platform-tests/css/support/computed-testcommon.js
@@ -26,7 +26,7 @@ function test_computed_value(property, specified, computed, titleExtra) {
assert_in_array(readValue, computed);
} else {
if (property == "color")
- colorValuesAlmostEqual(readValue, computed, 0.0001);
+ colorValuesAlmostEqual(readValue, computed, 0.0001, 1);
else
assert_equals(readValue, computed);
}
@@ -39,7 +39,9 @@ function test_computed_value(property, specified, computed, titleExtra) {
}, `Property ${property} value '${specified}'${titleExtra ? ' ' + titleExtra : ''}`);
}
-function colorValuesAlmostEqual(color1, color2, epsilon) {
+function colorValuesAlmostEqual(color1, color2, float_epsilon, integer_epsilon) {
+ // Legacy color formats use integers in [0, 255] and thus will have wider epsilons
+ const epsilon = getNonNumbers(color1).startsWith("rgb") ? integer_epsilon : float_epsilon;
// Colors can be split by spaces, commas or the '(' character.
const colorElementDividers = /( |\(|,)/;
// Return the string stripped of numbers.
diff --git a/tests/wpt/web-platform-tests/document-picture-in-picture/requires-width-and-height-to-both-be-specified.https.html b/tests/wpt/web-platform-tests/document-picture-in-picture/requires-width-and-height-to-both-be-specified.https.html
new file mode 100644
index 00000000000..0c707c668e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/document-picture-in-picture/requires-width-and-height-to-both-be-specified.https.html
@@ -0,0 +1,24 @@
+
+Test that documentPictureInPicture.requestWindow()
+ fails if width or height is specified without the other
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js b/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
index 847a9891d6a..de23b6f84ff 100644
--- a/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
+++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
@@ -58,6 +58,17 @@ function waitForCompositorCommit() {
});
});
}
+
+// Please don't remove this. This is necessary for chromium-based browsers.
+// This shouldn't be necessary if the test harness deferred running the tests
+// until after paint holding. This can be a no-op on user-agents that do not
+// have a separate compositor thread.
+async function waitForCompositorReady() {
+ const animation =
+ document.body.animate({ opacity: [ 1, 1 ] }, {duration: 1 });
+ return animation.finished;
+}
+
function waitForNextFrame() {
const startTime = performance.now();
return new Promise(resolve => {
@@ -71,7 +82,6 @@ function waitForNextFrame() {
});
}
-
// TODO(crbug.com/1400399): Deprecate as frame rates may vary greatly in
// different test environments.
function waitForAnimationEnd(getValue) {
diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-for-user-scroll.html b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-for-user-scroll.html
index e9be7c98483..d51472fcb51 100644
--- a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-for-user-scroll.html
+++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-for-user-scroll.html
@@ -45,8 +45,8 @@ async function verifyNoScrollendOnDocument(test) {
window.addEventListener('scrollend', callback);
}
-async function createScrollendPromise(test) {
- return waitForScrollendEvent(test, target_div).then(evt => {
+async function createScrollendPromise(test, timeoutMs = 500) {
+ return waitForScrollendEvent(test, target_div, timeoutMs).then(evt => {
assert_false(evt.cancelable, 'Event is not cancelable');
assert_false(evt.bubbles, 'Event targeting element does not bubble');
});
@@ -60,11 +60,21 @@ function runTest() {
return;
await resetTargetScrollState(t);
- await waitForCompositorCommit();
+ await waitForCompositorReady();
- const targetScrollendPromise = createScrollendPromise(t);
+ const timeout = 1000; // Because we have two pauses we need longer timeout
+ const targetScrollendPromise = createScrollendPromise(t, timeout);
verifyNoScrollendOnDocument(t);
+ let scrollend_count = 0;
+ const scrollend_listener = () => {
+ scrollend_count += 1;
+ };
+ target_div.addEventListener("scrollend", scrollend_listener);
+ t.add_cleanup(() => {
+ target_div.removeEventListener('scrollend', scrollend_listener);
+ });
+
// Perform a touch drag on target div and wait for target_div to get
// a scrollend event.
await new test_driver.Actions()
@@ -75,6 +85,9 @@ function runTest() {
.pointerMove(0, -40, {origin: target_div}) // Drag up to move down.
.addTick()
.pause(200) // Prevent inertial scroll.
+ .pointerMove(0, -60, {origin: target_div})
+ .addTick()
+ .pause(200) // Prevent inertial scroll.
.pointerUp()
.send();
@@ -82,6 +95,7 @@ function runTest() {
assert_true(target_div.scrollTop > 0);
await verifyScrollStopped(t, target_div);
+ assert_equals(scrollend_count, 1);
}, 'Tests that the target_div gets scrollend event when touch dragging.');
promise_test(async (t) => {
@@ -92,7 +106,7 @@ function runTest() {
return;
await resetTargetScrollState(t);
- await waitForCompositorCommit();
+ await waitForCompositorReady();
const targetScrollendPromise = createScrollendPromise(t);
verifyNoScrollendOnDocument(t);
@@ -122,7 +136,9 @@ function runTest() {
if (scrollbar_width == 0)
return;
- resetTargetScrollState(t);
+ await resetTargetScrollState(t);
+ await waitForCompositorReady();
+
const targetScrollendPromise = createScrollendPromise(t);
verifyNoScrollendOnDocument(t);
@@ -146,7 +162,9 @@ function runTest() {
'scrollbar thumb.');
promise_test(async (t) => {
- resetTargetScrollState(t);
+ await resetTargetScrollState(t);
+ await waitForCompositorReady();
+
const targetScrollendPromise = createScrollendPromise(t);
verifyNoScrollendOnDocument(t);
@@ -167,7 +185,7 @@ function runTest() {
promise_test(async (t) => {
await resetTargetScrollState(t);
- await waitForCompositorCommit();
+ await waitForCompositorReady();
verifyNoScrollendOnDocument(t);
const targetScrollendPromise = createScrollendPromise(t);
diff --git a/tests/wpt/web-platform-tests/dom/nodes/Comment-in-doctype.xhtml b/tests/wpt/web-platform-tests/dom/nodes/Comment-in-doctype.xhtml
new file mode 100644
index 00000000000..c0817d353de
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/nodes/Comment-in-doctype.xhtml
@@ -0,0 +1,15 @@
+]>
+
+ XML: Comment in doctype internal subset
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/dom/nodes/ProcessingInstruction-in-doctype.xhtml b/tests/wpt/web-platform-tests/dom/nodes/ProcessingInstruction-in-doctype.xhtml
new file mode 100644
index 00000000000..c35e710f9cc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/nodes/ProcessingInstruction-in-doctype.xhtml
@@ -0,0 +1,15 @@
+]>
+
+ XML: Processing instruction in doctype internal subset
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/editing/data/delete.js b/tests/wpt/web-platform-tests/editing/data/delete.js
index 26858d17197..c1f48a74b20 100644
--- a/tests/wpt/web-platform-tests/editing/data/delete.js
+++ b/tests/wpt/web-platform-tests/editing/data/delete.js
@@ -2806,4 +2806,66 @@ var browserTests = [
""],
[true],
{"delete":[false,false,"",false,false,""]}],
+
+// s shouldn't be joined if they have different attributes.
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"foreColor":[false,false,"rgb(165, 42, 42)",false,false,"rgb(0, 0, 255)"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"foreColor":[false,false,"rgb(165, 42, 42)",false,false,"rgb(0, 0, 255)"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"5",false,false,"3"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"5",false,false,"3"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"5",false,false,"4"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"5",false,false,"4"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"5",false,false,"3"],"foreColor":[false,false,"rgb(0, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"5",false,false,"3"],"foreColor":[false,false,"rgb(0, 0, 0)",false,false,"rgb(0, 0, 255)"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"3",false,false,"5"],"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 0)"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"3",false,false,"5"],"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 0)"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontName":[false,false,"sans-serif",false,false,"monospace"]}],
+["foo
[]bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontName":[false,false,"sans-serif",false,false,"monospace"]}],
]
diff --git a/tests/wpt/web-platform-tests/editing/data/forecolor.js b/tests/wpt/web-platform-tests/editing/data/forecolor.js
index efca1970ec9..c3271b32c96 100644
--- a/tests/wpt/web-platform-tests/editing/data/forecolor.js
+++ b/tests/wpt/web-platform-tests/editing/data/forecolor.js
@@ -370,9 +370,13 @@ var browserTests = [
"foo{bar} baz",
[true,true],
{"stylewithcss":[false,true,"",false,false,""],"forecolor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
+// Once the inner style is updated, it has same style as the outer one.
+// Therefore, it may be okay to use the outer one is the only container of the
+// text nodes or it may be okay to split the outer one and keep 3 s.
["foo[bar] baz ",
[["stylewithcss","true"],["forecolor","#0000FF"]],
- "foo bar baz ",
+ ["foo bar baz ",
+ "foo[bar]baz "],
[true,true],
{"stylewithcss":[false,false,"",false,true,""],"forecolor":[false,false,"rgb(165, 42, 42)",false,false,"rgb(0, 0, 255)"]}],
["foo[bar] baz ",
@@ -410,9 +414,12 @@ var browserTests = [
"foo[bar]baz ",
[true,true],
{"stylewithcss":[false,true,"",false,false,""],"forecolor":[false,false,"rgb(165, 42, 42)",false,false,"rgb(0, 0, 255)"]}],
+// Use the inner for the `style` attribute container. Then, the outer
+// should be split and may be serialized.
["foo[bar] baz ",
[["stylewithcss","true"],["forecolor","#0000FF"]],
- "foo[bar]baz ",
+ ["foo bar baz ",
+ "foo bar baz "],
[true,true],
{"stylewithcss":[false,false,"",false,true,""],"forecolor":[false,false,"rgb(165, 42, 42)",false,false,"rgb(0, 0, 255)"]}],
["foo[bar] baz ",
diff --git a/tests/wpt/web-platform-tests/editing/data/forwarddelete.js b/tests/wpt/web-platform-tests/editing/data/forwarddelete.js
index 323d2b81b9f..832ba608a04 100644
--- a/tests/wpt/web-platform-tests/editing/data/forwarddelete.js
+++ b/tests/wpt/web-platform-tests/editing/data/forwarddelete.js
@@ -2686,4 +2686,66 @@ var browserTests = [
""],
[true],
{"forwarddelete":[false,false,"",false,false,""]}],
+
+// s shouldn't be joined if they have different attributes.
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"3",false,false,"3"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"3",false,false,"3"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"4",false,false,"4"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"4",false,false,"4"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"3",false,false,"3"],"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"3",false,false,"3"],"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"5",false,false,"5"],"foreColor":[false,false,"rgb(0, 0, 0)",false,false,"rgb(0, 0, 0)"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontSize":[false,false,"5",false,false,"5"],"foreColor":[false,false,"rgb(0, 0, 0)",false,false,"rgb(0, 0, 0)"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontName":[false,false,"monospace",false,false,"monospace"]}],
+["foo[]
bar ",
+ [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]],
+ "
foo[] bar
",
+ [true,true,true],
+ {"fontName":[false,false,"monospace",false,false,"monospace"]}],
]
diff --git a/tests/wpt/web-platform-tests/fonts/math/stretchy-centered-on-baseline.woff b/tests/wpt/web-platform-tests/fonts/math/stretchy-centered-on-baseline.woff
new file mode 100644
index 0000000000000000000000000000000000000000..fd753edf7611a36570045a357690a1137ee5d137
GIT binary patch
literal 1508
zcmZWpdo==ykXzX}QHCf4HB9A$f$B*%jxP{~^H=MyYPUjIn_Ux431JY%
zwnJYJf~GO2c2y`kEQURLpihCI@7M!?h%biqP|yOnH4wNUnlB26u__4oPK)=0c7J1XbP)EW{;YhyX#riyO@8_^!`miQy9wNhnQzv)s22pb6_xgy>5~rgjF490aE%{x=F*sGmH!xmr8u&62Z&dW`p~w9zws8;lbv49?^H1^i
zkv3PF+4kDF?JAA_Iy(f3NJeyUY#h-Q{fR71)W+FR@1asX9RpaFFHuW!IpX&alP;Ib
z9k4Zu)!|_i=sZs(-=FM%EHS>!Y-gE~4HrehJQR*6pI+uFg5UwX>)K94faCH&oosRg
z04D9IH!ybOjGYIDMNHq@U(`u^nfnMo&E?Y*NJDU8-|
zs&LSE<4Ou|MM0!mdpu1pZTDmKx9CdkR8pvBzxTIV4k%w|D&=7_Y~#7cZz^wlyG_T{
zRIHo3z>~U*Ua8L74G*E1VEsJ-;wI40iyG=qr=6!4_Qa9IGTH}Yjb!~4DH-MTp?Y15
z9fv5$U>S7siRpYSo3E>lU~*JVeb1i{T2y`7xUXtjC+t$KP5>iJ(3tj*`{1~hdmk?;
zV3228UMqX~cYjG^X|R`k?5$i)UHK!nMx3=*IK>E_*!1`VenUoYX8()POL2)uVwW7n
z_u~CKSly9-GVS*!Z?YeXZhzk#U1C){AH9)yYP956Tl+vCr?#{}(Uzvg6SL8##s`gC
z>s~~&IXKR`j_6hIzi5N
zbt-7S+Zel~(rt!K&aLsJe;<1BV~Fgtee`4yChz8lt^)@iD+j%b)7$NVlT7WnAaUu@
zzvl6>z@(-=}&p$1y@2MvzVd|4n?5&p`*HY2yB
z0_f<9i3imEmjES!ikXBxnf|{h$S*Ddx>5(IP#B06{_kKgs+g0UkdlzVkaW9z`euIm*8c5Nwn+h9}Dpg2*OZOMvPO)U$Om{tZ`M@)R`(j}DA6!LFD^8O|A
zSLSExAB?pUc==Rze|ddvE#sXB+)U5&Thz}pF<+Tyz2i{(b3M5aZ!Hfv+^Kx`Fl@=Z
z-*ff{X*Olgle-5#7?iIott*)Y`No>UH|U;mSTfH
z>09iIE?8VnvCKTY@o3|`SwcBIwo_(pNSN0p?sqpZ@s^C>WRE3l{!e?J*(B+t##{SL
zv-j1i$SdchX1aJS`}96D$%y;$gv{mQ!utx|XlUGWnY6D<-z7IZMtZycD=#fkcdwP+
zVf&vg4*UQLvE+n=gtUePNj5h&0Z$L6PZ9@f#MsOg&N8<6I7B%bKV$s;|9?W*73Q}8
z|Nq;wtY%-Cn*4xil25|q2#JWsnz99YehW0r0~n>5uVmb5nD8fnogwZ#m&ay)<|;;k
Z-}m*;v0b)LJ)3C45W~zqXYx#z`vAz}8j}D3
delta 741
zcmbQj{e!E%+~3X3KP1GTfq}JxftvvcI2{-mK{O_Cc5_o;U|?2ZU|@^^;-lNE)@8Z5
zh4?Zsurx3*Fh~Ni%#wFzUJb+?zfcygt3``2n&tIGP2kRRF^&|kr9Dq1M=!d04
za&Dqy0Z_pipnxM#GDtID*E1tEF$Kux0E+1Wv6;rZmy0uiff9lh!r{!)@69iOu|}&?@IlJjq#WGU!C7_
zy>C-V$Ag!$wz09X4CVDd+74CPKDxQ-5X;u5jCmh2D?8NxM3fl>exK$(W7X29hR@%J
zXg!~{JoW#ok`;dBb;j``XZLE5CByFOG-bN>BEzST}2h
zS)^9u@>Ip?>pSaSwB=3zmUYPXcw5sVf0Zv+zkL05Z|Olh)8mWQxn$qJ9Cg}syZznv
zAV*N#BqXFYBuKKku?c)&{3LO(MvP6DS>Y^Wi;qK;qp_Fqv;Xxhum2y;)?TOE{)&m&
x&5SKYFU-NCZUr+#a4Qcx1H)!*<|;;k=(j)rD*Rg4!as+N!R0C&
+
+OffscreenCanvas test: 2d.line.invalid.strokestyle
+
+
+
+
+2d.line.invalid.strokestyle
+Verify correct behavior of canvas on an invalid strokeStyle()
+
+
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.invalid.strokestyle.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.invalid.strokestyle.worker.js
new file mode 100644
index 00000000000..c9f2fa3d9f2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.invalid.strokestyle.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.invalid.strokestyle
+// Description:Verify correct behavior of canvas on an invalid strokeStyle()
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Verify correct behavior of canvas on an invalid strokeStyle()");
+var t_pass = t.done.bind(t);
+var t_fail = t.step_func(function(reason) {
+ throw reason;
+});
+t.step(function() {
+
+var canvas = new OffscreenCanvas(100, 50);
+var ctx = canvas.getContext('2d');
+
+ctx.strokeStyle = 'rgb(0, 255, 0)';
+ctx.strokeStyle = 'nonsense';
+ctx.lineWidth = 200;
+ctx.moveTo(0,100);
+ctx.lineTo(200,100);
+ctx.stroke();
+var imageData = ctx.getImageData(0, 0, 200, 200);
+var imgdata = imageData.data;
+_assert(imgdata[4] == 0, "imgdata[\""+(4)+"\"] == 0");
+_assert(imgdata[5] == 255, "imgdata[\""+(5)+"\"] == 255");
+_assert(imgdata[6] == 0, "imgdata[\""+(6)+"\"] == 0");
+t.done();
+
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.bevel.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.bevel.html
index 45c8d3eb543..ecf83e7b5a0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.bevel.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.bevel.html
@@ -22,11 +22,15 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var tol = 1; // tolerance to avoid antialiasing artifacts
+
ctx.lineJoin = 'bevel';
ctx.lineWidth = 20;
+
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
+
ctx.fillRect(10, 10, 20, 20);
ctx.fillRect(20, 20, 20, 20);
ctx.beginPath();
@@ -34,18 +38,23 @@ ctx.moveTo(30, 20);
ctx.lineTo(40-tol, 20);
ctx.lineTo(30, 10+tol);
ctx.fill();
+
ctx.beginPath();
ctx.moveTo(10, 20);
ctx.lineTo(30, 20);
ctx.lineTo(30, 40);
ctx.stroke();
+
+
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
+
ctx.beginPath();
ctx.moveTo(60, 20);
ctx.lineTo(80, 20);
ctx.lineTo(80, 40);
ctx.stroke();
+
ctx.fillRect(60, 10, 20, 20);
ctx.fillRect(70, 20, 20, 20);
ctx.beginPath();
@@ -53,11 +62,13 @@ ctx.moveTo(80, 20);
ctx.lineTo(90+tol, 20);
ctx.lineTo(80, 10-tol);
ctx.fill();
+
_assertPixel(canvas, 34,16, 0,255,0,255);
_assertPixel(canvas, 34,15, 0,255,0,255);
_assertPixel(canvas, 35,15, 0,255,0,255);
_assertPixel(canvas, 36,15, 0,255,0,255);
_assertPixel(canvas, 36,14, 0,255,0,255);
+
_assertPixel(canvas, 84,16, 0,255,0,255);
_assertPixel(canvas, 84,15, 0,255,0,255);
_assertPixel(canvas, 85,15, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.bevel.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.bevel.worker.js
index 2dfbf34f156..87bf6a8d37c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.bevel.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.bevel.worker.js
@@ -18,11 +18,15 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var tol = 1; // tolerance to avoid antialiasing artifacts
+
ctx.lineJoin = 'bevel';
ctx.lineWidth = 20;
+
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
+
ctx.fillRect(10, 10, 20, 20);
ctx.fillRect(20, 20, 20, 20);
ctx.beginPath();
@@ -30,18 +34,23 @@ ctx.moveTo(30, 20);
ctx.lineTo(40-tol, 20);
ctx.lineTo(30, 10+tol);
ctx.fill();
+
ctx.beginPath();
ctx.moveTo(10, 20);
ctx.lineTo(30, 20);
ctx.lineTo(30, 40);
ctx.stroke();
+
+
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
+
ctx.beginPath();
ctx.moveTo(60, 20);
ctx.lineTo(80, 20);
ctx.lineTo(80, 40);
ctx.stroke();
+
ctx.fillRect(60, 10, 20, 20);
ctx.fillRect(70, 20, 20, 20);
ctx.beginPath();
@@ -49,11 +58,13 @@ ctx.moveTo(80, 20);
ctx.lineTo(90+tol, 20);
ctx.lineTo(80, 10-tol);
ctx.fill();
+
_assertPixel(canvas, 34,16, 0,255,0,255);
_assertPixel(canvas, 34,15, 0,255,0,255);
_assertPixel(canvas, 35,15, 0,255,0,255);
_assertPixel(canvas, 36,15, 0,255,0,255);
_assertPixel(canvas, 36,14, 0,255,0,255);
+
_assertPixel(canvas, 84,16, 0,255,0,255);
_assertPixel(canvas, 84,15, 0,255,0,255);
_assertPixel(canvas, 85,15, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.closed.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.closed.html
index 5e88ad0d017..7ce6599f4c1 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.closed.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.closed.html
@@ -23,8 +23,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineJoin = 'miter';
ctx.lineWidth = 200;
+
ctx.beginPath();
ctx.moveTo(100, 50);
ctx.lineTo(100, 1000);
@@ -32,6 +34,7 @@ ctx.lineTo(1000, 1000);
ctx.lineTo(1000, 50);
ctx.closePath();
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.closed.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.closed.worker.js
index f2b029ecaf0..cc7073fadba 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.closed.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.closed.worker.js
@@ -19,8 +19,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineJoin = 'miter';
ctx.lineWidth = 200;
+
ctx.beginPath();
ctx.moveTo(100, 50);
ctx.lineTo(100, 1000);
@@ -28,6 +30,7 @@ ctx.lineTo(1000, 1000);
ctx.lineTo(1000, 50);
ctx.closePath();
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.invalid.html
index a54861205ed..59d8b4311d8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.invalid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.invalid.html
@@ -22,21 +22,27 @@ var ctx = canvas.getContext('2d');
ctx.lineJoin = 'bevel'
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'invalid';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'ROUND';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'round\0';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'round ';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = "";
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'butt';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.invalid.worker.js
index 23dfe67230d..fa19bd70b0c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.invalid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.invalid.worker.js
@@ -18,21 +18,27 @@ var ctx = canvas.getContext('2d');
ctx.lineJoin = 'bevel'
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'invalid';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'ROUND';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'round\0';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'round ';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = "";
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'bevel';
ctx.lineJoin = 'butt';
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.miter.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.miter.html
index 64918eca383..d28fb8b69f3 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.miter.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.miter.html
@@ -22,33 +22,44 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineJoin = 'miter';
ctx.lineWidth = 20;
+
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
+
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
+
ctx.fillRect(10, 10, 30, 20);
ctx.fillRect(20, 10, 20, 30);
+
ctx.beginPath();
ctx.moveTo(10, 20);
ctx.lineTo(30, 20);
ctx.lineTo(30, 40);
ctx.stroke();
+
+
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
+
ctx.beginPath();
ctx.moveTo(60, 20);
ctx.lineTo(80, 20);
ctx.lineTo(80, 40);
ctx.stroke();
+
ctx.fillRect(60, 10, 30, 20);
ctx.fillRect(70, 10, 20, 30);
+
_assertPixel(canvas, 38,12, 0,255,0,255);
_assertPixel(canvas, 39,11, 0,255,0,255);
_assertPixel(canvas, 40,10, 0,255,0,255);
_assertPixel(canvas, 41,9, 0,255,0,255);
_assertPixel(canvas, 42,8, 0,255,0,255);
+
_assertPixel(canvas, 88,12, 0,255,0,255);
_assertPixel(canvas, 89,11, 0,255,0,255);
_assertPixel(canvas, 90,10, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.miter.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.miter.worker.js
index 02712a806eb..3a3eb8f86f2 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.miter.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.miter.worker.js
@@ -18,33 +18,44 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineJoin = 'miter';
ctx.lineWidth = 20;
+
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
+
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
+
ctx.fillRect(10, 10, 30, 20);
ctx.fillRect(20, 10, 20, 30);
+
ctx.beginPath();
ctx.moveTo(10, 20);
ctx.lineTo(30, 20);
ctx.lineTo(30, 40);
ctx.stroke();
+
+
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
+
ctx.beginPath();
ctx.moveTo(60, 20);
ctx.lineTo(80, 20);
ctx.lineTo(80, 40);
ctx.stroke();
+
ctx.fillRect(60, 10, 30, 20);
ctx.fillRect(70, 10, 20, 30);
+
_assertPixel(canvas, 38,12, 0,255,0,255);
_assertPixel(canvas, 39,11, 0,255,0,255);
_assertPixel(canvas, 40,10, 0,255,0,255);
_assertPixel(canvas, 41,9, 0,255,0,255);
_assertPixel(canvas, 42,8, 0,255,0,255);
+
_assertPixel(canvas, 88,12, 0,255,0,255);
_assertPixel(canvas, 89,11, 0,255,0,255);
_assertPixel(canvas, 90,10, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.open.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.open.html
index 48154df59b6..5bd8e48061c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.open.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.open.html
@@ -23,8 +23,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineJoin = 'miter';
ctx.lineWidth = 200;
+
ctx.beginPath();
ctx.moveTo(100, 50);
ctx.lineTo(100, 1000);
@@ -32,6 +34,7 @@ ctx.lineTo(1000, 1000);
ctx.lineTo(1000, 50);
ctx.lineTo(100, 50);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.open.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.open.worker.js
index 133854bf548..5f52b6337ad 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.open.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.open.worker.js
@@ -19,8 +19,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineJoin = 'miter';
ctx.lineWidth = 200;
+
ctx.beginPath();
ctx.moveTo(100, 50);
ctx.lineTo(100, 1000);
@@ -28,6 +30,7 @@ ctx.lineTo(1000, 1000);
ctx.lineTo(1000, 50);
ctx.lineTo(100, 50);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.parallel.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.parallel.html
index fdda123dd8a..928bb86f120 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.parallel.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.parallel.html
@@ -22,6 +22,7 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.strokeStyle = '#0f0';
ctx.lineWidth = 300;
ctx.lineJoin = 'round';
@@ -30,6 +31,7 @@ ctx.moveTo(-100, 25);
ctx.lineTo(0, 25);
ctx.lineTo(-100, 25);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.parallel.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.parallel.worker.js
index 68ed957b6d7..d431d5e99f5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.parallel.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.parallel.worker.js
@@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.strokeStyle = '#0f0';
ctx.lineWidth = 300;
ctx.lineJoin = 'round';
@@ -26,6 +27,7 @@ ctx.moveTo(-100, 25);
ctx.lineTo(0, 25);
ctx.lineTo(-100, 25);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.round.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.round.html
index ebc71c30f83..9441585e50d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.round.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.round.html
@@ -22,40 +22,51 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var tol = 1; // tolerance to avoid antialiasing artifacts
+
ctx.lineJoin = 'round';
ctx.lineWidth = 20;
+
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
+
ctx.fillRect(10, 10, 20, 20);
ctx.fillRect(20, 20, 20, 20);
ctx.beginPath();
ctx.moveTo(30, 20);
ctx.arc(30, 20, 10-tol, 0, 2*Math.PI, true);
ctx.fill();
+
ctx.beginPath();
ctx.moveTo(10, 20);
ctx.lineTo(30, 20);
ctx.lineTo(30, 40);
ctx.stroke();
+
+
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
+
ctx.beginPath();
ctx.moveTo(60, 20);
ctx.lineTo(80, 20);
ctx.lineTo(80, 40);
ctx.stroke();
+
ctx.fillRect(60, 10, 20, 20);
ctx.fillRect(70, 20, 20, 20);
ctx.beginPath();
ctx.moveTo(80, 20);
ctx.arc(80, 20, 10+tol, 0, 2*Math.PI, true);
ctx.fill();
+
_assertPixel(canvas, 36,14, 0,255,0,255);
_assertPixel(canvas, 36,13, 0,255,0,255);
_assertPixel(canvas, 37,13, 0,255,0,255);
_assertPixel(canvas, 38,13, 0,255,0,255);
_assertPixel(canvas, 38,12, 0,255,0,255);
+
_assertPixel(canvas, 86,14, 0,255,0,255);
_assertPixel(canvas, 86,13, 0,255,0,255);
_assertPixel(canvas, 87,13, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.round.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.round.worker.js
index c7da3520b3f..44a847bd30c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.round.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.round.worker.js
@@ -18,40 +18,51 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var tol = 1; // tolerance to avoid antialiasing artifacts
+
ctx.lineJoin = 'round';
ctx.lineWidth = 20;
+
ctx.fillStyle = '#f00';
ctx.strokeStyle = '#0f0';
+
ctx.fillRect(10, 10, 20, 20);
ctx.fillRect(20, 20, 20, 20);
ctx.beginPath();
ctx.moveTo(30, 20);
ctx.arc(30, 20, 10-tol, 0, 2*Math.PI, true);
ctx.fill();
+
ctx.beginPath();
ctx.moveTo(10, 20);
ctx.lineTo(30, 20);
ctx.lineTo(30, 40);
ctx.stroke();
+
+
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
+
ctx.beginPath();
ctx.moveTo(60, 20);
ctx.lineTo(80, 20);
ctx.lineTo(80, 40);
ctx.stroke();
+
ctx.fillRect(60, 10, 20, 20);
ctx.fillRect(70, 20, 20, 20);
ctx.beginPath();
ctx.moveTo(80, 20);
ctx.arc(80, 20, 10+tol, 0, 2*Math.PI, true);
ctx.fill();
+
_assertPixel(canvas, 36,14, 0,255,0,255);
_assertPixel(canvas, 36,13, 0,255,0,255);
_assertPixel(canvas, 37,13, 0,255,0,255);
_assertPixel(canvas, 38,13, 0,255,0,255);
_assertPixel(canvas, 38,12, 0,255,0,255);
+
_assertPixel(canvas, 86,14, 0,255,0,255);
_assertPixel(canvas, 86,13, 0,255,0,255);
_assertPixel(canvas, 87,13, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.valid.html
index eaa7c24967e..b3b15fc09d6 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.valid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.valid.html
@@ -22,8 +22,10 @@ var ctx = canvas.getContext('2d');
ctx.lineJoin = 'bevel'
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'round';
_assertSame(ctx.lineJoin, 'round', "ctx.lineJoin", "'round'");
+
ctx.lineJoin = 'miter';
_assertSame(ctx.lineJoin, 'miter', "ctx.lineJoin", "'miter'");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.valid.worker.js
index 4e7154358a0..407dbdd59e0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.valid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.join.valid.worker.js
@@ -18,8 +18,10 @@ var ctx = canvas.getContext('2d');
ctx.lineJoin = 'bevel'
_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
ctx.lineJoin = 'round';
_assertSame(ctx.lineJoin, 'round', "ctx.lineJoin", "'round'");
+
ctx.lineJoin = 'miter';
_assertSame(ctx.lineJoin, 'miter', "ctx.lineJoin", "'miter'");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.acute.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.acute.html
index fd6902ca4d6..1713d8174ea 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.acute.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.acute.html
@@ -22,8 +22,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 200;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#0f0';
ctx.miterLimit = 2.614;
ctx.beginPath();
@@ -31,6 +33,7 @@ ctx.moveTo(100, 1000);
ctx.lineTo(100, 100);
ctx.lineTo(1000, 1000);
ctx.stroke();
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 2.613;
ctx.beginPath();
@@ -38,6 +41,7 @@ ctx.moveTo(100, 1000);
ctx.lineTo(100, 100);
ctx.lineTo(1000, 1000);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.acute.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.acute.worker.js
index ef2954a7fe2..95040d13194 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.acute.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.acute.worker.js
@@ -18,8 +18,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 200;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#0f0';
ctx.miterLimit = 2.614;
ctx.beginPath();
@@ -27,6 +29,7 @@ ctx.moveTo(100, 1000);
ctx.lineTo(100, 100);
ctx.lineTo(1000, 1000);
ctx.stroke();
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 2.613;
ctx.beginPath();
@@ -34,6 +37,7 @@ ctx.moveTo(100, 1000);
ctx.lineTo(100, 100);
ctx.lineTo(1000, 1000);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.exceeded.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.exceeded.html
index fd0e7a1ca2f..172c63ca1ce 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.exceeded.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.exceeded.html
@@ -22,8 +22,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 400;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 1.414;
ctx.beginPath();
@@ -31,6 +33,7 @@ ctx.moveTo(200, 1000);
ctx.lineTo(200, 200);
ctx.lineTo(1000, 201); // slightly non-right-angle to avoid being a special case
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.exceeded.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.exceeded.worker.js
index 2e0fbd4910c..e2b04e21f63 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.exceeded.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.exceeded.worker.js
@@ -18,8 +18,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 400;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 1.414;
ctx.beginPath();
@@ -27,6 +29,7 @@ ctx.moveTo(200, 1000);
ctx.lineTo(200, 200);
ctx.lineTo(1000, 201); // slightly non-right-angle to avoid being a special case
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.invalid.html
index 35bda1a11ac..27251d4902a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.invalid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.invalid.html
@@ -22,21 +22,38 @@ var ctx = canvas.getContext('2d');
ctx.miterLimit = 1.5;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = 0;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = -1;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = Infinity;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = -Infinity;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = NaN;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
+ctx.miterLimit = 1.5;
+ctx.miterLimit = 'string';
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
+ctx.miterLimit = 1.5;
+ctx.miterLimit = true;
+_assertSame(ctx.miterLimit, 1, "ctx.miterLimit", "1");
+
+ctx.miterLimit = 1.5;
+ctx.miterLimit = false;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.invalid.worker.js
index ef4c17eea2d..dbc64d52d94 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.invalid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.invalid.worker.js
@@ -18,21 +18,38 @@ var ctx = canvas.getContext('2d');
ctx.miterLimit = 1.5;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = 0;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = -1;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = Infinity;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = -Infinity;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = 1.5;
ctx.miterLimit = NaN;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
+ctx.miterLimit = 1.5;
+ctx.miterLimit = 'string';
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
+ctx.miterLimit = 1.5;
+ctx.miterLimit = true;
+_assertSame(ctx.miterLimit, 1, "ctx.miterLimit", "1");
+
+ctx.miterLimit = 1.5;
+ctx.miterLimit = false;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.lineedge.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.lineedge.html
index 292ed560de6..5ede60b8995 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.lineedge.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.lineedge.html
@@ -22,12 +22,15 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 200;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 1.414;
ctx.beginPath();
ctx.strokeRect(100, 25, 200, 0);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.lineedge.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.lineedge.worker.js
index c7fa1e6d173..24f4fa30f5e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.lineedge.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.lineedge.worker.js
@@ -18,12 +18,15 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 200;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 1.414;
ctx.beginPath();
ctx.strokeRect(100, 25, 200, 0);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.obtuse.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.obtuse.html
index 4e60253ddca..0eaeedfa419 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.obtuse.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.obtuse.html
@@ -22,8 +22,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 1600;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#0f0';
ctx.miterLimit = 1.083;
ctx.beginPath();
@@ -31,6 +33,7 @@ ctx.moveTo(800, 10000);
ctx.lineTo(800, 300);
ctx.lineTo(10000, -8900);
ctx.stroke();
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 1.082;
ctx.beginPath();
@@ -38,6 +41,7 @@ ctx.moveTo(800, 10000);
ctx.lineTo(800, 300);
ctx.lineTo(10000, -8900);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.obtuse.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.obtuse.worker.js
index 3cf78ed21e8..45900dbc88a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.obtuse.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.obtuse.worker.js
@@ -18,8 +18,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 1600;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#0f0';
ctx.miterLimit = 1.083;
ctx.beginPath();
@@ -27,6 +29,7 @@ ctx.moveTo(800, 10000);
ctx.lineTo(800, 300);
ctx.lineTo(10000, -8900);
ctx.stroke();
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 1.082;
ctx.beginPath();
@@ -34,6 +37,7 @@ ctx.moveTo(800, 10000);
ctx.lineTo(800, 300);
ctx.lineTo(10000, -8900);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.rightangle.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.rightangle.html
index 33cbe5d02c3..7f8134f180f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.rightangle.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.rightangle.html
@@ -22,8 +22,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 400;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 1.414;
ctx.beginPath();
@@ -31,6 +33,7 @@ ctx.moveTo(200, 1000);
ctx.lineTo(200, 200);
ctx.lineTo(1000, 200);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.rightangle.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.rightangle.worker.js
index 895318c3ef3..a2a07247b1e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.rightangle.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.rightangle.worker.js
@@ -18,8 +18,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 400;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#f00';
ctx.miterLimit = 1.414;
ctx.beginPath();
@@ -27,6 +29,7 @@ ctx.moveTo(200, 1000);
ctx.lineTo(200, 200);
ctx.lineTo(1000, 200);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.valid.html
index 1d034052aa0..2702fc57a3c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.valid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.valid.html
@@ -22,10 +22,13 @@ var ctx = canvas.getContext('2d');
ctx.miterLimit = 1.5;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = "1e1";
_assertSame(ctx.miterLimit, 10, "ctx.miterLimit", "10");
+
ctx.miterLimit = 1/1024;
_assertSame(ctx.miterLimit, 1/1024, "ctx.miterLimit", "1/1024");
+
ctx.miterLimit = 1000;
_assertSame(ctx.miterLimit, 1000, "ctx.miterLimit", "1000");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.valid.worker.js
index b34561407ea..c71c726f126 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.valid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.valid.worker.js
@@ -18,10 +18,13 @@ var ctx = canvas.getContext('2d');
ctx.miterLimit = 1.5;
_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
ctx.miterLimit = "1e1";
_assertSame(ctx.miterLimit, 10, "ctx.miterLimit", "10");
+
ctx.miterLimit = 1/1024;
_assertSame(ctx.miterLimit, 1/1024, "ctx.miterLimit", "1/1024");
+
ctx.miterLimit = 1000;
_assertSame(ctx.miterLimit, 1000, "ctx.miterLimit", "1000");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.within.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.within.html
index 4af7c84a6a1..a9f7a366a38 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.within.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.within.html
@@ -22,8 +22,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 400;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#0f0';
ctx.miterLimit = 1.416;
ctx.beginPath();
@@ -31,6 +33,7 @@ ctx.moveTo(200, 1000);
ctx.lineTo(200, 200);
ctx.lineTo(1000, 201);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.within.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.within.worker.js
index 64fe4312c27..c09ad957e89 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.within.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.miter.within.worker.js
@@ -18,8 +18,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 400;
ctx.lineJoin = 'miter';
+
ctx.strokeStyle = '#0f0';
ctx.miterLimit = 1.416;
ctx.beginPath();
@@ -27,6 +29,7 @@ ctx.moveTo(200, 1000);
ctx.lineTo(200, 200);
ctx.lineTo(1000, 201);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.union.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.union.html
index 60defee7cb8..1f8b3a0d67c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.union.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.union.html
@@ -22,8 +22,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 100;
ctx.lineCap = 'round';
+
ctx.strokeStyle = '#0f0';
ctx.beginPath();
ctx.moveTo(0, 24);
@@ -31,6 +33,7 @@ ctx.lineTo(100, 25);
ctx.lineTo(0, 26);
ctx.closePath();
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 25,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.union.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.union.worker.js
index ed262373374..02ebbfd8af0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.union.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.union.worker.js
@@ -18,8 +18,10 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 100;
ctx.lineCap = 'round';
+
ctx.strokeStyle = '#0f0';
ctx.beginPath();
ctx.moveTo(0, 24);
@@ -27,6 +29,7 @@ ctx.lineTo(100, 25);
ctx.lineTo(0, 26);
ctx.closePath();
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 25,1, 0,255,0,255);
_assertPixel(canvas, 48,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.basic.html
index 9b81b1c386c..1d0e0298288 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.basic.html
@@ -22,6 +22,7 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 20;
// Draw a green line over a red box, to check the line is not too small
ctx.fillStyle = '#f00';
@@ -31,6 +32,7 @@ ctx.beginPath();
ctx.moveTo(25, 15);
ctx.lineTo(25, 35);
ctx.stroke();
+
// Draw a green box over a red line, to check the line is not too large
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
@@ -39,6 +41,7 @@ ctx.moveTo(75, 15);
ctx.lineTo(75, 35);
ctx.stroke();
ctx.fillRect(65, 15, 20, 20);
+
_assertPixel(canvas, 14,25, 0,255,0,255);
_assertPixel(canvas, 15,25, 0,255,0,255);
_assertPixel(canvas, 16,25, 0,255,0,255);
@@ -46,6 +49,7 @@ _assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 34,25, 0,255,0,255);
_assertPixel(canvas, 35,25, 0,255,0,255);
_assertPixel(canvas, 36,25, 0,255,0,255);
+
_assertPixel(canvas, 64,25, 0,255,0,255);
_assertPixel(canvas, 65,25, 0,255,0,255);
_assertPixel(canvas, 66,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.basic.worker.js
index e822679c637..d0664278979 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.basic.worker.js
@@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 20;
// Draw a green line over a red box, to check the line is not too small
ctx.fillStyle = '#f00';
@@ -27,6 +28,7 @@ ctx.beginPath();
ctx.moveTo(25, 15);
ctx.lineTo(25, 35);
ctx.stroke();
+
// Draw a green box over a red line, to check the line is not too large
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
@@ -35,6 +37,7 @@ ctx.moveTo(75, 15);
ctx.lineTo(75, 35);
ctx.stroke();
ctx.fillRect(65, 15, 20, 20);
+
_assertPixel(canvas, 14,25, 0,255,0,255);
_assertPixel(canvas, 15,25, 0,255,0,255);
_assertPixel(canvas, 16,25, 0,255,0,255);
@@ -42,6 +45,7 @@ _assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 34,25, 0,255,0,255);
_assertPixel(canvas, 35,25, 0,255,0,255);
_assertPixel(canvas, 36,25, 0,255,0,255);
+
_assertPixel(canvas, 64,25, 0,255,0,255);
_assertPixel(canvas, 65,25, 0,255,0,255);
_assertPixel(canvas, 66,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.invalid.html
index 439af5ecf29..993dc17948f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.invalid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.invalid.html
@@ -22,21 +22,38 @@ var ctx = canvas.getContext('2d');
ctx.lineWidth = 1.5;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = 0;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = -1;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = Infinity;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = -Infinity;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = NaN;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
+ctx.lineWidth = 1.5;
+ctx.lineWidth = 'string';
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
+ctx.lineWidth = 1.5;
+ctx.lineWidth = true;
+_assertSame(ctx.lineWidth, 1, "ctx.lineWidth", "1");
+
+ctx.lineWidth = 1.5;
+ctx.lineWidth = false;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.invalid.worker.js
index d87b87e901b..dc5e2c29263 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.invalid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.invalid.worker.js
@@ -18,21 +18,38 @@ var ctx = canvas.getContext('2d');
ctx.lineWidth = 1.5;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = 0;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = -1;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = Infinity;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = -Infinity;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = 1.5;
ctx.lineWidth = NaN;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
+ctx.lineWidth = 1.5;
+ctx.lineWidth = 'string';
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
+ctx.lineWidth = 1.5;
+ctx.lineWidth = true;
+_assertSame(ctx.lineWidth, 1, "ctx.lineWidth", "1");
+
+ctx.lineWidth = 1.5;
+ctx.lineWidth = false;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.scaledefault.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.scaledefault.html
index 78139978580..091fd80c298 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.scaledefault.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.scaledefault.html
@@ -22,11 +22,13 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.scale(50, 50);
ctx.strokeStyle = '#0f0';
ctx.moveTo(0, 0.5);
ctx.lineTo(2, 0.5);
ctx.stroke();
+
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
_assertPixel(canvas, 75,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.scaledefault.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.scaledefault.worker.js
index f9506c4accf..a692f4cc113 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.scaledefault.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.scaledefault.worker.js
@@ -18,11 +18,13 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx.scale(50, 50);
ctx.strokeStyle = '#0f0';
ctx.moveTo(0, 0.5);
ctx.lineTo(2, 0.5);
ctx.stroke();
+
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
_assertPixel(canvas, 75,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.transformed.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.transformed.html
index e75cccd9912..c54943e462c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.transformed.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.transformed.html
@@ -22,6 +22,7 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 4;
// Draw a green line over a red box, to check the line is not too small
ctx.fillStyle = '#f00';
@@ -34,6 +35,7 @@ ctx.save();
ctx.lineTo(5, 35);
ctx.stroke();
ctx.restore();
+
// Draw a green box over a red line, to check the line is not too large
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
@@ -45,6 +47,7 @@ ctx.save();
ctx.stroke();
ctx.restore();
ctx.fillRect(65, 15, 20, 20);
+
_assertPixel(canvas, 14,25, 0,255,0,255);
_assertPixel(canvas, 15,25, 0,255,0,255);
_assertPixel(canvas, 16,25, 0,255,0,255);
@@ -52,6 +55,7 @@ _assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 34,25, 0,255,0,255);
_assertPixel(canvas, 35,25, 0,255,0,255);
_assertPixel(canvas, 36,25, 0,255,0,255);
+
_assertPixel(canvas, 64,25, 0,255,0,255);
_assertPixel(canvas, 65,25, 0,255,0,255);
_assertPixel(canvas, 66,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.transformed.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.transformed.worker.js
index f377d03ca75..e26e93b1e4f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.transformed.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.transformed.worker.js
@@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.lineWidth = 4;
// Draw a green line over a red box, to check the line is not too small
ctx.fillStyle = '#f00';
@@ -30,6 +31,7 @@ ctx.save();
ctx.lineTo(5, 35);
ctx.stroke();
ctx.restore();
+
// Draw a green box over a red line, to check the line is not too large
ctx.fillStyle = '#0f0';
ctx.strokeStyle = '#f00';
@@ -41,6 +43,7 @@ ctx.save();
ctx.stroke();
ctx.restore();
ctx.fillRect(65, 15, 20, 20);
+
_assertPixel(canvas, 14,25, 0,255,0,255);
_assertPixel(canvas, 15,25, 0,255,0,255);
_assertPixel(canvas, 16,25, 0,255,0,255);
@@ -48,6 +51,7 @@ _assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 34,25, 0,255,0,255);
_assertPixel(canvas, 35,25, 0,255,0,255);
_assertPixel(canvas, 36,25, 0,255,0,255);
+
_assertPixel(canvas, 64,25, 0,255,0,255);
_assertPixel(canvas, 65,25, 0,255,0,255);
_assertPixel(canvas, 66,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.valid.html
index adaabccc114..bdd86c6fbbf 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.valid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.valid.html
@@ -22,10 +22,13 @@ var ctx = canvas.getContext('2d');
ctx.lineWidth = 1.5;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = "1e1";
_assertSame(ctx.lineWidth, 10, "ctx.lineWidth", "10");
+
ctx.lineWidth = 1/1024;
_assertSame(ctx.lineWidth, 1/1024, "ctx.lineWidth", "1/1024");
+
ctx.lineWidth = 1000;
_assertSame(ctx.lineWidth, 1000, "ctx.lineWidth", "1000");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.valid.worker.js
index f409e1fa8bf..df6ee9838e8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.valid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.width.valid.worker.js
@@ -18,10 +18,13 @@ var ctx = canvas.getContext('2d');
ctx.lineWidth = 1.5;
_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
ctx.lineWidth = "1e1";
_assertSame(ctx.lineWidth, 10, "ctx.lineWidth", "10");
+
ctx.lineWidth = 1/1024;
_assertSame(ctx.lineWidth, 1/1024, "ctx.lineWidth", "1/1024");
+
ctx.lineWidth = 1000;
_assertSame(ctx.lineWidth, 1000, "ctx.lineWidth", "1000");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py
index 16ca5f410c0..2517568a5a8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py
@@ -28,7 +28,7 @@
#
# * Test the tests, add new ones to Git, remove deleted ones from Git, etc.
-from typing import List, Optional
+from typing import List, Mapping
import re
import codecs
@@ -56,73 +56,251 @@ class InvalidTestDefinitionError(Error):
"""Raised on invalid test definition."""
+def _simpleEscapeJS(string: str) -> str:
+ return string.replace('\\', '\\\\').replace('"', '\\"')
+
+
+def _escapeJS(string: str) -> str:
+ string = _simpleEscapeJS(string)
+ # Kind of an ugly hack, for nicer failure-message output.
+ string = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', string)
+ return string
+
+
+def _expand_nonfinite(method: str, argstr: str, tail: str) -> str:
+ """
+ >>> print _expand_nonfinite('f', '<0 a>, <0 b>', ';')
+ f(a, 0);
+ f(0, b);
+ f(a, b);
+ >>> print _expand_nonfinite('f', '<0 a>, <0 b c>, <0 d>', ';')
+ f(a, 0, 0);
+ f(0, b, 0);
+ f(0, c, 0);
+ f(0, 0, d);
+ f(a, b, 0);
+ f(a, b, d);
+ f(a, 0, d);
+ f(0, b, d);
+ """
+ # argstr is ", ..." (where usually
+ # 'invalid' is Infinity/-Infinity/NaN).
+ args = []
+ for arg in argstr.split(', '):
+ match = re.match('<(.*)>', arg)
+ if match is None:
+ raise InvalidTestDefinitionError(
+ f"Expected arg to match format '<(.*)>', but was: {arg}")
+ a = match.group(1)
+ args.append(a.split(' '))
+ calls = []
+ # Start with the valid argument list.
+ call = [args[j][0] for j in range(len(args))]
+ # For each argument alone, try setting it to all its invalid values:
+ for i in range(len(args)):
+ for a in args[i][1:]:
+ c2 = call[:]
+ c2[i] = a
+ calls.append(c2)
+ # For all combinations of >= 2 arguments, try setting them to their
+ # first invalid values. (Don't do all invalid values, because the
+ # number of combinations explodes.)
+ def f(c: List[str], start: int, depth: int) -> None:
+ for i in range(start, len(args)):
+ if len(args[i]) > 1:
+ a = args[i][1]
+ c2 = c[:]
+ c2[i] = a
+ if depth > 0:
+ calls.append(c2)
+ f(c2, i + 1, depth + 1)
+
+ f(call, 0, 0)
+
+ return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) for c in calls)
+
+
+def _get_test_sub_dir(name: str, name_to_sub_dir: Mapping[str, str]) -> str:
+ for prefix in sorted(name_to_sub_dir.keys(), key=len, reverse=True):
+ if name.startswith(prefix):
+ return name_to_sub_dir[prefix]
+ raise InvalidTestDefinitionError(
+ 'Test "%s" has no defined target directory mapping' % name)
+
+
+def _expand_test_code(code: str) -> str:
+ code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m:
+ _expand_nonfinite(m.group(1), m.group(2), m.group(3)),
+ code) # Must come before '@assert throws'.
+
+ code = re.sub(r'@assert pixel (\d+,\d+) == (\d+,\d+,\d+,\d+);',
+ r'_assertPixel(canvas, \1, \2);', code)
+
+ code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+);',
+ r'_assertPixelApprox(canvas, \1, \2, 2);', code)
+
+ code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);',
+ r'_assertPixelApprox(canvas, \1, \2, \3);', code)
+
+ code = re.sub(r'@assert throws (\S+_ERR) (.*);',
+ r'assert_throws_dom("\1", function() { \2; });', code)
+
+ code = re.sub(r'@assert throws (\S+Error) (.*);',
+ r'assert_throws_js(\1, function() { \2; });', code)
+
+ code = re.sub(
+ r'@assert (.*) === (.*);', lambda m: '_assertSame(%s, %s, "%s", "%s");'
+ % (m.group(1), m.group(2), _escapeJS(m.group(1)), _escapeJS(m.group(2))
+ ), code)
+
+ code = re.sub(
+ r'@assert (.*) !== (.*);', lambda m:
+ '_assertDifferent(%s, %s, "%s", "%s");' % (m.group(1), m.group(
+ 2), _escapeJS(m.group(1)), _escapeJS(m.group(2))), code)
+
+ code = re.sub(
+ r'@assert (.*) =~ (.*);', lambda m: 'assert_regexp_match(%s, %s);' % (
+ m.group(1), m.group(2)), code)
+
+ code = re.sub(
+ r'@assert (.*);', lambda m: '_assert(%s, "%s");' % (m.group(
+ 1), _escapeJS(m.group(1))), code)
+
+ code = re.sub(r' @moz-todo', '', code)
+
+ code = re.sub(r'@moz-UniversalBrowserRead;', '', code)
+
+ assert ('@' not in code)
+
+ return code
+
+
+def _generate_test(test: Mapping[str, str], templates: Mapping[str, str],
+ sub_dir: str, test_output_dir: str, image_output_dir: str,
+ is_offscreen_canvas: bool):
+ name = test['name']
+
+ if test.get('expected', '') == 'green' and re.search(
+ r'@assert pixel .* 0,0,0,0;', test['code']):
+ print('Probable incorrect pixel test in %s' % name)
+
+ code = _expand_test_code(test['code'])
+
+ expectation_html = ''
+ if 'expected' in test and test['expected'] is not None:
+ expected = test['expected']
+ expected_img = None
+ if expected == 'green':
+ expected_img = '/images/green-100x50.png'
+ elif expected == 'clear':
+ expected_img = '/images/clear-100x50.png'
+ else:
+ if ';' in expected:
+ print('Found semicolon in %s' % name)
+ expected = re.sub(
+ r'^size (\d+) (\d+)',
+ r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)'
+ r'\ncr = cairo.Context(surface)', expected)
+
+ expected += ("\nsurface.write_to_png('%s.png')\n" %
+ os.path.join(image_output_dir, sub_dir, name))
+ eval(compile(expected, '' % name, 'exec'), {},
+ {'cairo': cairo})
+ expected_img = '%s.png' % name
+
+ if expected_img:
+ expectation_html = (
+ 'Expected output:
'
+ ' ' % expected_img)
+
+ canvas = test.get('canvas', 'width="100" height="50"')
+
+ notes = '
%s' % test['notes'] if 'notes' in test else ''
+
+ timeout = ('\n ' %
+ test['timeout'] if 'timeout' in test else '')
+
+ scripts = ''
+ for s in test.get('scripts', []):
+ scripts += '\n' % (s)
+
+ images = ''
+ for src in test.get('images', []):
+ img_id = src.split('/')[-1]
+ if '/' not in src:
+ src = '../images/%s' % src
+ images += ' \n' % (src, img_id)
+ for src in test.get('svgimages', []):
+ img_id = src.split('/')[-1]
+ if '/' not in src:
+ src = '../images/%s' % src
+ images += (''
+ ' \n' % (src, img_id))
+ images = images.replace('../images/', '/images/')
+
+ fonts = ''
+ fonthack = ''
+ for font in test.get('fonts', []):
+ fonts += ('@font-face {\n font-family: %s;\n'
+ ' src: url("/fonts/%s.ttf");\n}\n' % (font, font))
+ # Browsers require the font to actually be used in the page.
+ if test.get('fonthack', 1):
+ fonthack += ('A \n' % font)
+ if fonts:
+ fonts = '\n' % fonts
+
+ fallback = test.get('fallback',
+ '
FAIL (fallback content)
')
+
+ desc = test.get('desc', '')
+ escaped_desc = _simpleEscapeJS(desc)
+
+ attributes = test.get('attributes', '')
+ if attributes:
+ context_args = "'2d', %s" % attributes.strip()
+ attributes = ', ' + attributes.strip()
+ else:
+ context_args = "'2d'"
+
+ template_params = {
+ 'name': name,
+ 'desc': desc,
+ 'escaped_desc': escaped_desc,
+ 'notes': notes,
+ 'images': images,
+ 'fonts': fonts,
+ 'fonthack': fonthack,
+ 'timeout': timeout,
+ 'canvas': canvas,
+ 'expected': expectation_html,
+ 'code': code,
+ 'scripts': scripts,
+ 'fallback': fallback,
+ 'attributes': attributes,
+ 'context_args': context_args
+ }
+
+ test_path = os.path.join(test_output_dir, sub_dir, name)
+ if 'manual' in test:
+ test_path += '-manual'
+
+ if is_offscreen_canvas:
+ f = codecs.open(f'{test_path}.html', 'w', 'utf-8')
+ f.write(templates['w3coffscreencanvas'] % template_params)
+ timeout = ('// META: timeout=%s\n' %
+ test['timeout'] if 'timeout' in test else '')
+ template_params['timeout'] = timeout
+ f = codecs.open(f'{test_path}.worker.js', 'w', 'utf-8')
+ f.write(templates['w3cworker'] % template_params)
+ else:
+ f = codecs.open(f'{test_path}.html', 'w', 'utf-8')
+ f.write(templates['w3ccanvas'] % template_params)
+
+
def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
NAME2DIRFILE: str, ISOFFSCREENCANVAS: bool) -> None:
-
- MISCOUTPUTDIR = './output'
-
- def simpleEscapeJS(string: str) -> str:
- return string.replace('\\', '\\\\').replace('"', '\\"')
-
- def escapeJS(string: str) -> str:
- string = simpleEscapeJS(string)
- # Kind of an ugly hack, for nicer failure-message output.
- string = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', string)
- return string
-
- def expand_nonfinite(method: str, argstr: str, tail: str) -> str:
- """
- >>> print expand_nonfinite('f', '<0 a>, <0 b>', ';')
- f(a, 0);
- f(0, b);
- f(a, b);
- >>> print expand_nonfinite('f', '<0 a>, <0 b c>, <0 d>', ';')
- f(a, 0, 0);
- f(0, b, 0);
- f(0, c, 0);
- f(0, 0, d);
- f(a, b, 0);
- f(a, b, d);
- f(a, 0, d);
- f(0, b, d);
- """
- # argstr is ", ..." (where usually
- # 'invalid' is Infinity/-Infinity/NaN).
- args = []
- for arg in argstr.split(', '):
- match = re.match('<(.*)>', arg)
- if match is None:
- raise InvalidTestDefinitionError(
- f"Expected arg to match format '<(.*)>', but was: {arg}")
- a = match.group(1)
- args.append(a.split(' '))
- calls = []
- # Start with the valid argument list.
- call = [args[j][0] for j in range(len(args))]
- # For each argument alone, try setting it to all its invalid values:
- for i in range(len(args)):
- for a in args[i][1:]:
- c2 = call[:]
- c2[i] = a
- calls.append(c2)
- # For all combinations of >= 2 arguments, try setting them to their
- # first invalid values. (Don't do all invalid values, because the
- # number of combinations explodes.)
- def f(c: List[str], start: int, depth: int) -> None:
- for i in range(start, len(args)):
- if len(args[i]) > 1:
- a = args[i][1]
- c2 = c[:]
- c2[i] = a
- if depth > 0:
- calls.append(c2)
- f(c2, i + 1, depth + 1)
-
- f(call, 0, 0)
-
- return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail)
- for c in calls)
-
# Run with --test argument to run unit tests
if len(sys.argv) > 1 and sys.argv[1] == '--test':
doctest = importlib.import_module('doctest')
@@ -130,7 +308,7 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
sys.exit()
templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read())
- name_mapping = yaml.safe_load(open(NAME2DIRFILE, 'r').read())
+ name_to_sub_dir = yaml.safe_load(open(NAME2DIRFILE, 'r').read())
tests = []
test_yaml_directory = 'yaml/element'
@@ -150,96 +328,18 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
else:
tests.append(t)
- category_names = []
- category_contents_direct = {}
- category_contents_all = {}
-
- def backref_html(name: str) -> str:
- backrefs = []
- c = ''
- for p in name.split('.')[:-1]:
- c += '.' + p
- backrefs.append('%s .' % (c, p))
- backrefs.append(name.split('.')[-1])
- return ''.join(backrefs)
-
# Ensure the test output directories exist.
- testdirs = [TESTOUTPUTDIR, IMAGEOUTPUTDIR, MISCOUTPUTDIR]
- for map_dir in set(name_mapping.values()):
- testdirs.append('%s/%s' % (TESTOUTPUTDIR, map_dir))
+ testdirs = [TESTOUTPUTDIR, IMAGEOUTPUTDIR]
+ for sub_dir in set(name_to_sub_dir.values()):
+ testdirs.append('%s/%s' % (TESTOUTPUTDIR, sub_dir))
for d in testdirs:
try:
os.mkdir(d)
except FileExistsError:
pass # Ignore if it already exists.
- used_images = {}
-
- def map_name(name: str) -> Optional[str]:
- mapped_name = None
- for mn in sorted(name_mapping.keys(), key=len, reverse=True):
- if name.startswith(mn):
- mapped_name = '%s/%s' % (name_mapping[mn], name)
- break
- if not mapped_name:
- print('LIKELY ERROR: %s has no defined target directory mapping' %
- name)
- return None
- if 'manual' in test:
- mapped_name += '-manual'
- return mapped_name
-
- def expand_test_code(code: str) -> str:
- code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m:
- expand_nonfinite(m.group(1), m.group(2), m.group(3)),
- code) # Must come before '@assert throws'.
-
- code = re.sub(r'@assert pixel (\d+,\d+) == (\d+,\d+,\d+,\d+);',
- r'_assertPixel(canvas, \1, \2);', code)
-
- code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+);',
- r'_assertPixelApprox(canvas, \1, \2, 2);', code)
-
- code = re.sub(
- r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);',
- r'_assertPixelApprox(canvas, \1, \2, \3);', code)
-
- code = re.sub(r'@assert throws (\S+_ERR) (.*);',
- r'assert_throws_dom("\1", function() { \2; });', code)
-
- code = re.sub(r'@assert throws (\S+Error) (.*);',
- r'assert_throws_js(\1, function() { \2; });', code)
-
- code = re.sub(
- r'@assert (.*) === (.*);', lambda m:
- '_assertSame(%s, %s, "%s", "%s");' % (m.group(1), m.group(
- 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code)
-
- code = re.sub(
- r'@assert (.*) !== (.*);', lambda m:
- '_assertDifferent(%s, %s, "%s", "%s");' % (m.group(1), m.group(
- 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code)
-
- code = re.sub(
- r'@assert (.*) =~ (.*);', lambda m: 'assert_regexp_match(%s, %s);'
- % (m.group(1), m.group(2)), code)
-
- code = re.sub(
- r'@assert (.*);', lambda m: '_assert(%s, "%s");' % (m.group(
- 1), escapeJS(m.group(1))), code)
-
- code = re.sub(r' @moz-todo', '', code)
-
- code = re.sub(r'@moz-UniversalBrowserRead;', '', code)
-
- assert ('@' not in code)
-
- return code
-
used_tests = {}
- for i in range(len(tests)):
- test = tests[i]
-
+ for test in tests:
name = test['name']
print('\r(%s)' % name, ' ' * 32, '\t')
@@ -247,163 +347,8 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
print('Test %s is defined twice' % name)
used_tests[name] = 1
- mapped_name = map_name(name)
- if not mapped_name:
- if ISOFFSCREENCANVAS:
- continue
- mapped_name = name
-
- cat_total = ''
- for cat_part in [''] + name.split('.')[:-1]:
- cat_total += cat_part + '.'
- if not cat_total in category_names:
- category_names.append(cat_total)
- category_contents_all.setdefault(cat_total, []).append(name)
- category_contents_direct.setdefault(cat_total, []).append(name)
-
- if test.get('expected', '') == 'green' and re.search(
- r'@assert pixel .* 0,0,0,0;', test['code']):
- print('Probable incorrect pixel test in %s' % name)
-
- code = expand_test_code(test['code'])
-
- expectation_html = ''
- if 'expected' in test and test['expected'] is not None:
- expected = test['expected']
- expected_img = None
- if expected == 'green':
- expected_img = '/images/green-100x50.png'
- elif expected == 'clear':
- expected_img = '/images/clear-100x50.png'
- else:
- if ';' in expected:
- print('Found semicolon in %s' % name)
- expected = re.sub(
- r'^size (\d+) (\d+)',
- r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)'
- r'\ncr = cairo.Context(surface)', expected)
-
- if mapped_name.endswith('-manual'):
- png_name = mapped_name[:-len('-manual')]
- else:
- png_name = mapped_name
- expected += "\nsurface.write_to_png('%s/%s.png')\n" % (
- IMAGEOUTPUTDIR, png_name)
- eval(compile(expected, '' % test['name'], 'exec'), {},
- {'cairo': cairo})
- expected_img = '%s.png' % name
-
- if expected_img:
- expectation_html = (
- 'Expected output:
'
- ' ' % expected_img)
-
- canvas = test.get('canvas', 'width="100" height="50"')
-
- prev_test = tests[i - 1]['name'] if i != 0 else 'index'
- next_test = tests[i + 1]['name'] if i != len(tests) - 1 else 'index'
-
- name_wrapped = name.replace('.', '.')
-
- notes = '
%s' % test['notes'] if 'notes' in test else ''
-
- timeout = ('\n ' %
- test['timeout'] if 'timeout' in test else '')
-
- scripts = ''
- for s in test.get('scripts', []):
- scripts += '\n' % (s)
-
- variants = test.get('script-variants', {})
- script_variants = [(v, '\n' % (s))
- for (v, s) in variants.items()]
- if not script_variants:
- script_variants = [('', '')]
-
- images = ''
- for src in test.get('images', []):
- img_id = src.split('/')[-1]
- if '/' not in src:
- used_images[src] = 1
- src = '../images/%s' % src
- images += ' \n' % (src,
- img_id)
- for src in test.get('svgimages', []):
- img_id = src.split('/')[-1]
- if '/' not in src:
- used_images[src] = 1
- src = '../images/%s' % src
- images += (''
- ' \n' % (src, img_id))
- images = images.replace('../images/', '/images/')
-
- fonts = ''
- fonthack = ''
- for font in test.get('fonts', []):
- fonts += ('@font-face {\n font-family: %s;\n'
- ' src: url("/fonts/%s.ttf");\n}\n' % (font, font))
- # Browsers require the font to actually be used in the page.
- if test.get('fonthack', 1):
- fonthack += ('A \n' % font)
- if fonts:
- fonts = '\n' % fonts
-
- fallback = test.get('fallback',
- '
FAIL (fallback content)
')
-
- desc = test.get('desc', '')
- escaped_desc = simpleEscapeJS(desc)
-
- attributes = test.get('attributes', '')
- if attributes:
- context_args = "'2d', %s" % attributes.strip()
- attributes = ', ' + attributes.strip()
- else:
- context_args = "'2d'"
-
- for (variant, extra_script) in script_variants:
- name_variant = '' if not variant else '.' + variant
-
- template_params = {
- 'name': name + name_variant,
- 'name_wrapped': name_wrapped,
- 'backrefs': backref_html(name),
- 'mapped_name': mapped_name,
- 'desc': desc,
- 'escaped_desc': escaped_desc,
- 'prev': prev_test,
- 'next': next_test,
- 'notes': notes,
- 'images': images,
- 'fonts': fonts,
- 'fonthack': fonthack,
- 'timeout': timeout,
- 'canvas': canvas,
- 'expected': expectation_html,
- 'code': code,
- 'scripts': scripts + extra_script,
- 'fallback': fallback,
- 'attributes': attributes,
- 'context_args': context_args
- }
- if ISOFFSCREENCANVAS:
- f = codecs.open(
- '%s/%s%s.html' %
- (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
- f.write(templates['w3coffscreencanvas'] % template_params)
- timeout = ('// META: timeout=%s\n' %
- test['timeout'] if 'timeout' in test else '')
- template_params['timeout'] = timeout
- f = codecs.open(
- '%s/%s%s.worker.js' %
- (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
- f.write(templates['w3cworker'] % template_params)
- else:
- f = codecs.open(
- '%s/%s%s.html' %
- (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
- f.write(templates['w3ccanvas'] % template_params)
+ sub_dir = _get_test_sub_dir(name, name_to_sub_dir)
+ _generate_test(test, templates, sub_dir, TESTOUTPUTDIR, IMAGEOUTPUTDIR,
+ ISOFFSCREENCANVAS)
print()
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py
index 047dd6c802b..4c65d688c25 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py
@@ -28,10 +28,13 @@
#
# * Test the tests, add new ones to Git, remove deleted ones from Git, etc.
-from typing import List
+from typing import List, Mapping
import re
import codecs
+import collections
+import dataclasses
+import enum
import importlib
import os
import sys
@@ -56,74 +59,291 @@ class InvalidTestDefinitionError(Error):
"""Raised on invalid test definition."""
+def _simpleEscapeJS(string: str) -> str:
+ return string.replace('\\', '\\\\').replace('"', '\\"')
+
+
+def _escapeJS(string: str) -> str:
+ string = _simpleEscapeJS(string)
+ # Kind of an ugly hack, for nicer failure-message output.
+ string = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', string)
+ return string
+
+
+def _expand_nonfinite(method: str, argstr: str, tail: str) -> str:
+ """
+ >>> print _expand_nonfinite('f', '<0 a>, <0 b>', ';')
+ f(a, 0);
+ f(0, b);
+ f(a, b);
+ >>> print _expand_nonfinite('f', '<0 a>, <0 b c>, <0 d>', ';')
+ f(a, 0, 0);
+ f(0, b, 0);
+ f(0, c, 0);
+ f(0, 0, d);
+ f(a, b, 0);
+ f(a, b, d);
+ f(a, 0, d);
+ f(0, b, d);
+ """
+ # argstr is ", ..." (where usually
+ # 'invalid' is Infinity/-Infinity/NaN).
+ args = []
+ for arg in argstr.split(', '):
+ match = re.match('<(.*)>', arg)
+ if match is None:
+ raise InvalidTestDefinitionError(
+ f"Expected arg to match format '<(.*)>', but was: {arg}")
+ a = match.group(1)
+ args.append(a.split(' '))
+ calls = []
+ # Start with the valid argument list.
+ call = [args[j][0] for j in range(len(args))]
+ # For each argument alone, try setting it to all its invalid values:
+ for i in range(len(args)):
+ for a in args[i][1:]:
+ c2 = call[:]
+ c2[i] = a
+ calls.append(c2)
+ # For all combinations of >= 2 arguments, try setting them to their
+ # first invalid values. (Don't do all invalid values, because the
+ # number of combinations explodes.)
+ def f(c: List[str], start: int, depth: int) -> None:
+ for i in range(start, len(args)):
+ if len(args[i]) > 1:
+ a = args[i][1]
+ c2 = c[:]
+ c2[i] = a
+ if depth > 0:
+ calls.append(c2)
+ f(c2, i + 1, depth + 1)
+
+ f(call, 0, 0)
+
+ return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) for c in calls)
+
+
+def _get_test_sub_dir(name: str, name_to_sub_dir: Mapping[str, str]) -> str:
+ for prefix in sorted(name_to_sub_dir.keys(), key=len, reverse=True):
+ if name.startswith(prefix):
+ return name_to_sub_dir[prefix]
+ raise InvalidTestDefinitionError(
+ 'Test "%s" has no defined target directory mapping' % name)
+
+
+def _expand_test_code(code: str) -> str:
+ code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m:
+ _expand_nonfinite(m.group(1), m.group(2), m.group(3)),
+ code) # Must come before '@assert throws'.
+
+ code = re.sub(r'@assert pixel (\d+,\d+) == (\d+,\d+,\d+,\d+);',
+ r'_assertPixel(canvas, \1, \2);', code)
+
+ code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+);',
+ r'_assertPixelApprox(canvas, \1, \2, 2);', code)
+
+ code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);',
+ r'_assertPixelApprox(canvas, \1, \2, \3);', code)
+
+ code = re.sub(r'@assert throws (\S+_ERR) (.*);',
+ r'assert_throws_dom("\1", function() { \2; });', code)
+
+ code = re.sub(r'@assert throws (\S+Error) (.*);',
+ r'assert_throws_js(\1, function() { \2; });', code)
+
+ code = re.sub(
+ r'@assert (.*) === (.*);', lambda m: '_assertSame(%s, %s, "%s", "%s");'
+ % (m.group(1), m.group(2), _escapeJS(m.group(1)), _escapeJS(m.group(2))
+ ), code)
+
+ code = re.sub(
+ r'@assert (.*) !== (.*);', lambda m:
+ '_assertDifferent(%s, %s, "%s", "%s");' % (m.group(1), m.group(
+ 2), _escapeJS(m.group(1)), _escapeJS(m.group(2))), code)
+
+ code = re.sub(
+ r'@assert (.*) =~ (.*);', lambda m: 'assert_regexp_match(%s, %s);' % (
+ m.group(1), m.group(2)), code)
+
+ code = re.sub(
+ r'@assert (.*);', lambda m: '_assert(%s, "%s");' % (m.group(
+ 1), _escapeJS(m.group(1))), code)
+
+ code = re.sub(r' @moz-todo', '', code)
+
+ code = re.sub(r'@moz-UniversalBrowserRead;', '', code)
+
+ assert ('@' not in code)
+
+ return code
+
+
+class CanvasType(str, enum.Enum):
+ HTML_CANVAS = 'htmlcanvas'
+ OFFSCREEN_CANVAS = 'offscreencanvas'
+
+
+def _get_enabled_canvas_types(test: Mapping[str, str]) -> List[CanvasType]:
+ return [CanvasType(t.lower()) for t in test.get('canvasType', CanvasType)]
+
+
+@dataclasses.dataclass
+class TestConfig:
+ out_dir: str
+ image_out_dir: str
+ enabled: bool
+
+
+def _generate_test(test: Mapping[str, str], templates: Mapping[str, str],
+ sub_dir: str, html_canvas_cfg: TestConfig,
+ offscreen_canvas_cfg: TestConfig) -> None:
+ name = test['name']
+
+ if test.get('expected', '') == 'green' and re.search(
+ r'@assert pixel .* 0,0,0,0;', test['code']):
+ print('Probable incorrect pixel test in %s' % name)
+
+ code_canvas = _expand_test_code(test['code']).strip()
+
+ expectation_html = ''
+ if 'expected' in test and test['expected'] is not None:
+ expected = test['expected']
+ expected_img = None
+ if expected == 'green':
+ expected_img = '/images/green-100x50.png'
+ elif expected == 'clear':
+ expected_img = '/images/clear-100x50.png'
+ else:
+ if ';' in expected:
+ print('Found semicolon in %s' % name)
+ expected = re.sub(
+ r'^size (\d+) (\d+)',
+ r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)'
+ r'\ncr = cairo.Context(surface)', expected)
+
+ expected_canvas = (
+ expected + "\nsurface.write_to_png('%s.png')\n" %
+ os.path.join(html_canvas_cfg.image_out_dir, sub_dir, name))
+ eval(compile(expected_canvas, '' % name, 'exec'), {},
+ {'cairo': cairo})
+
+ expected_offscreencanvas = (
+ expected + "\nsurface.write_to_png('%s.png')\n" % os.path.join(
+ offscreen_canvas_cfg.image_out_dir, sub_dir, name))
+ eval(compile(expected_offscreencanvas, '' % name, 'exec'),
+ {}, {'cairo': cairo})
+
+ expected_img = '%s.png' % name
+
+ if expected_img:
+ expectation_html = (
+ 'Expected output:
'
+ ' ' % expected_img)
+
+ canvas = test.get('canvas', 'width="100" height="50"')
+
+ notes = '
%s' % test['notes'] if 'notes' in test else ''
+
+ timeout = ('\n ' %
+ test['timeout'] if 'timeout' in test else '')
+
+ scripts = ''
+ for s in test.get('scripts', []):
+ scripts += '\n' % (s)
+
+ images = ''
+ for src in test.get('images', []):
+ img_id = src.split('/')[-1]
+ if '/' not in src:
+ src = '../images/%s' % src
+ images += ' \n' % (src, img_id)
+ for src in test.get('svgimages', []):
+ img_id = src.split('/')[-1]
+ if '/' not in src:
+ src = '../images/%s' % src
+ images += (''
+ ' \n' % (src, img_id))
+ images = images.replace('../images/', '/images/')
+
+ fonts = ''
+ fonthack = ''
+ for font in test.get('fonts', []):
+ fonts += ('@font-face {\n font-family: %s;\n'
+ ' src: url("/fonts/%s.ttf");\n}\n' % (font, font))
+ # Browsers require the font to actually be used in the page.
+ if test.get('fonthack', 1):
+ fonthack += ('A \n' % font)
+ if fonts:
+ fonts = '\n' % fonts
+
+ fallback = test.get('fallback',
+ '
FAIL (fallback content)
')
+
+ desc = test.get('desc', '')
+ escaped_desc = _simpleEscapeJS(desc)
+
+ attributes = test.get('attributes', '')
+ if attributes:
+ context_args = "'2d', %s" % attributes.strip()
+ attributes = ', ' + attributes.strip()
+ else:
+ context_args = "'2d'"
+
+ template_params = {
+ 'name': name,
+ 'desc': desc,
+ 'escaped_desc': escaped_desc,
+ 'notes': notes,
+ 'images': images,
+ 'fonts': fonts,
+ 'fonthack': fonthack,
+ 'timeout': timeout,
+ 'canvas': canvas,
+ 'expected': expectation_html,
+ 'code': code_canvas,
+ 'scripts': scripts,
+ 'fallback': fallback,
+ 'attributes': attributes,
+ 'context_args': context_args
+ }
+
+ canvas_path = os.path.join(html_canvas_cfg.out_dir, sub_dir, name)
+ offscreen_path = os.path.join(offscreen_canvas_cfg.out_dir, sub_dir, name)
+ if 'manual' in test:
+ canvas_path += '-manual'
+ offscreen_path += '-manual'
+
+ # Create test cases for canvas and offscreencanvas.
+ if html_canvas_cfg.enabled:
+ f = codecs.open(f'{canvas_path}.html', 'w', 'utf-8')
+ f.write(templates['w3ccanvas'] % template_params)
+ if offscreen_canvas_cfg.enabled:
+ f_html = codecs.open(f'{offscreen_path}.html', 'w', 'utf-8')
+ f_worker = codecs.open(f'{offscreen_path}.worker.js', 'w', 'utf-8')
+ if ('then(t_pass, t_fail);' in code_canvas):
+ temp_offscreen = templates['w3coffscreencanvas'].replace(
+ 't.done();\n', '')
+ temp_worker = templates['w3cworker'].replace('t.done();\n', '')
+ f_html.write(temp_offscreen % template_params)
+ timeout = ('// META: timeout=%s\n' %
+ test['timeout'] if 'timeout' in test else '')
+ template_params['timeout'] = timeout
+ f_worker.write(temp_worker % template_params)
+ else:
+ f_html.write(templates['w3coffscreencanvas'] % template_params)
+ timeout = ('// META: timeout=%s\n' %
+ test['timeout'] if 'timeout' in test else '')
+ template_params['timeout'] = timeout
+ f_worker.write(templates['w3cworker'] % template_params)
+
+
def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
CANVASOUTPUTDIR = '../element'
CANVASIMAGEOUTPUTDIR = '../element'
OFFSCREENCANVASOUTPUTDIR = '../offscreen'
OFFSCREENCANVASIMAGEOUTPUTDIR = '../offscreen'
- MISCOUTPUTDIR = './output'
-
- def simpleEscapeJS(string: str) -> str:
- return string.replace('\\', '\\\\').replace('"', '\\"')
-
- def escapeJS(string: str) -> str:
- string = simpleEscapeJS(string)
- # Kind of an ugly hack, for nicer failure-message output.
- string = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', string)
- return string
-
- def expand_nonfinite(method: str, argstr: str, tail: str) -> str:
- """
- >>> print expand_nonfinite('f', '<0 a>, <0 b>', ';')
- f(a, 0);
- f(0, b);
- f(a, b);
- >>> print expand_nonfinite('f', '<0 a>, <0 b c>, <0 d>', ';')
- f(a, 0, 0);
- f(0, b, 0);
- f(0, c, 0);
- f(0, 0, d);
- f(a, b, 0);
- f(a, b, d);
- f(a, 0, d);
- f(0, b, d);
- """
- # argstr is ", ..." (where usually
- # 'invalid' is Infinity/-Infinity/NaN).
- args = []
- for arg in argstr.split(', '):
- match = re.match('<(.*)>', arg)
- if match is None:
- raise InvalidTestDefinitionError(
- f"Expected arg to match format '<(.*)>', but was: {arg}")
- a = match.group(1)
- args.append(a.split(' '))
- calls = []
- # Start with the valid argument list.
- call = [args[j][0] for j in range(len(args))]
- # For each argument alone, try setting it to all its invalid values:
- for i in range(len(args)):
- for a in args[i][1:]:
- c2 = call[:]
- c2[i] = a
- calls.append(c2)
- # For all combinations of >= 2 arguments, try setting them to their
- # first invalid values. (Don't do all invalid values, because the
- # number of combinations explodes.)
- def f(c: List[str], start: int, depth: int) -> None:
- for i in range(start, len(args)):
- if len(args[i]) > 1:
- a = args[i][1]
- c2 = c[:]
- c2[i] = a
- if depth > 0:
- calls.append(c2)
- f(c2, i + 1, depth + 1)
-
- f(call, 0, 0)
-
- return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail)
- for c in calls)
# Run with --test argument to run unit tests.
if len(sys.argv) > 1 and sys.argv[1] == '--test':
@@ -132,7 +352,7 @@ def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
sys.exit()
templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read())
- name_mapping = yaml.safe_load(open(NAME2DIRFILE, 'r').read())
+ name_to_sub_dir = yaml.safe_load(open(NAME2DIRFILE, 'r').read())
tests = []
test_yaml_directory = 'yaml-new'
@@ -150,296 +370,45 @@ def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
else:
tests.append(t)
- category_names = []
- category_contents_direct = {}
- category_contents_all = {}
-
- def backref_html(name: str) -> str:
- backrefs = []
- c = ''
- for p in name.split('.')[:-1]:
- c += '.' + p
- backrefs.append('%s .' % (c, p))
- backrefs.append(name.split('.')[-1])
- return ''.join(backrefs)
-
# Ensure the test output directories exist.
testdirs = [
CANVASOUTPUTDIR, OFFSCREENCANVASOUTPUTDIR, CANVASIMAGEOUTPUTDIR,
- OFFSCREENCANVASIMAGEOUTPUTDIR, MISCOUTPUTDIR
+ OFFSCREENCANVASIMAGEOUTPUTDIR
]
- for map_dir in set(name_mapping.values()):
- testdirs.append('%s/%s' % (CANVASOUTPUTDIR, map_dir))
- testdirs.append('%s/%s' % (OFFSCREENCANVASOUTPUTDIR, map_dir))
+ for sub_dir in set(name_to_sub_dir.values()):
+ testdirs.append('%s/%s' % (CANVASOUTPUTDIR, sub_dir))
+ testdirs.append('%s/%s' % (OFFSCREENCANVASOUTPUTDIR, sub_dir))
for d in testdirs:
try:
os.mkdir(d)
except FileExistsError:
pass # Ignore if it already exists,
- used_images = {}
-
- def map_name(name: str) -> str:
- mapped_name = None
- for mn in sorted(name_mapping.keys(), key=len, reverse=True):
- if name.startswith(mn):
- mapped_name = '%s/%s' % (name_mapping[mn], name)
- break
- if not mapped_name:
- print('LIKELY ERROR: %s has no defined target directory mapping' %
- name)
- return name
- if 'manual' in test:
- mapped_name += '-manual'
- return mapped_name
-
- def expand_test_code(code: str) -> str:
- code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m:
- expand_nonfinite(m.group(1), m.group(2), m.group(3)),
- code) # Must come before '@assert throws'.
-
- code = re.sub(r'@assert pixel (\d+,\d+) == (\d+,\d+,\d+,\d+);',
- r'_assertPixel(canvas, \1, \2);', code)
-
- code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+);',
- r'_assertPixelApprox(canvas, \1, \2, 2);', code)
-
- code = re.sub(
- r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);',
- r'_assertPixelApprox(canvas, \1, \2, \3);', code)
-
- code = re.sub(r'@assert throws (\S+_ERR) (.*);',
- r'assert_throws_dom("\1", function() { \2; });', code)
-
- code = re.sub(r'@assert throws (\S+Error) (.*);',
- r'assert_throws_js(\1, function() { \2; });', code)
-
- code = re.sub(
- r'@assert (.*) === (.*);', lambda m:
- '_assertSame(%s, %s, "%s", "%s");' % (m.group(1), m.group(
- 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code)
-
- code = re.sub(
- r'@assert (.*) !== (.*);', lambda m:
- '_assertDifferent(%s, %s, "%s", "%s");' % (m.group(1), m.group(
- 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code)
-
- code = re.sub(
- r'@assert (.*) =~ (.*);', lambda m: 'assert_regexp_match(%s, %s);'
- % (m.group(1), m.group(2)), code)
-
- code = re.sub(
- r'@assert (.*);', lambda m: '_assert(%s, "%s");' % (m.group(
- 1), escapeJS(m.group(1))), code)
-
- code = re.sub(r' @moz-todo', '', code)
-
- code = re.sub(r'@moz-UniversalBrowserRead;', '', code)
-
- assert ('@' not in code)
-
- return code
-
- used_tests = {}
- for i in range(len(tests)):
- test = tests[i]
- HTMLCanvas_test = True
- OffscreenCanvas_test = True
- if test.get('canvasType', []):
- HTMLCanvas_test = False
- OffscreenCanvas_test = False
- for canvas_type in test.get('canvasType'):
- if canvas_type.lower() == 'htmlcanvas':
- HTMLCanvas_test = True
- elif canvas_type.lower() == 'offscreencanvas':
- OffscreenCanvas_test = True
-
+ used_tests = collections.defaultdict(set)
+ for test in tests:
name = test['name']
print('\r(%s)' % name, ' ' * 32, '\t')
- if name in used_tests:
- print('Test %s is defined twice' % name)
- used_tests[name] = 1
+ enabled_canvas_types = _get_enabled_canvas_types(test)
- mapped_name = map_name(name)
+ already_tested = used_tests[name].intersection(enabled_canvas_types)
+ if already_tested:
+ raise InvalidTestDefinitionError(
+ f'Test {name} is defined twice for types {already_tested}')
+ used_tests[name].update(enabled_canvas_types)
- cat_total = ''
- for cat_part in [''] + name.split('.')[:-1]:
- cat_total += cat_part + '.'
- if not cat_total in category_names:
- category_names.append(cat_total)
- category_contents_all.setdefault(cat_total, []).append(name)
- category_contents_direct.setdefault(cat_total, []).append(name)
+ sub_dir = _get_test_sub_dir(name, name_to_sub_dir)
+ _generate_test(
+ test,
+ templates,
+ sub_dir,
+ html_canvas_cfg=TestConfig(
+ out_dir=CANVASOUTPUTDIR,
+ image_out_dir=CANVASIMAGEOUTPUTDIR,
+ enabled=CanvasType.HTML_CANVAS in enabled_canvas_types),
+ offscreen_canvas_cfg=TestConfig(
+ out_dir=OFFSCREENCANVASOUTPUTDIR,
+ image_out_dir=OFFSCREENCANVASIMAGEOUTPUTDIR,
+ enabled=CanvasType.OFFSCREEN_CANVAS in enabled_canvas_types))
- if test.get('expected', '') == 'green' and re.search(
- r'@assert pixel .* 0,0,0,0;', test['code']):
- print('Probable incorrect pixel test in %s' % name)
-
- code_canvas = expand_test_code(test['code']).strip()
-
- expectation_html = ''
- if 'expected' in test and test['expected'] is not None:
- expected = test['expected']
- expected_img = None
- if expected == 'green':
- expected_img = '/images/green-100x50.png'
- elif expected == 'clear':
- expected_img = '/images/clear-100x50.png'
- else:
- if ';' in expected:
- print('Found semicolon in %s' % name)
- expected = re.sub(
- r'^size (\d+) (\d+)',
- r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)'
- r'\ncr = cairo.Context(surface)', expected)
-
- if mapped_name.endswith('-manual'):
- png_name = mapped_name[:-len('-manual')]
- else:
- png_name = mapped_name
- expected_canvas = (expected +
- "\nsurface.write_to_png('%s/%s.png')\n" %
- (CANVASIMAGEOUTPUTDIR, png_name))
- eval(
- compile(expected_canvas, '' % test['name'],
- 'exec'), {}, {'cairo': cairo})
-
- expected_offscreencanvas = (
- expected + "\nsurface.write_to_png('%s/%s.png')\n" %
- (OFFSCREENCANVASIMAGEOUTPUTDIR, png_name))
- eval(
- compile(expected_offscreencanvas,
- '' % test['name'], 'exec'), {},
- {'cairo': cairo})
-
- expected_img = '%s.png' % name
-
- if expected_img:
- expectation_html = (
- 'Expected output:
'
- ' ' % expected_img)
-
- canvas = test.get('canvas', 'width="100" height="50"')
-
- prev_test = tests[i - 1]['name'] if i != 0 else 'index'
- next_test = tests[i + 1]['name'] if i != len(tests) - 1 else 'index'
-
- name_wrapped = name.replace('.', '.')
-
- notes = '
%s' % test['notes'] if 'notes' in test else ''
-
- timeout = ('\n ' %
- test['timeout'] if 'timeout' in test else '')
-
- scripts = ''
- for s in test.get('scripts', []):
- scripts += '\n' % (s)
-
- variants = test.get('script-variants', {})
- script_variants = [(v, '\n' % (s))
- for (v, s) in variants.items()]
- if not script_variants:
- script_variants = [('', '')]
-
- images = ''
- for src in test.get('images', []):
- img_id = src.split('/')[-1]
- if '/' not in src:
- used_images[src] = 1
- src = '../images/%s' % src
- images += ' \n' % (src,
- img_id)
- for src in test.get('svgimages', []):
- img_id = src.split('/')[-1]
- if '/' not in src:
- used_images[src] = 1
- src = '../images/%s' % src
- images += (''
- ' \n' % (src, img_id))
- images = images.replace('../images/', '/images/')
-
- fonts = ''
- fonthack = ''
- for font in test.get('fonts', []):
- fonts += ('@font-face {\n font-family: %s;\n'
- ' src: url("/fonts/%s.ttf");\n}\n' % (font, font))
- # Browsers require the font to actually be used in the page.
- if test.get('fonthack', 1):
- fonthack += ('A \n' % font)
- if fonts:
- fonts = '\n' % fonts
-
- fallback = test.get('fallback',
- '
FAIL (fallback content)
')
-
- desc = test.get('desc', '')
- escaped_desc = simpleEscapeJS(desc)
-
- attributes = test.get('attributes', '')
- if attributes:
- context_args = "'2d', %s" % attributes.strip()
- attributes = ', ' + attributes.strip()
- else:
- context_args = "'2d'"
-
- for (variant, extra_script) in script_variants:
- name_variant = '' if not variant else '.' + variant
-
- template_params = {
- 'name': name + name_variant,
- 'name_wrapped': name_wrapped,
- 'backrefs': backref_html(name),
- 'mapped_name': mapped_name,
- 'desc': desc,
- 'escaped_desc': escaped_desc,
- 'prev': prev_test,
- 'next': next_test,
- 'notes': notes,
- 'images': images,
- 'fonts': fonts,
- 'fonthack': fonthack,
- 'timeout': timeout,
- 'canvas': canvas,
- 'expected': expectation_html,
- 'code': code_canvas,
- 'scripts': scripts + extra_script,
- 'fallback': fallback,
- 'attributes': attributes,
- 'context_args': context_args
- }
-
- # Create test cases for canvas and offscreencanvas.
- if HTMLCanvas_test:
- f = codecs.open(
- '%s/%s%s.html' %
- (CANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
- f.write(templates['w3ccanvas'] % template_params)
- if OffscreenCanvas_test:
- f_html = codecs.open(
- '%s/%s%s.html' %
- (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w',
- 'utf-8')
- f_worker = codecs.open(
- '%s/%s%s.worker.js' %
- (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w',
- 'utf-8')
- if ('then(t_pass, t_fail);' in code_canvas):
- temp_offscreen = templates['w3coffscreencanvas'].replace(
- 't.done();\n', '')
- temp_worker = templates['w3cworker'].replace(
- 't.done();\n', '')
- f_html.write(temp_offscreen % template_params)
- timeout = ('// META: timeout=%s\n' %
- test['timeout'] if 'timeout' in test else '')
- template_params['timeout'] = timeout
- f_worker.write(temp_worker % template_params)
- else:
- f_html.write(templates['w3coffscreencanvas'] %
- template_params)
- timeout = ('// META: timeout=%s\n' %
- test['timeout'] if 'timeout' in test else '')
- template_params['timeout'] = timeout
- f_worker.write(templates['w3cworker'] % template_params)
print()
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/name2dir-canvas.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/name2dir-canvas.yaml
index f1ebe4b8a9d..c3818ebc76e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/name2dir-canvas.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/name2dir-canvas.yaml
@@ -17,7 +17,6 @@
2d.gradient: "fill-and-stroke-styles"
2d.pattern: "fill-and-stroke-styles"
2d.strokeStyle: "fill-and-stroke-styles"
-2d.line: "line-styles"
2d.path: "path-objects"
2d.imageData: "pixel-manipulation"
2d.reset: "reset"
@@ -52,4 +51,4 @@ type: "../../../html/semantics/embedded-content/
2d.offscreencanva.getcontext: "the-offscreen-canvas"
2d.offscreencanva.context: "the-offscreen-canvas"
2d.offscreencanva.initial: "the-offscreen-canvas"
-2d.offscreencanva.size: "the-offscreen-canvas"
\ No newline at end of file
+2d.offscreencanva.size: "the-offscreen-canvas"
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/name2dir-offscreen.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/name2dir-offscreen.yaml
index 4ac261fe325..807b09507b1 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/name2dir-offscreen.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/name2dir-offscreen.yaml
@@ -13,7 +13,6 @@
2d.strokeRect: "drawing-rectangles-to-the-canvas"
2d.drawImage: "drawing-images-to-the-canvas"
2d.imageData: "pixel-manipulation"
-2d.line: "line-styles"
2d.path: "path-objects"
2d.text: "text"
2d.coordinatespace: "conformance-requirements"
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
index 83de88113f2..e263bf0253d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
@@ -424,6 +424,7 @@
- name: 2d.drawImage.zerocanvas
desc: drawImage with zero-sized canvas as the source shoud throw exception
+ canvasType: ['HTMLCanvas']
code: |
var canvas2 = document.createElement('canvas');
canvas2.width = 0;
@@ -523,6 +524,7 @@
expected: green
- name: 2d.drawImage.clip
+ canvasType: ['HTMLCanvas']
images:
- red.png
code: |
@@ -1330,4 +1332,3 @@
@assert pixel 50,25 == 0,255,0,255;
}, t_fail);
}).then(t_pass, t_fail);
-
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/line-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml
similarity index 100%
rename from tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/line-styles.yaml
rename to tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/line-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/line-styles.yaml
deleted file mode 100644
index 984949827db..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/line-styles.yaml
+++ /dev/null
@@ -1,773 +0,0 @@
-- name: 2d.line.defaults
- code: |
- @assert ctx.lineWidth === 1;
- @assert ctx.lineCap === 'butt';
- @assert ctx.lineJoin === 'miter';
- @assert ctx.miterLimit === 10;
- t.done();
-
-- name: 2d.line.width.basic
- desc: lineWidth determines the width of line strokes
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 20;
- // Draw a green line over a red box, to check the line is not too small
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(15, 15, 20, 20);
- ctx.beginPath();
- ctx.moveTo(25, 15);
- ctx.lineTo(25, 35);
- ctx.stroke();
- // Draw a green box over a red line, to check the line is not too large
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(75, 15);
- ctx.lineTo(75, 35);
- ctx.stroke();
- ctx.fillRect(65, 15, 20, 20);
- @assert pixel 14,25 == 0,255,0,255;
- @assert pixel 15,25 == 0,255,0,255;
- @assert pixel 16,25 == 0,255,0,255;
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 34,25 == 0,255,0,255;
- @assert pixel 35,25 == 0,255,0,255;
- @assert pixel 36,25 == 0,255,0,255;
- @assert pixel 64,25 == 0,255,0,255;
- @assert pixel 65,25 == 0,255,0,255;
- @assert pixel 66,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- @assert pixel 84,25 == 0,255,0,255;
- @assert pixel 85,25 == 0,255,0,255;
- @assert pixel 86,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.width.transformed
- desc: Line stroke widths are affected by scale transformations
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 4;
- // Draw a green line over a red box, to check the line is not too small
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(15, 15, 20, 20);
- ctx.save();
- ctx.scale(5, 1);
- ctx.beginPath();
- ctx.moveTo(5, 15);
- ctx.lineTo(5, 35);
- ctx.stroke();
- ctx.restore();
- // Draw a green box over a red line, to check the line is not too large
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.save();
- ctx.scale(-5, 1);
- ctx.beginPath();
- ctx.moveTo(-15, 15);
- ctx.lineTo(-15, 35);
- ctx.stroke();
- ctx.restore();
- ctx.fillRect(65, 15, 20, 20);
- @assert pixel 14,25 == 0,255,0,255;
- @assert pixel 15,25 == 0,255,0,255;
- @assert pixel 16,25 == 0,255,0,255;
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 34,25 == 0,255,0,255;
- @assert pixel 35,25 == 0,255,0,255;
- @assert pixel 36,25 == 0,255,0,255;
- @assert pixel 64,25 == 0,255,0,255;
- @assert pixel 65,25 == 0,255,0,255;
- @assert pixel 66,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- @assert pixel 84,25 == 0,255,0,255;
- @assert pixel 85,25 == 0,255,0,255;
- @assert pixel 86,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.width.scaledefault
- desc: Default lineWidth strokes are affected by scale transformations
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.scale(50, 50);
- ctx.strokeStyle = '#0f0';
- ctx.moveTo(0, 0.5);
- ctx.lineTo(2, 0.5);
- ctx.stroke();
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- @assert pixel 50,5 == 0,255,0,255;
- @assert pixel 50,45 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.width.valid
- desc: Setting lineWidth to valid values works
- code: |
- ctx.lineWidth = 1.5;
- @assert ctx.lineWidth === 1.5;
- ctx.lineWidth = "1e1";
- @assert ctx.lineWidth === 10;
- ctx.lineWidth = 1/1024;
- @assert ctx.lineWidth === 1/1024;
- ctx.lineWidth = 1000;
- @assert ctx.lineWidth === 1000;
- t.done();
-
-- name: 2d.line.width.invalid
- desc: Setting lineWidth to invalid values is ignored
- code: |
- ctx.lineWidth = 1.5;
- @assert ctx.lineWidth === 1.5;
- ctx.lineWidth = 1.5;
- ctx.lineWidth = 0;
- @assert ctx.lineWidth === 1.5;
- ctx.lineWidth = 1.5;
- ctx.lineWidth = -1;
- @assert ctx.lineWidth === 1.5;
- ctx.lineWidth = 1.5;
- ctx.lineWidth = Infinity;
- @assert ctx.lineWidth === 1.5;
- ctx.lineWidth = 1.5;
- ctx.lineWidth = -Infinity;
- @assert ctx.lineWidth === 1.5;
- ctx.lineWidth = 1.5;
- ctx.lineWidth = NaN;
- @assert ctx.lineWidth === 1.5;
- t.done();
-
-- name: 2d.line.cap.butt
- desc: lineCap 'butt' is rendered correctly
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineCap = 'butt';
- ctx.lineWidth = 20;
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(15, 15, 20, 20);
- ctx.beginPath();
- ctx.moveTo(25, 15);
- ctx.lineTo(25, 35);
- ctx.stroke();
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(75, 15);
- ctx.lineTo(75, 35);
- ctx.stroke();
- ctx.fillRect(65, 15, 20, 20);
- @assert pixel 25,14 == 0,255,0,255;
- @assert pixel 25,15 == 0,255,0,255;
- @assert pixel 25,16 == 0,255,0,255;
- @assert pixel 25,34 == 0,255,0,255;
- @assert pixel 25,35 == 0,255,0,255;
- @assert pixel 25,36 == 0,255,0,255;
- @assert pixel 75,14 == 0,255,0,255;
- @assert pixel 75,15 == 0,255,0,255;
- @assert pixel 75,16 == 0,255,0,255;
- @assert pixel 75,34 == 0,255,0,255;
- @assert pixel 75,35 == 0,255,0,255;
- @assert pixel 75,36 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.cap.round
- desc: lineCap 'round' is rendered correctly
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var tol = 1; // tolerance to avoid antialiasing artifacts
- ctx.lineCap = 'round';
- ctx.lineWidth = 20;
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.beginPath();
- ctx.moveTo(35-tol, 15);
- ctx.arc(25, 15, 10-tol, 0, Math.PI, true);
- ctx.arc(25, 35, 10-tol, Math.PI, 0, true);
- ctx.fill();
- ctx.beginPath();
- ctx.moveTo(25, 15);
- ctx.lineTo(25, 35);
- ctx.stroke();
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(75, 15);
- ctx.lineTo(75, 35);
- ctx.stroke();
- ctx.beginPath();
- ctx.moveTo(85+tol, 15);
- ctx.arc(75, 15, 10+tol, 0, Math.PI, true);
- ctx.arc(75, 35, 10+tol, Math.PI, 0, true);
- ctx.fill();
- @assert pixel 17,6 == 0,255,0,255;
- @assert pixel 25,6 == 0,255,0,255;
- @assert pixel 32,6 == 0,255,0,255;
- @assert pixel 17,43 == 0,255,0,255;
- @assert pixel 25,43 == 0,255,0,255;
- @assert pixel 32,43 == 0,255,0,255;
- @assert pixel 67,6 == 0,255,0,255;
- @assert pixel 75,6 == 0,255,0,255;
- @assert pixel 82,6 == 0,255,0,255;
- @assert pixel 67,43 == 0,255,0,255;
- @assert pixel 75,43 == 0,255,0,255;
- @assert pixel 82,43 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.cap.square
- desc: lineCap 'square' is rendered correctly
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineCap = 'square';
- ctx.lineWidth = 20;
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(15, 5, 20, 40);
- ctx.beginPath();
- ctx.moveTo(25, 15);
- ctx.lineTo(25, 35);
- ctx.stroke();
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(75, 15);
- ctx.lineTo(75, 35);
- ctx.stroke();
- ctx.fillRect(65, 5, 20, 40);
- @assert pixel 25,4 == 0,255,0,255;
- @assert pixel 25,5 == 0,255,0,255;
- @assert pixel 25,6 == 0,255,0,255;
- @assert pixel 25,44 == 0,255,0,255;
- @assert pixel 25,45 == 0,255,0,255;
- @assert pixel 25,46 == 0,255,0,255;
- @assert pixel 75,4 == 0,255,0,255;
- @assert pixel 75,5 == 0,255,0,255;
- @assert pixel 75,6 == 0,255,0,255;
- @assert pixel 75,44 == 0,255,0,255;
- @assert pixel 75,45 == 0,255,0,255;
- @assert pixel 75,46 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.cap.open
- desc: Line caps are drawn at the corners of an unclosed rectangle
- code: |
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineJoin = 'bevel';
- ctx.lineCap = 'square';
- ctx.lineWidth = 400;
- ctx.beginPath();
- ctx.moveTo(200, 200);
- ctx.lineTo(200, 1000);
- ctx.lineTo(1000, 1000);
- ctx.lineTo(1000, 200);
- ctx.lineTo(200, 200);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.cap.closed
- desc: Line caps are not drawn at the corners of an unclosed rectangle
- code: |
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineJoin = 'bevel';
- ctx.lineCap = 'square';
- ctx.lineWidth = 400;
- ctx.beginPath();
- ctx.moveTo(200, 200);
- ctx.lineTo(200, 1000);
- ctx.lineTo(1000, 1000);
- ctx.lineTo(1000, 200);
- ctx.closePath();
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.cap.valid
- desc: Setting lineCap to valid values works
- code: |
- ctx.lineCap = 'butt'
- @assert ctx.lineCap === 'butt';
- ctx.lineCap = 'round';
- @assert ctx.lineCap === 'round';
- ctx.lineCap = 'square';
- @assert ctx.lineCap === 'square';
- t.done();
-
-- name: 2d.line.cap.invalid
- desc: Setting lineCap to invalid values is ignored
- code: |
- ctx.lineCap = 'butt'
- @assert ctx.lineCap === 'butt';
- ctx.lineCap = 'butt';
- ctx.lineCap = 'invalid';
- @assert ctx.lineCap === 'butt';
- ctx.lineCap = 'butt';
- ctx.lineCap = 'ROUND';
- @assert ctx.lineCap === 'butt';
- ctx.lineCap = 'butt';
- ctx.lineCap = 'round\0';
- @assert ctx.lineCap === 'butt';
- ctx.lineCap = 'butt';
- ctx.lineCap = 'round ';
- @assert ctx.lineCap === 'butt';
- ctx.lineCap = 'butt';
- ctx.lineCap = "";
- @assert ctx.lineCap === 'butt';
- ctx.lineCap = 'butt';
- ctx.lineCap = 'bevel';
- @assert ctx.lineCap === 'butt';
- t.done();
-
-- name: 2d.line.join.bevel
- desc: lineJoin 'bevel' is rendered correctly
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var tol = 1; // tolerance to avoid antialiasing artifacts
- ctx.lineJoin = 'bevel';
- ctx.lineWidth = 20;
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(10, 10, 20, 20);
- ctx.fillRect(20, 20, 20, 20);
- ctx.beginPath();
- ctx.moveTo(30, 20);
- ctx.lineTo(40-tol, 20);
- ctx.lineTo(30, 10+tol);
- ctx.fill();
- ctx.beginPath();
- ctx.moveTo(10, 20);
- ctx.lineTo(30, 20);
- ctx.lineTo(30, 40);
- ctx.stroke();
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(60, 20);
- ctx.lineTo(80, 20);
- ctx.lineTo(80, 40);
- ctx.stroke();
- ctx.fillRect(60, 10, 20, 20);
- ctx.fillRect(70, 20, 20, 20);
- ctx.beginPath();
- ctx.moveTo(80, 20);
- ctx.lineTo(90+tol, 20);
- ctx.lineTo(80, 10-tol);
- ctx.fill();
- @assert pixel 34,16 == 0,255,0,255;
- @assert pixel 34,15 == 0,255,0,255;
- @assert pixel 35,15 == 0,255,0,255;
- @assert pixel 36,15 == 0,255,0,255;
- @assert pixel 36,14 == 0,255,0,255;
- @assert pixel 84,16 == 0,255,0,255;
- @assert pixel 84,15 == 0,255,0,255;
- @assert pixel 85,15 == 0,255,0,255;
- @assert pixel 86,15 == 0,255,0,255;
- @assert pixel 86,14 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.join.round
- desc: lineJoin 'round' is rendered correctly
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var tol = 1; // tolerance to avoid antialiasing artifacts
- ctx.lineJoin = 'round';
- ctx.lineWidth = 20;
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(10, 10, 20, 20);
- ctx.fillRect(20, 20, 20, 20);
- ctx.beginPath();
- ctx.moveTo(30, 20);
- ctx.arc(30, 20, 10-tol, 0, 2*Math.PI, true);
- ctx.fill();
- ctx.beginPath();
- ctx.moveTo(10, 20);
- ctx.lineTo(30, 20);
- ctx.lineTo(30, 40);
- ctx.stroke();
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(60, 20);
- ctx.lineTo(80, 20);
- ctx.lineTo(80, 40);
- ctx.stroke();
- ctx.fillRect(60, 10, 20, 20);
- ctx.fillRect(70, 20, 20, 20);
- ctx.beginPath();
- ctx.moveTo(80, 20);
- ctx.arc(80, 20, 10+tol, 0, 2*Math.PI, true);
- ctx.fill();
- @assert pixel 36,14 == 0,255,0,255;
- @assert pixel 36,13 == 0,255,0,255;
- @assert pixel 37,13 == 0,255,0,255;
- @assert pixel 38,13 == 0,255,0,255;
- @assert pixel 38,12 == 0,255,0,255;
- @assert pixel 86,14 == 0,255,0,255;
- @assert pixel 86,13 == 0,255,0,255;
- @assert pixel 87,13 == 0,255,0,255;
- @assert pixel 88,13 == 0,255,0,255;
- @assert pixel 88,12 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.join.miter
- desc: lineJoin 'miter' is rendered correctly
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineJoin = 'miter';
- ctx.lineWidth = 20;
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(10, 10, 30, 20);
- ctx.fillRect(20, 10, 20, 30);
- ctx.beginPath();
- ctx.moveTo(10, 20);
- ctx.lineTo(30, 20);
- ctx.lineTo(30, 40);
- ctx.stroke();
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(60, 20);
- ctx.lineTo(80, 20);
- ctx.lineTo(80, 40);
- ctx.stroke();
- ctx.fillRect(60, 10, 30, 20);
- ctx.fillRect(70, 10, 20, 30);
- @assert pixel 38,12 == 0,255,0,255;
- @assert pixel 39,11 == 0,255,0,255;
- @assert pixel 40,10 == 0,255,0,255;
- @assert pixel 41,9 == 0,255,0,255;
- @assert pixel 42,8 == 0,255,0,255;
- @assert pixel 88,12 == 0,255,0,255;
- @assert pixel 89,11 == 0,255,0,255;
- @assert pixel 90,10 == 0,255,0,255;
- @assert pixel 91,9 == 0,255,0,255;
- @assert pixel 92,8 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.join.open
- desc: Line joins are not drawn at the corner of an unclosed rectangle
- code: |
- ctx.fillStyle = '#0f0';
- ctx.strokeStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineJoin = 'miter';
- ctx.lineWidth = 200;
- ctx.beginPath();
- ctx.moveTo(100, 50);
- ctx.lineTo(100, 1000);
- ctx.lineTo(1000, 1000);
- ctx.lineTo(1000, 50);
- ctx.lineTo(100, 50);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.join.closed
- desc: Line joins are drawn at the corner of a closed rectangle
- code: |
- ctx.fillStyle = '#f00';
- ctx.strokeStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineJoin = 'miter';
- ctx.lineWidth = 200;
- ctx.beginPath();
- ctx.moveTo(100, 50);
- ctx.lineTo(100, 1000);
- ctx.lineTo(1000, 1000);
- ctx.lineTo(1000, 50);
- ctx.closePath();
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.join.parallel
- desc: Line joins are drawn at 180-degree joins
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.strokeStyle = '#0f0';
- ctx.lineWidth = 300;
- ctx.lineJoin = 'round';
- ctx.beginPath();
- ctx.moveTo(-100, 25);
- ctx.lineTo(0, 25);
- ctx.lineTo(-100, 25);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.join.valid
- desc: Setting lineJoin to valid values works
- code: |
- ctx.lineJoin = 'bevel'
- @assert ctx.lineJoin === 'bevel';
- ctx.lineJoin = 'round';
- @assert ctx.lineJoin === 'round';
- ctx.lineJoin = 'miter';
- @assert ctx.lineJoin === 'miter';
- t.done();
-
-- name: 2d.line.join.invalid
- desc: Setting lineJoin to invalid values is ignored
- code: |
- ctx.lineJoin = 'bevel'
- @assert ctx.lineJoin === 'bevel';
- ctx.lineJoin = 'bevel';
- ctx.lineJoin = 'invalid';
- @assert ctx.lineJoin === 'bevel';
- ctx.lineJoin = 'bevel';
- ctx.lineJoin = 'ROUND';
- @assert ctx.lineJoin === 'bevel';
- ctx.lineJoin = 'bevel';
- ctx.lineJoin = 'round\0';
- @assert ctx.lineJoin === 'bevel';
- ctx.lineJoin = 'bevel';
- ctx.lineJoin = 'round ';
- @assert ctx.lineJoin === 'bevel';
- ctx.lineJoin = 'bevel';
- ctx.lineJoin = "";
- @assert ctx.lineJoin === 'bevel';
- ctx.lineJoin = 'bevel';
- ctx.lineJoin = 'butt';
- @assert ctx.lineJoin === 'bevel';
- t.done();
-
-- name: 2d.line.miter.exceeded
- desc: Miter joins are not drawn when the miter limit is exceeded
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 400;
- ctx.lineJoin = 'miter';
- ctx.strokeStyle = '#f00';
- ctx.miterLimit = 1.414;
- ctx.beginPath();
- ctx.moveTo(200, 1000);
- ctx.lineTo(200, 200);
- ctx.lineTo(1000, 201); // slightly non-right-angle to avoid being a special case
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.miter.acute
- desc: Miter joins are drawn correctly with acute angles
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 200;
- ctx.lineJoin = 'miter';
- ctx.strokeStyle = '#0f0';
- ctx.miterLimit = 2.614;
- ctx.beginPath();
- ctx.moveTo(100, 1000);
- ctx.lineTo(100, 100);
- ctx.lineTo(1000, 1000);
- ctx.stroke();
- ctx.strokeStyle = '#f00';
- ctx.miterLimit = 2.613;
- ctx.beginPath();
- ctx.moveTo(100, 1000);
- ctx.lineTo(100, 100);
- ctx.lineTo(1000, 1000);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.miter.obtuse
- desc: Miter joins are drawn correctly with obtuse angles
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 1600;
- ctx.lineJoin = 'miter';
- ctx.strokeStyle = '#0f0';
- ctx.miterLimit = 1.083;
- ctx.beginPath();
- ctx.moveTo(800, 10000);
- ctx.lineTo(800, 300);
- ctx.lineTo(10000, -8900);
- ctx.stroke();
- ctx.strokeStyle = '#f00';
- ctx.miterLimit = 1.082;
- ctx.beginPath();
- ctx.moveTo(800, 10000);
- ctx.lineTo(800, 300);
- ctx.lineTo(10000, -8900);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.miter.rightangle
- desc: Miter joins are not drawn when the miter limit is exceeded, on exact right
- angles
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 400;
- ctx.lineJoin = 'miter';
- ctx.strokeStyle = '#f00';
- ctx.miterLimit = 1.414;
- ctx.beginPath();
- ctx.moveTo(200, 1000);
- ctx.lineTo(200, 200);
- ctx.lineTo(1000, 200);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.miter.lineedge
- desc: Miter joins are not drawn when the miter limit is exceeded at the corners
- of a zero-height rectangle
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 200;
- ctx.lineJoin = 'miter';
- ctx.strokeStyle = '#f00';
- ctx.miterLimit = 1.414;
- ctx.beginPath();
- ctx.strokeRect(100, 25, 200, 0);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.miter.within
- desc: Miter joins are drawn when the miter limit is not quite exceeded
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 400;
- ctx.lineJoin = 'miter';
- ctx.strokeStyle = '#0f0';
- ctx.miterLimit = 1.416;
- ctx.beginPath();
- ctx.moveTo(200, 1000);
- ctx.lineTo(200, 200);
- ctx.lineTo(1000, 201);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.miter.valid
- desc: Setting miterLimit to valid values works
- code: |
- ctx.miterLimit = 1.5;
- @assert ctx.miterLimit === 1.5;
- ctx.miterLimit = "1e1";
- @assert ctx.miterLimit === 10;
- ctx.miterLimit = 1/1024;
- @assert ctx.miterLimit === 1/1024;
- ctx.miterLimit = 1000;
- @assert ctx.miterLimit === 1000;
- t.done();
-
-- name: 2d.line.miter.invalid
- desc: Setting miterLimit to invalid values is ignored
- code: |
- ctx.miterLimit = 1.5;
- @assert ctx.miterLimit === 1.5;
- ctx.miterLimit = 1.5;
- ctx.miterLimit = 0;
- @assert ctx.miterLimit === 1.5;
- ctx.miterLimit = 1.5;
- ctx.miterLimit = -1;
- @assert ctx.miterLimit === 1.5;
- ctx.miterLimit = 1.5;
- ctx.miterLimit = Infinity;
- @assert ctx.miterLimit === 1.5;
- ctx.miterLimit = 1.5;
- ctx.miterLimit = -Infinity;
- @assert ctx.miterLimit === 1.5;
- ctx.miterLimit = 1.5;
- ctx.miterLimit = NaN;
- @assert ctx.miterLimit === 1.5;
- t.done();
-
-- name: 2d.line.cross
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 200;
- ctx.lineJoin = 'bevel';
- ctx.strokeStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(110, 50);
- ctx.lineTo(110, 60);
- ctx.lineTo(100, 60);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.line.union
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.lineWidth = 100;
- ctx.lineCap = 'round';
- ctx.strokeStyle = '#0f0';
- ctx.beginPath();
- ctx.moveTo(0, 24);
- ctx.lineTo(100, 25);
- ctx.lineTo(0, 26);
- ctx.closePath();
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 25,1 == 0,255,0,255;
- @assert pixel 48,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 25,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- t.done();
-
diff --git a/tests/wpt/web-platform-tests/html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.js b/tests/wpt/web-platform-tests/html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.js
new file mode 100644
index 00000000000..897647a45e1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/infrastructure/urls/terminology-0/document-base-url-changes-after-nav-about-srcdoc.https.window.js
@@ -0,0 +1,83 @@
+// META: script=/common/get-host-info.sub.js
+//
+// A test to verify that, when a srcdoc frame is created when it's parent
+// has a non-default base URI, and is later restored from history, it has
+// the same baseURI it started with, even if the parent has changed its own
+// baseURI in the meantime.
+// The parent always communicates with the child via postMessage since some
+// of the test cases include the child being sandboxed.
+
+async function sendMessage(frame, msg) {
+ const result = new Promise(r => onmessage = e => r(e.data));
+ frame.postMessage(msg, "*");
+ return await result;
+}
+
+const runTest = (description, sandbox_flags) => {
+ promise_test(async test => {
+ const original_parent_baseURI = document.baseURI;
+ // Create a URL for the child frame to navigate to.
+ const nav_target =
+ (new URL('./resources/send-back-base-url.html', location.href)).href;
+
+ // Change parent to a non-default baseURI.
+ const base_element = document.createElement("base");
+ base_element.href = get_host_info().REMOTE_ORIGIN;
+ document.head.appendChild(base_element);
+ assert_not_equals(document.baseURI, original_parent_baseURI,
+ "parent baseURI failed to change.");
+ const non_default_parent_baseURI = document.baseURI;
+
+ // Create child and load a srcdoc frame.
+ const iframe = document.createElement("iframe");
+ if (sandbox_flags !== null)
+ iframe.sandbox = sandbox_flags;
+ iframe.srcdoc = `
+
+
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-meta-element/http-equiv-and-name.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-meta-element/http-equiv-and-name.html
new file mode 100644
index 00000000000..144217df384
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-meta-element/http-equiv-and-name.html
@@ -0,0 +1,18 @@
+
+Setting both http-equiv and name attributes on a meta element
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/valid-invalid-fieldset-disconnected.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/valid-invalid-fieldset-disconnected.html
new file mode 100644
index 00000000000..6ad329438a8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/valid-invalid-fieldset-disconnected.html
@@ -0,0 +1,57 @@
+
+
+Selector: pseudo-classes (:valid, :invalid) on disconnected fieldset element
+
+
+
+
+
+
+
+
+
+
+ foo
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/lint.ignore b/tests/wpt/web-platform-tests/lint.ignore
index 011f05c607e..f6776a66174 100644
--- a/tests/wpt/web-platform-tests/lint.ignore
+++ b/tests/wpt/web-platform-tests/lint.ignore
@@ -299,7 +299,7 @@ GENERATE_TESTS: mediacapture-image/MediaStreamTrack-applyConstraints-reject.http
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getCapabilities.https.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getConstraints.https.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getSettings.https.html
-GENERATE_TESTS: mediacapture-image/setOptions-reject.html
+GENERATE_TESTS: mediacapture-image/takePhoto-reject.html
GENERATE_TESTS: html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html
GENERATE_TESTS: html/syntax/parsing/Document.getElementsByTagName-foreign-01.html
GENERATE_TESTS: html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html
new file mode 100644
index 00000000000..0c7642a20ac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html
@@ -0,0 +1,22 @@
+
+
+
+
+Painting of vertical assembly (reference)
+
+
+ This test passes if you see a green rectangle and no red.
+
+
+
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/painting-stretchy-operator-001.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/painting-stretchy-operator-001.html
new file mode 100644
index 00000000000..2a9578badc0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/painting-stretchy-operator-001.html
@@ -0,0 +1,73 @@
+
+
+
+
+Painting of vertical assembly
+
+
+
+
+
+
+
+
+ This test passes if you see a green rectangle and no red.
+
+
+
+
+ ⥜
+
+
+
+
+ ⥜
+
+
+
diff --git a/tests/wpt/web-platform-tests/mathml/tools/stretchy-centered-on-baseline.py b/tests/wpt/web-platform-tests/mathml/tools/stretchy-centered-on-baseline.py
new file mode 100755
index 00000000000..fa75bafcf0e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/tools/stretchy-centered-on-baseline.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+# Create a WOFF font with glyphs for all the operator strings.
+font = mathfont.create("stretchy-centered-on-baseline", "Copyright (c) 2023 Igalia S.L.")
+
+# Set parameters for stretchy tests.
+font.math.MinConnectorOverlap = mathfont.em // 2
+
+# Make sure that underover parameters don't add extra spacing.
+font.math.LowerLimitBaselineDropMin = 0
+font.math.LowerLimitGapMin = 0
+font.math.StretchStackBottomShiftDown = 0
+font.math.StretchStackGapAboveMin = 0
+font.math.UnderbarVerticalGap = 0
+font.math.UnderbarExtraDescender = 0
+font.math.UpperLimitBaselineRiseMin = 0
+font.math.UpperLimitGapMin = 0
+font.math.StretchStackTopShiftUp = 0
+font.math.StretchStackGapBelowMin = 0
+font.math.OverbarVerticalGap = 0
+font.math.AccentBaseHeight = 0
+font.math.OverbarExtraAscender = 0
+
+# These two characters will be stretchable in both directions.
+horizontalArrow = 0x295A # LEFTWARDS HARPOON WITH BARB UP FROM BAR
+verticalArrow = 0x295C # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+
+mathfont.createSizeVariants(font, aUsePUA = True, aCenterOnBaseline = True)
+
+# Add stretchy vertical and horizontal constructions for the horizontal arrow.
+mathfont.createSquareGlyph(font, horizontalArrow)
+mathfont.createStretchy(font, horizontalArrow, True)
+mathfont.createStretchy(font, horizontalArrow, False)
+
+# Add stretchy vertical and horizontal constructions for the vertical arrow.
+mathfont.createSquareGlyph(font, verticalArrow)
+mathfont.createStretchy(font, verticalArrow, True)
+mathfont.createStretchy(font, verticalArrow, False)
+
+mathfont.save(font)
diff --git a/tests/wpt/web-platform-tests/mathml/tools/stretchy.py b/tests/wpt/web-platform-tests/mathml/tools/stretchy.py
index b93dbcee74d..1d1096261cb 100755
--- a/tests/wpt/web-platform-tests/mathml/tools/stretchy.py
+++ b/tests/wpt/web-platform-tests/mathml/tools/stretchy.py
@@ -28,7 +28,7 @@ font.math.OverbarExtraAscender = 0
horizontalArrow = 0x295A # LEFTWARDS HARPOON WITH BARB UP FROM BAR
verticalArrow = 0x295C # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
-mathfont.createSizeVariants(font)
+mathfont.createSizeVariants(font, aUsePUA = True, aCenterOnBaseline = False)
# Add stretchy vertical and horizontal constructions for the horizontal arrow.
mathfont.createSquareGlyph(font, horizontalArrow)
diff --git a/tests/wpt/web-platform-tests/mathml/tools/utils/mathfont.py b/tests/wpt/web-platform-tests/mathml/tools/utils/mathfont.py
index d030c9f2ce0..79772a24cb5 100644
--- a/tests/wpt/web-platform-tests/mathml/tools/utils/mathfont.py
+++ b/tests/wpt/web-platform-tests/mathml/tools/utils/mathfont.py
@@ -171,18 +171,24 @@ def createGlyphFromValue(aFont, aCodePoint):
g.width = 5 * em / 2
g.stroke("circular", em / 10, "square", "miter", "cleanup")
-def createSizeVariants(aFont, aUsePUA = False):
+def createSizeVariants(aFont, aUsePUA = False, aCenterOnBaseline = False):
if aUsePUA:
codePoint = PUA_startCodePoint
else:
codePoint = -1
for size in (0, 1, 2, 3):
g = aFont.createChar(codePoint, "v%d" % size)
- drawRectangleGlyph(g, em, (size + 1) * em, 0)
+ if aCenterOnBaseline:
+ drawRectangleGlyph(g, em, (size + 1) * em / 2, (size + 1) * em / 2)
+ else:
+ drawRectangleGlyph(g, em, (size + 1) * em, 0)
if aUsePUA:
codePoint += 1
g = aFont.createChar(codePoint, "h%d" % size)
- drawRectangleGlyph(g, (size + 1) * em, em, 0)
+ if aCenterOnBaseline:
+ drawRectangleGlyph(g, (size + 1) * em, em/2, em/2)
+ else:
+ drawRectangleGlyph(g, (size + 1) * em, em, 0)
if aUsePUA:
codePoint += 1
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html
similarity index 100%
rename from tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html
rename to tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html
diff --git a/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/mixed-content-cors.https.sub.html b/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/mixed-content-cors.https.sub.html
new file mode 100644
index 00000000000..eb7b443df39
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/mixed-content-cors.https.sub.html
@@ -0,0 +1,84 @@
+
+
+
+ Test mixed content autoupgrade behavior for CORS request
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/nested-contexts.js b/tests/wpt/web-platform-tests/resource-timing/resources/nested-contexts.js
index c0822943e86..31337ae5da2 100644
--- a/tests/wpt/web-platform-tests/resource-timing/resources/nested-contexts.js
+++ b/tests/wpt/web-platform-tests/resource-timing/resources/nested-contexts.js
@@ -22,22 +22,12 @@ const post_refresh_url =
const setup_navigate_or_refresh = (type, pre, post) => {
const verify_document_navigate_not_observable = () => {
- const entries = performance.getEntriesByType("resource");
- let found_first_document = false;
- for (entry of entries) {
- if (entry.name == pre) {
- found_first_document = true;
- }
- if (entry.name == post) {
- opener.postMessage(`FAIL - ${type} document should not be observable`,
- `*`);
- return;
- }
- }
- if (!found_first_document) {
- opener.postMessage("FAIL - initial document should be observable", "*");
- return;
+ if (performance.getEntriesByName(post).length) {
+ opener.postMessage(`FAIL - ${type} document should not be observable`,
+ `*`);
+
}
+
opener.postMessage("PASS", "*");
}
window.addEventListener("message", e => {
@@ -57,21 +47,8 @@ const setup_refresh_test = () => {
const setup_back_navigation = pushed_url => {
const verify_document_navigate_not_observable = navigated_back => {
- const entries = performance.getEntriesByType("resource");
- let found_first_document = false;
- for (entry of entries) {
- if (entry.name == pre_navigate_url) {
- found_first_document = true;
- }
- if (entry.name == post_navigate_url) {
- opener.postMessage("FAIL - navigated document exposed", "*");
- return;
- }
- }
- if (!found_first_document) {
- opener.postMessage(`FAIL - first document not exposed. navigated_back ` +
- `is ${navigated_back}`, "*");
- return;
+ if (performance.getEntriesByName(post_navigate_url).length) {
+ opener.postMessage("FAIL - navigated document exposed", "*");
}
if (navigated_back) {
opener.postMessage("PASS", "*");
diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js
index 97d45d453bd..5753b7ec502 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js
@@ -153,7 +153,7 @@ self.ImageCaptureTest = (() => {
return Promise.resolve(newState);
}
- async setOptions(source_id, settings) {
+ async setPhotoOptions(source_id, settings) {
const isAllowedToControlPanTiltZoom = await this.isPanTiltZoomPermissionGranted();
if (!isAllowedToControlPanTiltZoom &&
(settings.hasPan || settings.hasTilt || settings.hasZoom)) {
diff --git a/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-document-hidden-manual.https.html b/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-document-hidden-manual.https.html
deleted file mode 100644
index 05368bdfb89..00000000000
--- a/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-document-hidden-manual.https.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-Screen wake locks respect page visibility changes
-
-
-
-
-
-Switch the page to the background, then switch back to it.
diff --git a/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-document-hidden.https.html b/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-document-hidden.https.html
new file mode 100644
index 00000000000..c8c9712bdd9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-document-hidden.https.html
@@ -0,0 +1,49 @@
+
+
+Screen wake locks respect page visibility changes
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-computed.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-computed.html
index 9cabaab1fee..aaff44ecc91 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-computed.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-computed.html
@@ -22,17 +22,9 @@ test_computed_value('animation-timeline', 'auto, auto');
test_computed_value('animation-timeline', 'none, none');
test_computed_value('animation-timeline', 'auto, none');
test_computed_value('animation-timeline', 'none, auto');
-test_computed_value('animation-timeline', '"test"', 'test');
-test_computed_value('animation-timeline', '"none"');
-test_computed_value('animation-timeline', '"auto"');
-test_computed_value('animation-timeline', '"initial"');
-test_computed_value('animation-timeline', '"inherit"');
-test_computed_value('animation-timeline', '"unset"');
-test_computed_value('animation-timeline', '"revert"');
-test_computed_value('animation-timeline', '"revert-layer"');
test_computed_value('animation-timeline', 'test');
test_computed_value('animation-timeline', 'test1, test2');
-test_computed_value('animation-timeline', 'test1, "test2", none, test3, auto', 'test1, test2, none, test3, auto');
+test_computed_value('animation-timeline', 'test1, test2, none, test3, auto', 'test1, test2, none, test3, auto');
test(() => {
let style = getComputedStyle(document.getElementById('target'));
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-parsing.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-parsing.html
index 1a30f11f851..a1e9963f1fa 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-parsing.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-parsing.html
@@ -16,16 +16,9 @@ test_valid_value('animation-timeline', 'auto, auto');
test_valid_value('animation-timeline', 'none, none');
test_valid_value('animation-timeline', 'auto, none');
test_valid_value('animation-timeline', 'none, auto');
-test_valid_value('animation-timeline', '"test"', ["test", '"test"']);
-test_valid_value('animation-timeline', '"none"');
-test_valid_value('animation-timeline', '"auto"');
-test_valid_value('animation-timeline', '"initial"');
-test_valid_value('animation-timeline', '"inherit"');
-test_valid_value('animation-timeline', '"unset"');
-test_valid_value('animation-timeline', '"revert"');
test_valid_value('animation-timeline', 'test');
test_valid_value('animation-timeline', 'test1, test2');
-test_valid_value('animation-timeline', 'test1, "test2", none, test3, auto', ["test1, test2, none, test3, auto", 'test1, "test2", none, test3, auto']);
+test_valid_value('animation-timeline', 'test1, test2, none, test3, auto', ["test1, test2, none, test3, auto", 'test1, test2, none, test3, auto']);
test_invalid_value('animation-timeline', '10px');
test_invalid_value('animation-timeline', 'auto auto');
@@ -34,6 +27,7 @@ test_invalid_value('animation-timeline', 'foo bar');
test_invalid_value('animation-timeline', '"foo" "bar"');
test_invalid_value('animation-timeline', 'rgb(1, 2, 3)');
test_invalid_value('animation-timeline', '#fefefe');
+test_invalid_value('animation-timeline', '"test"');
// https://drafts.csswg.org/scroll-animations-1/#scroll-notation
//
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-computed.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-computed.html
similarity index 81%
rename from tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-computed.tentative.html
rename to tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-computed.html
index 8e23968b8e5..b971aba6c0f 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-computed.tentative.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-computed.html
@@ -1,10 +1,8 @@
-
-
+
-
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html
index 412145b04c0..5b37798fe89 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html
@@ -48,7 +48,10 @@
await waitForNextFrame();
const anim = CreateViewTimelineOpacityAnimation(t, target,
- {axis: 'inline'});
+ {
+ timeline:
+ {axis: 'inline'}
+ });
const timeline = anim.timeline;
await anim.ready;
@@ -119,7 +122,10 @@
await waitForNextFrame();
const anim = CreateViewTimelineOpacityAnimation(t, target,
- {axis: 'inline'});
+ {
+ timeline:
+ {axis: 'inline'}
+ });
const timeline = anim.timeline;
await anim.ready;
@@ -176,7 +182,10 @@
await waitForNextFrame();
const anim = CreateViewTimelineOpacityAnimation(t, target,
- {axis: 'inline'});
+ {
+ timeline:
+ {axis: 'inline'}
+ });
const timeline = anim.timeline;
await anim.ready;
@@ -229,7 +238,10 @@
await waitForNextFrame();
const anim = CreateViewTimelineOpacityAnimation(t, target,
- {axis: 'inline'});
+ {
+ timeline:
+ {axis: 'inline'}
+ });
const timeline = anim.timeline;
await anim.ready;
diff --git a/tests/wpt/web-platform-tests/scroll-animations/view-timelines/testcommon.js b/tests/wpt/web-platform-tests/scroll-animations/view-timelines/testcommon.js
index 12693c35d76..65301215c47 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/view-timelines/testcommon.js
+++ b/tests/wpt/web-platform-tests/scroll-animations/view-timelines/testcommon.js
@@ -8,20 +8,26 @@ function assert_px_equals(observed, expected, description) {
}
function CreateViewTimelineOpacityAnimation(test, target, options) {
- const viewTimelineOptions = {
+ const timeline_options = {
subject: target,
axis: 'block'
};
- if (options) {
- for (let key in options) {
- viewTimelineOptions[key] = options[key];
+ if (options && 'timeline' in options) {
+ for (let key in options.timeline) {
+ timeline_options[key] = options.timeline[key];
+ }
+ }
+ const animation_options = {
+ timeline: new ViewTimeline(timeline_options)
+ };
+ if (options && 'animation' in options) {
+ for (let key in options.animation) {
+ animation_options[key] = options.animation[key];
}
}
const anim =
- target.animate(
- { opacity: [0.3, 0.7] },
- { timeline: new ViewTimeline(viewTimelineOptions) });
+ target.animate({ opacity: [0.3, 0.7] }, animation_options);
test.add_cleanup(() => {
anim.cancel();
});
@@ -44,7 +50,7 @@ async function runTimelineBoundsTest(t, options, message) {
const anim =
options.anim ||
- CreateViewTimelineOpacityAnimation(t, target, options.timeline);
+ CreateViewTimelineOpacityAnimation(t, target, options);
if (options.timing)
anim.effect.updateTiming(options.timing);
@@ -99,9 +105,11 @@ async function runTimelineRangeTest(t, options) {
options.timeline = {
axis: 'inline'
};
- options.timing = {
+ options.animation = {
rangeStart: options.rangeStart,
rangeEnd: options.rangeEnd,
+ };
+ options.timing = {
// Set fill to accommodate floating point precision errors at the
// endpoints.
fill: 'both'
diff --git a/tests/wpt/web-platform-tests/scroll-animations/view-timelines/view-timeline-get-current-time-range-name.html b/tests/wpt/web-platform-tests/scroll-animations/view-timelines/view-timeline-get-current-time-range-name.html
index 8f385e7b6eb..09714b572bc 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/view-timelines/view-timeline-get-current-time-range-name.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/view-timelines/view-timeline-get-current-time-range-name.html
@@ -53,7 +53,10 @@
// 900 px cover end, exit end
const anim =
CreateViewTimelineOpacityAnimation(t, target,
- { axis: 'inline', fill: 'both' });
+ {
+ timeline: { axis: 'inline' },
+ animation: { fill: 'both' }
+ });
let timeline = anim.timeline;
container.scrollLeft = 600;
diff --git a/tests/wpt/web-platform-tests/scroll-animations/view-timelines/view-timeline-subject-size-changes.html b/tests/wpt/web-platform-tests/scroll-animations/view-timelines/view-timeline-subject-size-changes.html
index 553facb52fa..a47fed8e446 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/view-timelines/view-timeline-subject-size-changes.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/view-timelines/view-timeline-subject-size-changes.html
@@ -35,11 +35,12 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js b/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js
new file mode 100644
index 00000000000..88473ce3898
--- /dev/null
+++ b/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js
@@ -0,0 +1,87 @@
+// META: script=helpers.js
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+'use strict';
+
+(async function() {
+ // This is cross-domain from the current document.
+ const wwwAlt = "https://{{hosts[alt][www]}}:{{ports[https][0]}}";
+
+ if (window === window.top) {
+ // Test the interaction between two (same-origin) iframes.
+ promise_test(async (t) => {
+ const responder_html = `${wwwAlt}/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js`;
+ const [frame1, frame2] = await Promise.all([
+ CreateFrame(responder_html),
+ CreateFrame(responder_html),
+ ]);
+
+ t.add_cleanup(async () => {
+ await SetPermissionInFrame(frame1, [{ name: 'storage-access' }, 'prompt']);
+ });
+
+ const observed = ObservePermissionChange(frame2);
+ await SetPermissionInFrame(frame1, [{ name: 'storage-access' }, 'granted']);
+
+ const state = await observed;
+ assert_equals(state, "granted");
+ }, "Permissions grants are observable across same-origin iframes");
+
+ // Finally run the simple tests below in a separate cross-origin iframe.
+ RunTestsInIFrame('https://{{domains[www]}}:{{ports[https][0]}}/storage-access-api/resources/permissions-iframe.https.html');
+ return;
+ }
+
+ // We're in an iframe test now.
+ test_driver.set_test_context(window.top);
+
+ promise_test(async t => {
+ const permission = await navigator.permissions.query({name: "storage-access"});
+ assert_equals(permission.name, "storage_access");
+ assert_equals(permission.state, "prompt");
+ }, "Permission default state can be queried");
+
+ promise_test(async t => {
+ t.add_cleanup(async () => {
+ await test_driver.set_permission({ name: 'storage-access' }, 'prompt');
+ });
+ await test_driver.set_permission({ name: 'storage-access' }, 'granted');
+
+ const permission = await navigator.permissions.query({name: "storage-access"});
+ assert_equals(permission.name, "storage_access");
+ assert_equals(permission.state, "granted");
+ }, "Permission granted state can be queried");
+
+ promise_test(async t => {
+ t.add_cleanup(async () => {
+ await test_driver.set_permission({ name: 'storage-access' }, 'prompt');
+ });
+ await test_driver.set_permission({ name: 'storage-access' }, 'denied');
+
+ const permission = await navigator.permissions.query({name: "storage-access"});
+ assert_equals(permission.name, "storage_access");
+ assert_equals(permission.state, "denied");
+
+ await test_driver.set_permission({ name: 'storage-access' }, 'prompt');
+ }, "Permission denied state can be queried");
+
+ promise_test(async t => {
+ t.add_cleanup(async () => {
+ await test_driver.set_permission({ name: 'storage-access' }, 'prompt');
+ });
+
+ const permission = await navigator.permissions.query({name: "storage-access"});
+
+ const p = new Promise(resolve => {
+ permission.addEventListener("change", (event) => resolve(event), { once: true });
+ });
+
+ await test_driver.set_permission({ name: 'storage-access' }, 'granted');
+ await RunCallbackWithGesture(() => document.requestStorageAccess());
+
+ const event = await p;
+
+ assert_equals(event.target.name, "storage_access");
+ assert_equals(event.target.state, "granted");
+ }, "Permission state can be observed");
+})();
diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/README.md b/tests/wpt/web-platform-tests/top-level-storage-access-api/README.md
new file mode 100644
index 00000000000..31a32b8033e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/README.md
@@ -0,0 +1,4 @@
+# requestStorageAccessForOrigin Tests
+These tests are tentative. They are based on a proposed requestStorageAccessForOrigin extension to the Storage Access API which can be read about [in the explainer](https://github.com/privacycg/requestStorageAccessForOrigin).
+
+Note that the spec is in progress, and available [rendered](https://privacycg.github.io/requestStorageAccessForOrigin/) and [in bikeshed source](https://github.com/privacycg/requestStorageAccessForOrigin/blob/main/index.bs).
diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.js b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.js
new file mode 100644
index 00000000000..f7dd478a707
--- /dev/null
+++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.js
@@ -0,0 +1,127 @@
+// META: script=/storage-access-api/helpers.js
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+'use strict';
+
+// Note that this file follows the pattern in:
+// storage-access-api/requestStorageAccess.sub.window.js
+//
+// Some tests are run at the top-level, and an iframe is added to validate API
+// behavior in that context.
+
+// Prefix each test case with an indicator so we know what context they are run
+// in if they are used in multiple iframes.
+let testPrefix = 'top-level-context';
+
+// Keep track of if we run these tests in a nested context, we don't want to
+// recurse forever.
+let topLevelDocument = true;
+
+// The query string allows derivation of test conditions, like whether the tests
+// are running in a top-level context.
+const queryParams = window.location.search.substring(1).split('&');
+queryParams.forEach((param) => {
+ if (param.toLowerCase() == 'rootdocument=false') {
+ topLevelDocument = false;
+ } else if (param.split('=')[0].toLowerCase() == 'testcase') {
+ testPrefix = param.split('=')[1];
+ }
+});
+
+// TODO(crbug.com/1351540): when/if requestStorageAccessForOrigin is standardized,
+// upstream with the Storage Access API helpers file.
+function RunRequestStorageAccessForOriginInDetachedFrame(site) {
+ const nestedFrame = document.createElement('iframe');
+ document.body.append(nestedFrame);
+ const inner_doc = nestedFrame.contentDocument;
+ nestedFrame.remove();
+ return inner_doc.requestStorageAccessForOrigin(site);
+}
+
+function RunRequestStorageAccessForOriginViaDomParser(site) {
+ const parser = new DOMParser();
+ const doc = parser.parseFromString('', 'text/html');
+ return doc.requestStorageAccessForOrigin(site);
+}
+
+// Common tests to run in all frames.
+test(
+ () => {
+ assert_not_equals(document.requestStorageAccessForOrigin, undefined);
+ },
+ '[' + testPrefix +
+ '] document.requestStorageAccessForOrigin() should be supported on the document interface');
+
+if (topLevelDocument) {
+ promise_test(
+ t => {
+ return promise_rejects_dom(t, 'NotAllowedError',
+ document.requestStorageAccessForOrigin('https://test.com'),
+ 'document.requestStorageAccessForOrigin() call without user gesture');
+ },
+ '[' + testPrefix +
+ '] document.requestStorageAccessForOrigin() should be rejected by default with no user gesture');
+
+ promise_test(async t => {
+ const description =
+ 'document.requestStorageAccessForOrigin() call in a detached frame';
+ // Can't use promise_rejects_dom here because the exception is from the wrong global.
+ return RunRequestStorageAccessForOriginInDetachedFrame('https://foo.com')
+ .then(t.unreached_func('Should have rejected: ' + description))
+ .catch((e) => {
+ assert_equals(e.name, 'InvalidStateError', description);
+ });
+ }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached frame');
+
+ promise_test(async t => {
+ const description =
+ 'document.requestStorageAccessForOrigin() in a detached DOMParser result';
+ return RunRequestStorageAccessForOriginViaDomParser('https://foo.com')
+ .then(t.unreached_func('Should have rejected: ' + description))
+ .catch((e) => {
+ assert_equals(e.name, 'InvalidStateError', description);
+ });
+ }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached DOMParser document');
+
+ // Create a test with a single-child same-origin iframe.
+ // This will validate that calls to requestStorageAccessForOrigin are rejected
+ // in non-top-level contexts.
+ RunTestsInIFrame(
+ './resources/requestStorageAccessForOrigin-iframe.html?testCase=same-origin-frame&rootdocument=false');
+
+ promise_test(
+ async t => {
+ await RunCallbackWithGesture(
+ () => document.requestStorageAccessForOrigin(document.location.origin));
+ },
+ '[' + testPrefix +
+ '] document.requestStorageAccessForOrigin() should be resolved when called properly with a user gesture and the same site');
+
+ promise_test(
+ async t => {
+ await RunCallbackWithGesture(
+ () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin('bogus-url'),
+ 'document.requestStorageAccessForOrigin() call with bogus URL'));
+ },
+ '[' + testPrefix +
+ '] document.requestStorageAccessForOrigin() should be rejected when called with an invalid site');
+
+ promise_test(
+ async t => {
+ await RunCallbackWithGesture(
+ () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin('data:,Hello%2C%20World%21'),
+ 'document.requestStorageAccessForOrigin() call with data URL'));
+ },
+ '[' + testPrefix +
+ '] document.requestStorageAccessForOrigin() should be rejected when called with an opaque origin');
+
+} else {
+ promise_test(
+ async t => {
+ await RunCallbackWithGesture(
+ () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin),
+ 'document.requestStorageAccessForOrigin() call in a non-top-level context'));
+ },
+ '[' + testPrefix +
+ '] document.requestStorageAccessForOrigin() should be rejected when called in an iframe');
+}
diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html
new file mode 100644
index 00000000000..3e2f6d5b628
--- /dev/null
+++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/url/resources/setters_tests.json b/tests/wpt/web-platform-tests/url/resources/setters_tests.json
index df75ab57c42..9c4eedc6089 100644
--- a/tests/wpt/web-platform-tests/url/resources/setters_tests.json
+++ b/tests/wpt/web-platform-tests/url/resources/setters_tests.json
@@ -273,13 +273,21 @@
{
"comment": "Tab and newline are stripped",
"href": "http://test/",
- "new_value": "h\u000A\u000Att\u0009ps",
+ "new_value": "h\u000D\u000Att\u0009ps",
"expected": {
"href": "https://test/",
"protocol": "https:",
"port": ""
}
},
+ {
+ "href": "http://test/",
+ "new_value": "https\u000D",
+ "expected": {
+ "href": "https://test/",
+ "protocol": "https:"
+ }
+ },
{
"comment": "Non-tab/newline C0 controls result in no-op",
"href": "http://test/",
@@ -299,7 +307,7 @@
},
{
"href": "http://test/",
- "new_value": "https\u000D",
+ "new_value": "https\u000E",
"expected": {
"href": "http://test/",
"protocol": "http:"
diff --git a/tests/wpt/web-platform-tests/webrtc-encoded-transform/set-metadata.https.html b/tests/wpt/web-platform-tests/webrtc-encoded-transform/set-metadata.https.html
index 3840bfc7a28..ad346c12e44 100644
--- a/tests/wpt/web-platform-tests/webrtc-encoded-transform/set-metadata.https.html
+++ b/tests/wpt/web-platform-tests/webrtc-encoded-transform/set-metadata.https.html
@@ -35,6 +35,8 @@ promise_test(async t => {
'spatialIndex');
assert_equals(cloneMetadata.temporalIndex, metadata.temporalIndex,
'temporalIndex');
+ assert_equals(cloneMetadata.frameType, metadata.frameType,
+ 'frameType');
// RTCEncodedVideoFrameAdditionalMetadata-only fields.
assert_array_equals(cloneMetadata.decodeTargetIndications,
metadata.decodeTargetIndications,
diff --git a/tests/wpt/web-platform-tests/webrtc-stats/rtp-stats-creation.html b/tests/wpt/web-platform-tests/webrtc-stats/rtp-stats-creation.html
index c12f266362e..df672a7f0d9 100644
--- a/tests/wpt/web-platform-tests/webrtc-stats/rtp-stats-creation.html
+++ b/tests/wpt/web-platform-tests/webrtc-stats/rtp-stats-creation.html
@@ -94,7 +94,7 @@ promise_test(async (test) => {
while (true) {
const report = await remotePc.getStats();
const audioPlayout =
- [...report.values()].filter(({type}) => type == "audio-playout");
+ [...report.values()].filter(({type}) => type == "media-playout");
if (audioPlayout.length == 1) {
break;
}
diff --git a/tests/wpt/web-platform-tests/webrtc-stats/supported-stats.https.html b/tests/wpt/web-platform-tests/webrtc-stats/supported-stats.https.html
index 2fdd3ad9094..24b4d3f06f0 100644
--- a/tests/wpt/web-platform-tests/webrtc-stats/supported-stats.https.html
+++ b/tests/wpt/web-platform-tests/webrtc-stats/supported-stats.https.html
@@ -107,7 +107,8 @@ async function getAllStats(t, pc) {
// `roundTripTime` is missing in this test, but awaiting for any
// remote-outbound-rtp avoids flaky failures.
const hasRemoteOutbound = remoteOutboundAudio || remoteOutboundVideo;
- if (hasRemoteInbound && hasRemoteOutbound) {
+ const hasMediaPlayout = values.find(({type}) => type == "media-playout") != undefined;
+ if (hasRemoteInbound && hasRemoteOutbound && hasMediaPlayout) {
return stats;
}
await new Promise(r => t.step_timeout(r, 1000));
diff --git a/tests/wpt/web-platform-tests/xhr/formdata/constructor-submitter.html b/tests/wpt/web-platform-tests/xhr/formdata/constructor-submitter.html
new file mode 100644
index 00000000000..fd4ec862387
--- /dev/null
+++ b/tests/wpt/web-platform-tests/xhr/formdata/constructor-submitter.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+