aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-duration-computed.html.ini27
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-002.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-003.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-004.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-006.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-007.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-011.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-012.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-position/overlay/overlay-transition-backdrop.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom/HTMLLinkElement-load-event.html.ini3
-rw-r--r--tests/wpt/metadata/MANIFEST.json3099
-rw-r--r--tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini27
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/border-image-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/border-image-003.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/border-image-004.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/border-image-006.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/border-image-012.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-position/overlay/overlay-transition-backdrop.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/text-stroke-width-subpixel.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini199
-rw-r--r--tests/wpt/metadata/css/cssom/HTMLLinkElement-load-event.html.ini3
-rw-r--r--tests/wpt/metadata/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html.ini2
-rw-r--r--tests/wpt/metadata/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html.ini2
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini4
-rw-r--r--tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini5
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini1
-rw-r--r--tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini1
-rw-r--r--tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.cross-layer-paths.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.reset.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.unclosed-nested.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/text-styles/2d.text.font.parse.complex.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.w.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini2
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini2
-rw-r--r--tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini12
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/video_008.htm.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/forms/historical.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/selectors/pseudo-classes/disabled.html.ini18
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini5
-rw-r--r--tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini2
-rw-r--r--tests/wpt/metadata/webmessaging/with-ports/018.html.ini4
-rw-r--r--tests/wpt/metadata/websockets/send-many-64K-messages-with-backpressure.any.js.ini27
-rw-r--r--tests/wpt/mozilla/meta/mozilla/img_placeholder_load.html.ini4
-rw-r--r--tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini3
-rw-r--r--tests/wpt/web-platform-tests/.azure-pipelines.yml9
-rw-r--r--tests/wpt/web-platform-tests/.well-known/private-aggregation/debug/report-shared-storage7
-rw-r--r--tests/wpt/web-platform-tests/.well-known/private-aggregation/report-shared-storage7
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html2
-rw-r--r--tests/wpt/web-platform-tests/accessibility/crashtests/append-image-using-illegal-map.html8
-rw-r--r--tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html2
-rw-r--r--tests/wpt/web-platform-tests/accessibility/crashtests/removed-from-flat-tree.html3
-rw-r--r--tests/wpt/web-platform-tests/accname/basic.html10
-rw-r--r--tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html4
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html109
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html.sub.headers5
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/default-src/externalScript.js1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/default-src/simpleSourcedScript.js1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html9
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers2
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-context.https.html40
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html8
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html8
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html6
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html6
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html6
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html12
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html6
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html6
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html6
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html4
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html4
-rw-r--r--tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html4
-rw-r--r--tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js32
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-002.html200
-rw-r--r--tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-003.html168
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/inheritance.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html12
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-002.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-003.html46
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-004.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-006.html44
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-007.html70
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-011.html52
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-012.html52
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-1.html38
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-10.html50
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-11.html49
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-12.html49
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-2.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-3.html46
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-4.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6-ref.html69
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6.html46
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-7.html46
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-8.html50
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/border-image-9.html50
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html5
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-006-ref.html44
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-007-ref.html63
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-012-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-000.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-001.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-002.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-003.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-004.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-005.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-006.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-hide-after-addition.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html44
-rw-r--r--tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html44
-rw-r--r--tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html46
-rw-r--r--tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html46
-rw-r--r--tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-005.html79
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-006.html79
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-007.html85
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-008.html85
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-009.html83
-rw-r--r--tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html68
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002.html87
-rw-r--r--tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop-entry.html25
-rw-r--r--tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-001.html62
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-002.html55
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-003.html89
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-004.html60
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-005.html60
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-010.html62
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-011.html55
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-012.html56
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-013.html55
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-014.html55
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-015.html87
-rw-r--r--tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-016.html114
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel-notref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel.html5
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht2
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html10
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html13
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html13
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html13
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html13
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-load-event.html32
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/HTMLStyleElement-load-event.html23
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/shorthand-values.html2
-rw-r--r--tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html2
-rw-r--r--tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html2
-rw-r--r--tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html2
-rw-r--r--tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html4
-rw-r--r--tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html1
-rw-r--r--tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html2
-rw-r--r--tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html40
-rw-r--r--tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html6
-rw-r--r--tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html32
-rw-r--r--tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html2
-rw-r--r--tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print-ref.html8
-rw-r--r--tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print.html14
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/invalidation/crashtests/nth-child-of-attribute-crash.html22
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html10
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html24
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html10
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html24
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html2
-rw-r--r--tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html2
-rw-r--r--tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js12
-rw-r--r--tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html2
-rw-r--r--tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html71
-rw-r--r--tests/wpt/web-platform-tests/editing/crashtests/delete-after-empty-script-element.html19
-rw-r--r--tests/wpt/web-platform-tests/editing/crashtests/designMode-off-during-inserthorizontalrule.html22
-rw-r--r--tests/wpt/web-platform-tests/editing/crashtests/forwarddelete-after-editable-slot-element-outside-body.html28
-rw-r--r--tests/wpt/web-platform-tests/editing/crashtests/indent-in-inline-editing-host-outside-body.html18
-rw-r--r--tests/wpt/web-platform-tests/editing/crashtests/indent-in-textarea-in-designMode-during-outdent.html34
-rw-r--r--tests/wpt/web-platform-tests/editing/crashtests/insertText-nested-by-DOMSubtreeModified.html29
-rw-r--r--tests/wpt/web-platform-tests/editing/crashtests/inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html25
-rw-r--r--tests/wpt/web-platform-tests/editing/crashtests/removeformat-in-number-input-immediately-after-type-change-and-stepUp.html20
-rw-r--r--tests/wpt/web-platform-tests/editing/edit-context/edit-context-property.tentative.html71
-rw-r--r--tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html2
-rw-r--r--tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html2
-rw-r--r--tests/wpt/web-platform-tests/element-timing/observe-video-poster.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html14
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths.html20
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone.html24
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html29
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html29
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset-expected.html14
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset.html33
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested.html (renamed from tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched-expected.html)12
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html26
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.restore.html26
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save.html26
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_restore.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/line-styles/2d.line.fill.noop.html36
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html5
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex2.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html60
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.alpha.pngbin0 -> 219 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.color.pngbin0 -> 219 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.pngbin0 -> 396 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.multiple.pngbin0 -> 256 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.overlap.pngbin0 -> 248 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.vertical.pngbin0 -> 229 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html36
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html36
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html9
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js9
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.html35
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.js30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.js23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html9
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js9
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html40
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js41
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html29
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js25
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html42
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js41
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html43
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js42
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html45
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js44
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html54
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js53
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html50
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js49
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html54
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js53
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html9
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js9
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html54
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js53
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html43
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js42
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html45
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js44
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html40
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js41
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html47
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js46
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html45
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js44
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html43
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js42
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html54
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js53
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html48
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js47
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html43
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js42
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html54
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js53
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html48
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js47
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html40
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js41
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html40
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js35
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html40
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js35
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.html29
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.js24
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html14
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html (renamed from tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html)28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html24
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js26
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js25
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js26
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html29
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js24
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js26
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js25
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset-expected.html14
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.html36
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.w.html50
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html (renamed from tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html)12
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html (renamed from tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html)12
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.js22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.js22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html29
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js24
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.js23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.html37
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.js32
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.pngbin0 -> 206 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.pngbin0 -> 206 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.pngbin0 -> 206 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.pngbin0 -> 206 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html15
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js15
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js3
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.html32
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.worker.js27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high.pngbin0 -> 246 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.html39
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.worker.js34
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low.pngbin0 -> 1586 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html8
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.pngbin0 -> 206 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js8
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html8
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js8
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html8
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js8
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.js10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.pngbin0 -> 206 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.pngbin0 -> 206 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html34
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js35
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html34
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js35
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html38
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js39
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html41
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.pngbin0 -> 206 bytes
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js42
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html41
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js42
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html41
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js42
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html50
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js51
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js1
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.html28
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js10
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py20
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py6
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/fill-and-stroke-styles.yaml (renamed from tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/fill-and-stroke-styles.yaml)184
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml192
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml15
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/shadows.yaml (renamed from tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/shadows.yaml)84
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/the-canvas-state.yaml (renamed from tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/the-canvas-state.yaml)0
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml50
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml45
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/fill-and-stroke-styles.yaml1586
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/shadows.yaml947
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml88
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/the-canvas-state.yaml92
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.js41
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py14
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html9
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html31
-rw-r--r--tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html2
-rw-r--r--tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html2
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html19
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html61
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html14
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html8
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html30
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_008.htm47
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html28
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html29
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html13
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html1
-rw-r--r--tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html6
-rw-r--r--tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html2
-rw-r--r--tests/wpt/web-platform-tests/https-upgrades/resources/pass.html10
-rw-r--r--tests/wpt/web-platform-tests/https-upgrades/tentative/fallback.sub.html24
-rw-r--r--tests/wpt/web-platform-tests/https-upgrades/tentative/upgrade.https.sub.html24
-rw-r--r--tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html4
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html2
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html2
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/resources/private-aggregation-helper-module.js23
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/resources/reports.py77
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/resources/util.js24
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html23
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure-2.https.html26
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure.https.html74
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success-2.https.html27
-rw-r--r--tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success.https.html71
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webxr-test.js3
-rw-r--r--tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html6
-rw-r--r--tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html30
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html2
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html2
-rw-r--r--tests/wpt/web-platform-tests/svg/scripted/script-invalid-script-type.html16
-rw-r--r--tests/wpt/web-platform-tests/tools/pytest.ini2
-rw-r--r--tests/wpt/web-platform-tests/tools/requirements_pytest.txt4
-rw-r--r--tests/wpt/web-platform-tests/tools/serve/serve.py1
-rw-r--r--tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py34
-rw-r--r--tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/run.py5
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html12
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py76
-rw-r--r--tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html2
-rw-r--r--tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html3
-rw-r--r--tests/wpt/web-platform-tests/wai-aria/role/basic.html10
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html6
-rw-r--r--tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html40
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py1
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py1
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py1
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py12
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py32
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py1
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/__init__.py0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py6
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py5
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py82
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py6
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py14
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py6
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py11
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py11
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py3
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py14
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py5
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py20
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py10
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py6
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py30
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py54
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py12
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py5
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py57
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py49
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py3
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py3
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py3
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py3
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py27
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py7
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py8
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py6
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py8
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py15
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py10
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/image.py24
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/inline.py11
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/keys.py3
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/merge_dictionaries.py42
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/pdf.py8
-rw-r--r--tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html3
-rw-r--r--tests/wpt/web-platform-tests/webrtc/simplecall.https.html3
-rw-r--r--tests/wpt/web-platform-tests/websockets/handlers/receive-many-with-backpressure_wsh.py23
-rw-r--r--tests/wpt/web-platform-tests/websockets/send-many-64K-messages-with-backpressure.any.js49
-rw-r--r--tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html2
-rw-r--r--tests/wpt/web-platform-tests/window-management/META.yml (renamed from tests/wpt/web-platform-tests/window-placement/META.yml)2
-rw-r--r--tests/wpt/web-platform-tests/window-management/README.md7
-rw-r--r--tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-companion.tentative.https.html54
-rw-r--r--tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-enter.tentative.https.html36
-rw-r--r--tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-move.tentative.https.html39
-rw-r--r--tests/wpt/web-platform-tests/window-management/multi-screen-window-open.tentative.https.html39
-rw-r--r--tests/wpt/web-platform-tests/window-management/resources/helpers.js123
-rw-r--r--tests/wpt/web-platform-tests/window-placement/README.md5
-rw-r--r--tests/wpt/web-platform-tests/window-placement/fullscreen-companion-window-manual.tentative.https.html76
-rw-r--r--tests/wpt/web-platform-tests/window-placement/multi-screen-fullscreen-manual.tentative.https.html116
-rw-r--r--tests/wpt/web-platform-tests/window-placement/multi-screen-window-open.tentative.https.html99
-rw-r--r--tests/wpt/web-platform-tests/window-placement/resources/helpers.js68
-rw-r--r--tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm12
-rw-r--r--tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html13
-rw-r--r--tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html13
-rw-r--r--tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html9
807 files changed, 12421 insertions, 7631 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-duration-computed.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-duration-computed.html.ini
new file mode 100644
index 00000000000..0bb304465a7
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-duration-computed.html.ini
@@ -0,0 +1,27 @@
+[animation-duration-computed.html]
+ [Property animation-duration value 'auto']
+ expected: FAIL
+
+ [Property animation-duration value 'auto, auto']
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:auto]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:auto, auto]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:--t]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:--t, --t2]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:none]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:scroll()]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:view()]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-002.html.ini
new file mode 100644
index 00000000000..d695ff0e521
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-002.html.ini
@@ -0,0 +1,2 @@
+[border-image-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-003.html.ini
new file mode 100644
index 00000000000..182fa949db8
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-003.html.ini
@@ -0,0 +1,2 @@
+[border-image-003.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-004.html.ini
new file mode 100644
index 00000000000..e4f30d04308
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-004.html.ini
@@ -0,0 +1,2 @@
+[border-image-004.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-006.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-006.html.ini
new file mode 100644
index 00000000000..14f85783493
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-006.html.ini
@@ -0,0 +1,2 @@
+[border-image-006.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-007.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-007.html.ini
new file mode 100644
index 00000000000..ffa1e8712d8
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-007.html.ini
@@ -0,0 +1,2 @@
+[border-image-007.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-011.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-011.html.ini
new file mode 100644
index 00000000000..962f3b5d4d8
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-011.html.ini
@@ -0,0 +1,2 @@
+[border-image-011.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-012.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-012.html.ini
new file mode 100644
index 00000000000..126a8510576
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-012.html.ini
@@ -0,0 +1,2 @@
+[border-image-012.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini
index 206453f3c7a..4d2a4b9f6d7 100644
--- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini
@@ -5,9 +5,6 @@
[e.style['background'\] = "none" should set background-color]
expected: FAIL
- [e.style['background'\] = "none" should set background-position]
- expected: FAIL
-
[e.style['background'\] = "url(\\"https://example.com/\\") 1px 2px / 3px 4px space round local padding-box content-box, rgb(5, 6, 7) url(\\"https://example.com/\\") 1px 2px / 3px 4px space round local padding-box content-box" should set background-attachment]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini
deleted file mode 100644
index eb3cf41a070..00000000000
--- a/tests/wpt/metadata-layout-2020/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-layout-2020/css/css-position/overlay/overlay-transition-backdrop.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/overlay/overlay-transition-backdrop.html.ini
new file mode 100644
index 00000000000..f6389e9308d
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-position/overlay/overlay-transition-backdrop.html.ini
@@ -0,0 +1,2 @@
+[overlay-transition-backdrop.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom/HTMLLinkElement-load-event.html.ini b/tests/wpt/metadata-layout-2020/css/cssom/HTMLLinkElement-load-event.html.ini
new file mode 100644
index 00000000000..cff25974ea9
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom/HTMLLinkElement-load-event.html.ini
@@ -0,0 +1,3 @@
+[HTMLLinkElement-load-event.html]
+ [Link element load event doesn't block the parser.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 11b98518104..6bd57108d76 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -35,6 +35,13 @@
{}
]
],
+ "append-image-using-illegal-map.html": [
+ "c78e74eeed7b6dfee3b267c4b81bd2f511923de9",
+ [
+ null,
+ {}
+ ]
+ ],
"aria-hidden-with-select.html": [
"2aedbcfb82d4f94925a89294d11d1e4c2a6564a6",
[
@@ -197,7 +204,7 @@
]
],
"map-update-crash.html": [
- "db7c664251a67e43d0a4dd31eaa8a2b1efd3b938",
+ "5787de8059ff9bf5eea44435750462886617bcff",
[
null,
{}
@@ -224,6 +231,13 @@
{}
]
],
+ "removed-from-flat-tree.html": [
+ "2deaf6ab390608a49d2ec93fe7082ed85605712b",
+ [
+ null,
+ {}
+ ]
+ ],
"serialize-with-no-document.html": [
"f7719cf2ff1838b1125e08c5f86cf57910732c0e",
[
@@ -323,7 +337,7 @@
"normal-flow": {
"crashtests": {
"block-in-inline-ax-crash.html": [
- "dee9ed8a1b8ed368d854e2d4c7f8cd3dfcd2e222",
+ "bbb484073a38a9920da07ffcb049e0ef00c241e2",
[
null,
{}
@@ -4223,6 +4237,17 @@
{}
]
],
+ "invalidation": {
+ "crashtests": {
+ "nth-child-of-attribute-crash.html": [
+ "8f30fbb5e77610fc4b113c976a2efb1dacd88041",
+ [
+ null,
+ {}
+ ]
+ ]
+ }
+ },
"spurious-brace-crash.html": [
"b1a462a9690ea40836c0d7cb0cdf9779b9702750",
[
@@ -4390,6 +4415,13 @@
{}
]
],
+ "delete-after-empty-script-element.html": [
+ "c06a4af8026aaaa946d694c57a4558806d97ddb5",
+ [
+ null,
+ {}
+ ]
+ ],
"delete-after-justifyleft-in-closed-editable-dialog.html": [
"185cb01ee51dbf91717887f51ad82812690e0e90",
[
@@ -4453,6 +4485,13 @@
{}
]
],
+ "designMode-off-during-inserthorizontalrule.html": [
+ "21a61998986e17652a2affb52b2139b78bc23b16",
+ [
+ null,
+ {}
+ ]
+ ],
"execCommand-at-load-with-changing-editing-host.html": [
"ec1dd30dc023205ce479df1038d08279c315ae62",
[
@@ -4481,6 +4520,13 @@
{}
]
],
+ "forwarddelete-after-editable-slot-element-outside-body.html": [
+ "480f02ded967d5a2e845302d384d03a2c87285c4",
+ [
+ null,
+ {}
+ ]
+ ],
"forwarddelete-at-empty-text-node-in-body.html": [
"4fba13d5d8eb3f0939e9265c709a00eec452ddf0",
[
@@ -4516,6 +4562,20 @@
{}
]
],
+ "indent-in-inline-editing-host-outside-body.html": [
+ "d56a0fd248b9f98f4d6355e2ac0f4736b5014e09",
+ [
+ null,
+ {}
+ ]
+ ],
+ "indent-in-textarea-in-designMode-during-outdent.html": [
+ "313c51bb5a0e12c841cb06ab512595b6afee52d8",
+ [
+ null,
+ {}
+ ]
+ ],
"indent-outdent-after-closing-editable-dialog-element.html": [
"7f73de048d714c99ce47ae4da61d7128e53216e8",
[
@@ -4537,6 +4597,13 @@
{}
]
],
+ "insertText-nested-by-DOMSubtreeModified.html": [
+ "45b0e67ed4635afba892e20396afee801486ca4d",
+ [
+ null,
+ {}
+ ]
+ ],
"inserthorizontalrule-in-fieldset-and-everything-styled-white-space-pre.html": [
"d06157e78429b9365f5122180426f46b96785b96",
[
@@ -4558,6 +4625,13 @@
{}
]
],
+ "inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html": [
+ "d7224c3095df66cfa792e21f8b7af991c7610baa",
+ [
+ null,
+ {}
+ ]
+ ],
"inserthorizontalrule-with-selecting-text-in-document-element.html": [
"c46b0359e86d4b3d4f0c317260d0ad63d24ec98d",
[
@@ -4866,6 +4940,13 @@
{}
]
],
+ "removeformat-in-number-input-immediately-after-type-change-and-stepUp.html": [
+ "d83c2e00790f1a9d825ffa4742bd7504f5cc7f63",
+ [
+ null,
+ {}
+ ]
+ ],
"remve-documentElement-after-inserthtml-svg-and-td.html": [
"eebeac317da782b8738c4ad5ee45390f66f1b35e",
[
@@ -19811,6 +19892,36 @@
}
},
"offscreen": {
+ "shadows": {
+ "2d.shadow.blur.high-manual.html": [
+ "46c50324488d37f63049a7211c8af2c147af9f79",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.shadow.blur.high-manual.worker.js": [
+ "8bd06da381ba1427a6532d1e711acb58c1cf3f81",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.shadow.blur.low-manual.html": [
+ "19a42a683ccf12990ef2d0183529e2666276d2b1",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.shadow.blur.low-manual.worker.js": [
+ "67bc8c424e9ddb00909a28c831f774c963ecce69",
+ [
+ null,
+ {}
+ ]
+ ]
+ },
"text": {
"2d.text.draw.fill.basic-manual.html": [
"af1cb9d94a3db8619d297a4bb14f7828bc2baa3d",
@@ -22162,7 +22273,7 @@
]
],
"pointerevent_touch-action-rotated-divs_touch-manual.html": [
- "1c09b15f1f99eead72a0689ab14a4facb1c61e3f",
+ "194e933f91ab068ff3fb2abc7dd064316380de68",
[
null,
{}
@@ -28206,22 +28317,6 @@
]
]
},
- "window-placement": {
- "fullscreen-companion-window-manual.tentative.https.html": [
- "10f30a1906076c1eef1476fe5686c1d93e4412cc",
- [
- null,
- {}
- ]
- ],
- "multi-screen-fullscreen-manual.tentative.https.html": [
- "620cd6e507d9dbe8f3f43c59ae973733d7c78cd8",
- [
- null,
- {}
- ]
- ]
- },
"xhr": {
"send-authentication-existing-session-manual.htm": [
"a80efd6e8436408db15d8019beef3abc0dfd0ab9",
@@ -29869,6 +29964,19 @@
{}
]
],
+ "monolithic-overflow-021-print.html": [
+ "584c4943dcf16e1713c93a6b482b858076163842",
+ [
+ null,
+ [
+ [
+ "/css/printing/monolithic-overflow-021-print-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"page-name-001-print.html": [
"56281bb4ed5f8b3e34401420b10504ed6c0e00fd",
[
@@ -128704,7 +128812,7 @@
]
],
"cancel-animation-shadow-slot-invalidation.html": [
- "d67a22443bbdb872895ee90bf752d951ebd5eb35",
+ "a5c9c6763f58485a15ef21f20c4ec92025ca8993",
[
null,
[
@@ -135200,21 +135308,99 @@
{}
]
],
- "border-image-017.xht": [
- "33492ca78b31e3078c9c63616340672aed356478",
+ "border-image-002.html": [
+ "ac76eb2a5ef7b5fa13e5a89b8bf302b8cd08a7c8",
[
null,
[
[
- "/css/reference/ref-filled-green-100px-square.xht",
+ "/css/css-backgrounds/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
- "border-image-018.xht": [
- "9ce6c82d564b3c68dc7cb0dbf738ad0b6321a5da",
+ "border-image-003.html": [
+ "6d4ee0fde93d57bfb0640e646b5ebc55cb441f1b",
+ [
+ null,
+ [
+ [
+ "/css/css-backgrounds/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "border-image-004.html": [
+ "844d98bb3cd84e99c5c56d9a0b79352412609c2b",
+ [
+ null,
+ [
+ [
+ "/css/css-backgrounds/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "border-image-006.html": [
+ "e3782f2ecd1a48964491b16c404b23b2c4d01e7f",
+ [
+ null,
+ [
+ [
+ "/css/css-backgrounds/reference/border-image-006-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "border-image-007.html": [
+ "41ac9dac37fb5b11c09be99b1a325f9190e00f8d",
+ [
+ null,
+ [
+ [
+ "/css/css-backgrounds/reference/border-image-007-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "border-image-011.html": [
+ "357845bbf719a6eb310ce7f31b58126bbcd55172",
+ [
+ null,
+ [
+ [
+ "/css/css-backgrounds/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "border-image-012.html": [
+ "16a6e9061dfd0371bcf8675d8599f1221bf4f2cb",
+ [
+ null,
+ [
+ [
+ "/css/css-backgrounds/reference/border-image-012-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "border-image-017.xht": [
+ "33492ca78b31e3078c9c63616340672aed356478",
[
null,
[
@@ -135226,8 +135412,8 @@
{}
]
],
- "border-image-019.xht": [
- "d07db369ab5734a353c905800f9363f3aeb96152",
+ "border-image-018.xht": [
+ "9ce6c82d564b3c68dc7cb0dbf738ad0b6321a5da",
[
null,
[
@@ -135239,8 +135425,8 @@
{}
]
],
- "border-image-020.xht": [
- "c4fc9ace4aae08b502047db062bf61099d224ee4",
+ "border-image-019.xht": [
+ "d07db369ab5734a353c905800f9363f3aeb96152",
[
null,
[
@@ -135252,13 +135438,13 @@
{}
]
],
- "border-image-6.html": [
- "bc4cb1386b5cc634539fb4a6cd5c8599ec013f21",
+ "border-image-020.xht": [
+ "c4fc9ace4aae08b502047db062bf61099d224ee4",
[
null,
[
[
- "/css/css-backgrounds/border-image-6-ref.html",
+ "/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
@@ -158187,6 +158373,19 @@
{}
]
],
+ "container-units-sharing-via-rule-node.html": [
+ "e1a5c714516bfea5e482acc4f5b9811bbc975a21",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"counters-in-container-dynamic.html": [
"d85ab6cb425ba792914b39901cd3f3ba3943b606",
[
@@ -159268,6 +159467,97 @@
{}
]
],
+ "content-visibility-with-popover-top-layer-000.html": [
+ "fef4f5e5405e038aa10c1c0e21a71df6a82cd78f",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/content-visibility/container-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "content-visibility-with-popover-top-layer-001.html": [
+ "fb3c9096da6305883ff42ce59981f34ad1f4b112",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/content-visibility/container-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "content-visibility-with-popover-top-layer-002.html": [
+ "48b436f4de19ee35f3684794c49b786bcd9cb005",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/content-visibility/container-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "content-visibility-with-popover-top-layer-003.html": [
+ "df3cf07a0159f9254f0fd78d193716c74aa70068",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "content-visibility-with-popover-top-layer-004.html": [
+ "bbf4567e37d4c1df68ce9119ec3952722324f12e",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "content-visibility-with-popover-top-layer-005.html": [
+ "264d7b317e0a3fb2fc655c6cceda29d2fe252f9d",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "content-visibility-with-popover-top-layer-hide-after-addition.html": [
+ "e3934bf46f80d7e22c0209470b8b7ed6f92e47cd",
+ [
+ null,
+ [
+ [
+ "/css/css-contain/content-visibility/container-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"content-visibility-with-top-layer-000.html": [
"61856611f9eb8b170325a12114df78beefaaf2d5",
[
@@ -160751,7 +161041,7 @@
]
],
"css3-counter-styles-202.html": [
- "909118fb109a0f93070353040dc300e049dea5e7",
+ "6f00ee8b2d8d0bb44ab0a10aae18dfe57e42e589",
[
null,
[
@@ -160792,7 +161082,7 @@
]
],
"css3-counter-styles-205.html": [
- "fdd74e837d39d6cf9805be992d19a8aa7deeed07",
+ "4b62cfeb77ac199978e257a770c1a19bb5cd0774",
[
null,
[
@@ -164346,7 +164636,7 @@
]
],
"display-contents-slot-attach-whitespace.html": [
- "867f1f059247cc1ba0ce5ded559b5f42e0473cf1",
+ "c29b5ba6348130981ff47505c8f8281806a3ef64",
[
null,
[
@@ -205482,7 +205772,7 @@
]
],
"mask-image-5.html": [
- "d98ddf8de57d723afdc2ed0274dbfbf178dbaa54",
+ "12f0f6000794388b73ac55b3747cf556b4ac8ee4",
[
null,
[
@@ -213053,6 +213343,19 @@
{}
]
],
+ "scrollbar-gutter-dynamic-002.html": [
+ "a830e6b680b82984cfb1e95831288c5b804e9aaa",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"scrollbar-gutter-rtl-002.html": [
"8d0376defdfc69ecb44fc2134c81573e553db2bb",
[
@@ -215657,6 +215960,32 @@
]
},
"overlay": {
+ "overlay-transition-backdrop-entry.html": [
+ "89299e3a8ea088d93e308f50966bca9372d3eff1",
+ [
+ null,
+ [
+ [
+ "/css/css-position/overlay/green-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "overlay-transition-backdrop.html": [
+ "b730e4334659c8f2d8071a651b7004583b6f96c3",
+ [
+ null,
+ [
+ [
+ "/css/css-position/overlay/green-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"overlay-transition-finished.html": [
"bf0aefac3f3d26376980bdb48ad8058210d77898",
[
@@ -222483,7 +222812,7 @@
]
],
"slotted-with-pseudo-element.html": [
- "e1a91952d70cc190fff101a4e26af719a2900257",
+ "f2b33ae49474ff6594acd2052d400d781d4101af",
[
null,
[
@@ -241885,6 +242214,19 @@
]
]
},
+ "text-stroke-width-subpixel.html": [
+ "97cbc3f44de91ceb094283de84f7fb9a9e018d36",
+ [
+ null,
+ [
+ [
+ "/css/css-text/text-stroke-width-subpixel-notref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
"text-transform": {
"math": {
"text-transform-math-auto-001.html": [
@@ -257822,7 +258164,7 @@
]
],
"svg-scale-013.html": [
- "00c754552fde8c2bf5cb97525c727c2082d98701",
+ "d94e0b7d09b4a15f3f1aca128fecf5786a7cfed2",
[
null,
[
@@ -257835,7 +258177,7 @@
]
],
"svg-scale-014.html": [
- "15662267c2e15a52b84b85c47293abdc9978bec3",
+ "f2acf1b0c66fe86ebd25898b731ffa3d28c5f0fe",
[
null,
[
@@ -258394,7 +258736,7 @@
]
],
"transform-3d-rotateY-stair-below-001.xht": [
- "8d9b610bf030a83a60185dadd3b26c6e546af261",
+ "bcb28dbd516738fb276047e4bb636b1032845ced",
[
null,
[
@@ -258410,7 +258752,7 @@
[
[
0,
- 14
+ 20
],
[
0,
@@ -291975,6 +292317,90 @@
]
],
"forms": {
+ "button-appearance-native-horizontal.optional.html": [
+ "44579ac29212bb9544c505e022fab0c1719437c5",
+ [
+ null,
+ [
+ [
+ "/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html",
+ "!="
+ ],
+ [
+ "/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html",
+ "!="
+ ],
+ [
+ "/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "button-appearance-native-vertical.optional.html": [
+ "3a0c61b4902c2e1b89893eddf493d04563435c0a",
+ [
+ null,
+ [
+ [
+ "/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html",
+ "!="
+ ],
+ [
+ "/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html",
+ "!="
+ ],
+ [
+ "/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "button-appearance-none-horizontal.optional.html": [
+ "2679c6f04d711d332468a85792c8500aa7de019e",
+ [
+ null,
+ [
+ [
+ "/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html",
+ "!="
+ ],
+ [
+ "/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html",
+ "!="
+ ],
+ [
+ "/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "button-appearance-none-vertical.optional.html": [
+ "b37565a4099b66bf1d1b0556b230b311c70f4fac",
+ [
+ null,
+ [
+ [
+ "/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html",
+ "!="
+ ],
+ [
+ "/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html",
+ "!="
+ ],
+ [
+ "/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
"color-input-appearance-native-horizontal.optional.html": [
"ef5fc29fcfd7f8c7231cea99eedff921792cc5ab",
[
@@ -302276,7 +302702,7 @@
]
],
"mq-negative-range-001.html": [
- "f311463877a3d3a76905461fe0fddf647e487047",
+ "761df3ac087b8aee9eb04e9d91c877f12472bcd6",
[
null,
[
@@ -302289,7 +302715,7 @@
]
],
"mq-negative-range-002.html": [
- "59a58a1d5c7ee4d2e054b41c7d06b69fb15bf185",
+ "e905b39231da5dc35d1a3abf1cd67a4b2b34aa9e",
[
null,
[
@@ -303000,7 +303426,7 @@
]
],
"offset-path-ray-contain-004.html": [
- "9848259133f6d5557787e9bf8f5cf29a0284f5b4",
+ "d5c5ecf3c7ca741698e9a89ed5396441d0747851",
[
null,
[
@@ -303009,7 +303435,23 @@
"=="
]
],
- {}
+ {
+ "fuzzy": [
+ [
+ null,
+ [
+ [
+ 0,
+ 20
+ ],
+ [
+ 0,
+ 10
+ ]
+ ]
+ ]
+ ]
+ }
]
],
"offset-path-ray-contain-005.html": [
@@ -304348,6 +304790,32 @@
{}
]
],
+ "negated-nth-child-when-ancestor-changes.html": [
+ "0d76146f19ad312d42a09cd89c14824424c193d3",
+ [
+ null,
+ [
+ [
+ "/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "negated-nth-last-child-when-ancestor-changes.html": [
+ "27f66ee3244dc58e4bb09a64222d8f2b55524ea0",
+ [
+ null,
+ [
+ [
+ "/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"nth-child-containing-ancestor.html": [
"a7f246328c8f5f48c7f32822ea8dfdecde474022",
[
@@ -308489,26 +308957,13 @@
]
},
"layers": {
- "2d.layer.endlayer.alone.html": [
- "a7a5933b33d0d9e6a183d1bd5ab3a2e88d6a507f",
- [
- null,
- [
- [
- "/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "2d.layer.endlayer.unmatched.html": [
- "5f5398323264e5cc33b4f6ebb744128b92d18946",
+ "2d.layer.cross-layer-paths.html": [
+ "7feebfdce6d1b8a712636654925fb6a143a8a839",
[
null,
[
[
- "/html/canvas/element/layers/2d.layer.endlayer.unmatched-expected.html",
+ "/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html",
"=="
]
],
@@ -308931,6 +309386,19 @@
{}
]
],
+ "2d.layer.reset.html": [
+ "aabf74cc4d1dd216f69658b6e6ab97a29eeab3ae",
+ [
+ null,
+ [
+ [
+ "/html/canvas/element/layers/2d.layer.reset-expected.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"2d.layer.restore-style.html": [
"2537f409d6d99e0175667725ffedd5c384071864",
[
@@ -308989,6 +309457,19 @@
}
]
],
+ "2d.layer.unclosed-nested.html": [
+ "c02aae4af116be203af40610444db1cf7b91624b",
+ [
+ null,
+ [
+ [
+ "/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"2d.layer.unclosed.html": [
"788889ee7ef1ca5fe1b33dd011dafa10e9d141df",
[
@@ -310015,52 +310496,26 @@
]
},
"layers": {
- "2d.layer.endlayer.alone.html": [
- "6a0e5cce71719615966c649a1623ed98e27637b6",
+ "2d.layer.cross-layer-paths.html": [
+ "f167ae00bdf18f985cab62f350466bc903dbddaf",
[
null,
[
[
- "/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html",
+ "/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html",
"=="
]
],
{}
]
],
- "2d.layer.endlayer.alone.w.html": [
- "ddb2671aaabf37d51b6f4167e8bd16bd2fb88998",
+ "2d.layer.cross-layer-paths.w.html": [
+ "5b1f7f949cc57e12c7477ef3229369407c20fc1f",
[
null,
[
[
- "/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "2d.layer.endlayer.unmatched.html": [
- "b204c49e5eb1d67dd4785b3cd2fc68afb2f90542",
- [
- null,
- [
- [
- "/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "2d.layer.endlayer.unmatched.w.html": [
- "2e1cb62c32a94ef4965b7cefdd5489055595acf7",
- [
- null,
- [
- [
- "/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html",
+ "/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html",
"=="
]
],
@@ -310873,6 +311328,32 @@
{}
]
],
+ "2d.layer.reset.html": [
+ "6fae595a84b7ac40ea0f38eed0edc2102024dec0",
+ [
+ null,
+ [
+ [
+ "/html/canvas/offscreen/layers/2d.layer.reset-expected.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "2d.layer.reset.w.html": [
+ "d050b90841a2fec48142ea0d69d04cd5bb8b3a04",
+ [
+ null,
+ [
+ [
+ "/html/canvas/offscreen/layers/2d.layer.reset-expected.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"2d.layer.restore-style.html": [
"a3593cd2a82748df9db8bd74a67dbc29dcaefb31",
[
@@ -310989,6 +311470,32 @@
}
]
],
+ "2d.layer.unclosed-nested.html": [
+ "b7be6d82423805c7d138ea3ee53561a2a9cc9433",
+ [
+ null,
+ [
+ [
+ "/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "2d.layer.unclosed-nested.w.html": [
+ "dd1c36ea471975155643be51277562e3e3e785c6",
+ [
+ null,
+ [
+ [
+ "/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"2d.layer.unclosed.html": [
"689ee801cf27dcb8b61e9e89c5655a31708d689b",
[
@@ -314447,7 +314954,7 @@
]
],
"video-controls-vertical-writing-mode.html": [
- "d124396ab2c0383febe73c557e94dfd1e6401ace",
+ "acd258811290c60258c3a0dbf6c290d207225bd5",
[
null,
[
@@ -329425,7 +329932,7 @@
},
"support": {
".azure-pipelines.yml": [
- "428411d04ab83f754150f2a955f82ee49ab6476b",
+ "4dae0798b03e7635d64e47036ea4ffc2d2d5d557",
[]
],
".gitattributes": [
@@ -329519,6 +330026,18 @@
[]
]
},
+ "private-aggregation": {
+ "debug": {
+ "report-shared-storage": [
+ "7ffdb70773d47d2e5943253d27520b5cece907ba",
+ []
+ ]
+ },
+ "report-shared-storage": [
+ "7ffdb70773d47d2e5943253d27520b5cece907ba",
+ []
+ ]
+ },
"web-identity": [
"2095182bd040631d1ecaaa70d456d67dee3aee15",
[]
@@ -333030,7 +333549,7 @@
[]
],
"iframe-with-embedded-popup-expect-no-hints.html": [
- "21efd76180c1542d6d06b2c67b5c57ffe8b9676b",
+ "96d2886f0e3e73a346c3a85fc334c8fd06e2b737",
[]
],
"util.js": [
@@ -352141,6 +352660,20 @@
]
}
},
+ "default-src": {
+ "default-src-sri_hash.sub.html.sub.headers": [
+ "6f2066063873ce43deefa16b7d021f0eba0f70cc",
+ []
+ ],
+ "externalScript.js": [
+ "2920b03c9bc98d16d4c7ebefaf8bcef268c3796c",
+ []
+ ],
+ "simpleSourcedScript.js": [
+ "deca86508fffd807ffd71dc2fc7554bbaba7e1e2",
+ []
+ ]
+ },
"embedded-enforcement": {
"META.yml": [
"1cdc709f21e2e435b69af943ae2d2e9c0731540f",
@@ -353489,7 +354022,7 @@
[]
],
"script-src-sri_hash.sub.html.sub.headers": [
- "25cd6541acac853f97723ab329a8c060a8609365",
+ "971525ff762b3fec2ec8b27706e21237ac07af40",
[]
],
"script-src-strict_dynamic_and_unsafe_eval_eval.html.headers": [
@@ -354437,7 +354970,7 @@
]
},
"fedcm-helper.sub.js": [
- "270ac1d743ab4c8b679256feba4b9c2f07bdf891",
+ "79136b5958fa584842daf5455e6f419851842d00",
[]
],
"fedcm-iframe-level2.html": [
@@ -374002,10 +374535,6 @@
"9ed21b722270dcb6a73620b40a3b253126fdbdec",
[]
],
- "border-image-6-ref.html": [
- "f3e3bb79c05336a3fa3aa0abe66260ddc8652884",
- []
- ],
"border-image-calc-ref.html": [
"f827ca7fd0b9f4e1e06334fcb475e38938a29237",
[]
@@ -374423,6 +374952,18 @@
"fe42b5325785950f31e2eb2d6cca9a15410af061",
[]
],
+ "border-image-006-ref.html": [
+ "8e5ef401ec4226c014a48b9dfb2fac5aa1cabb54",
+ []
+ ],
+ "border-image-007-ref.html": [
+ "9200edd797e1159d8de08e86acac63227cc07889",
+ []
+ ],
+ "border-image-012-ref.html": [
+ "c11db014019ff4616f7a1c259773194d71630f74",
+ []
+ ],
"border-image-image-type-003-ref.html": [
"690f9ad11ad0e63d57c8c7ee10737690b7c8a061",
[]
@@ -374672,7 +375213,7 @@
[]
],
"reference.html": [
- "439747a9ff2e21613c7cb5a6cb8fc8cb1311fd1e",
+ "95db5aa78c75ff5a6a2f1b00126afc3937cd66eb",
[]
],
"subpixel-repeat-no-repeat-mix-ref.html": [
@@ -376695,6 +377236,10 @@
"6c8261959f674aa8a80f1f1f8fda343e64450114",
[]
],
+ "container-units-sharing-via-rule-node-ref.html": [
+ "c664ce4ccf38f781834dfbdc4d38f8d7af57484b",
+ []
+ ],
"counters-ref.html": [
"303c1e89bdfe5449177a2d144f4be1e1760a80d5",
[]
@@ -376883,6 +377428,10 @@
"5e1e9bdde841828cbd4fc3d6cc165305361f4f36",
[]
],
+ "content-with-popover-top-layer-ref.html": [
+ "59b2304d9efff8796c1191c5f22627c0e18c60a7",
+ []
+ ],
"content-with-top-layer-ref.html": [
"eadc5f65d1e8bd875e271b0fd27540dac8d2ae5f",
[]
@@ -376933,6 +377482,10 @@
"a3f8079595378781de584179beeb63072c50810a",
[]
],
+ "spacer-with-popover-top-layer-ref.html": [
+ "6c4c65f58c32679f7396cf6cf9ae094b32546c23",
+ []
+ ],
"spacer-with-top-layer-ref.html": [
"e274b0fcaa1602c0528c60c1fc022cb9694b1ad4",
[]
@@ -377678,7 +378231,7 @@
[]
],
"css3-counter-styles-202-ref.html": [
- "52712e3fd07fb6e243eb9855c32ffaa546ee75c7",
+ "e7abaad87e5373be2f2c3f101846e1c1c3ae0b97",
[]
],
"css3-counter-styles-203-ref.html": [
@@ -377692,7 +378245,7 @@
[]
],
"css3-counter-styles-205-ref.html": [
- "7d8e6fb613e885c90bd12d9e09b2a176473743f1",
+ "45b7037a8c159aadfe01d8c9975de50a92e64cab",
[]
],
"css3-counter-styles-206-ref.html": [
@@ -392524,7 +393077,7 @@
[]
],
"mask-image-5-ref.html": [
- "19a251ef0fd89e2ea24fbea485e65414f07f8575",
+ "a24b349c5e7497e9a7532328d3bf3a90b971fe35",
[]
],
"mask-image-6-ref.html": [
@@ -394302,6 +394855,10 @@
"5f2f7bff26420e949093a822d8995d9fcc3f1f51",
[]
],
+ "scrollbar-gutter-dynamic-002-ref.html": [
+ "b1db1a8cb719dad46703275cf66cc6b2c20708e8",
+ []
+ ],
"scrollbar-gutter-rtl-002-ref.html": [
"e6510a081353db996c4ead14ad6a167b90d48297",
[]
@@ -400674,6 +401231,10 @@
[]
]
},
+ "text-stroke-width-subpixel-notref.html": [
+ "ba5e8d90f3e9ea0681610b0c83cd8d32fee834d8",
+ []
+ ],
"text-transform": {
"math": {
"text-transform-math-auto-001-ref.html": [
@@ -410852,6 +411413,10 @@
"528c4980de590bc48c3017b246052b561f170bbd",
[]
],
+ "monolithic-overflow-021-print-ref.html": [
+ "112b1ebdccf07881e49c9420cc0f214861126d30",
+ []
+ ],
"page-name-001-print-ref.html": [
"69c5c37b5a3cc4ed47fab1f8105e5f2351e2d07b",
[]
@@ -411143,6 +411708,14 @@
"a3cc6d3d8f56fd31c4b19d23af606d7c65487145",
[]
],
+ "negated-nth-child-when-ancestor-changes-ref.html": [
+ "bfa9d00e1b6ce666b8b3dc667dd7db07de8c48ad",
+ []
+ ],
+ "negated-nth-last-child-when-ancestor-changes-ref.html": [
+ "27f51e6da2864293bf9daf7f4c11c31678ebd8d5",
+ []
+ ],
"nth-child-containing-ancestor-ref.html": [
"6e6680d8c3f63b0539a62c7eb0bb010d48bc4409",
[]
@@ -411780,7 +412353,7 @@
"reactions": {
"resources": {
"reactions.js": [
- "5ed32a4fa48c816f57b2cd0f6df5e7deda95000b",
+ "0e4b94e02a911f3841b46ee3b283547997f81658",
[]
]
}
@@ -421636,12 +422209,8 @@
]
},
"layers": {
- "2d.layer.endlayer.alone-expected.html": [
- "607526e4376282dcb4b8a359ada7a23a5fdb3286",
- []
- ],
- "2d.layer.endlayer.unmatched-expected.html": [
- "e6dd85b7e261c50956d3018d6e2a56e4c3f87600",
+ "2d.layer.cross-layer-paths-expected.html": [
+ "c394ecdfe3904f0afb1e4879241cf38d985155e6",
[]
],
"2d.layer.global-states.alpha-expected.html": [
@@ -421772,6 +422341,10 @@
"22a9770331d82a0965e6f06f4f98dfe8c681da09",
[]
],
+ "2d.layer.reset-expected.html": [
+ "93131dca9cfee5953e4a06cee99ec1429d8f062d",
+ []
+ ],
"2d.layer.restore-style-expected.html": [
"1d0ac3558d1d4c15609c364a6e5678ed329fa272",
[]
@@ -421783,6 +422356,10 @@
"2d.layer.unclosed-expected.html": [
"c41b253c95ba2b4f970b6ae59b58e444df14d866",
[]
+ ],
+ "2d.layer.unclosed-nested-expected.html": [
+ "5e90134a2505d39da1285122f2df86fe05c8f027",
+ []
]
},
"manual": {
@@ -422511,6 +423088,32 @@
"d0524194c9186da948d150da7b36f0f1144a61f9",
[]
],
+ "fill-and-stroke-styles": {
+ "2d.gradient.interpolate.alpha.png": [
+ "af5ac0f07d64e7598e0ea6a8e37cff2a5c4ea2a0",
+ []
+ ],
+ "2d.gradient.interpolate.color.png": [
+ "af5ac0f07d64e7598e0ea6a8e37cff2a5c4ea2a0",
+ []
+ ],
+ "2d.gradient.interpolate.coloralpha.png": [
+ "552e6ee44b1a3bed7d474e198e7cf1ed3a1be5cb",
+ []
+ ],
+ "2d.gradient.interpolate.multiple.png": [
+ "86122450d3a35ef2db3c2917dfdb919fdfb9c4ec",
+ []
+ ],
+ "2d.gradient.interpolate.overlap.png": [
+ "5c2bb964e0fd379309797343aa869c195f2f742a",
+ []
+ ],
+ "2d.gradient.interpolate.vertical.png": [
+ "37d6a00c6279daf43fa436d201799b8c2e527cb7",
+ []
+ ]
+ },
"filters": {
"2d.filter.canvasFilterObject.dropShadow.tentative-expected.html": [
"86c5710132f348bd3e2332983d7211f4b3315cdb",
@@ -422518,12 +423121,8 @@
]
},
"layers": {
- "2d.layer.endlayer.alone-expected.html": [
- "607526e4376282dcb4b8a359ada7a23a5fdb3286",
- []
- ],
- "2d.layer.endlayer.unmatched-expected.html": [
- "e6dd85b7e261c50956d3018d6e2a56e4c3f87600",
+ "2d.layer.cross-layer-paths-expected.html": [
+ "c394ecdfe3904f0afb1e4879241cf38d985155e6",
[]
],
"2d.layer.global-states.alpha-expected.html": [
@@ -422650,6 +423249,10 @@
"2833849da67f06693a228d9d3cec8c5ba56c8a8c",
[]
],
+ "2d.layer.reset-expected.html": [
+ "93131dca9cfee5953e4a06cee99ec1429d8f062d",
+ []
+ ],
"2d.layer.restore-style-expected.html": [
"1d0ac3558d1d4c15609c364a6e5678ed329fa272",
[]
@@ -422661,6 +423264,10 @@
"2d.layer.unclosed-expected.html": [
"c41b253c95ba2b4f970b6ae59b58e444df14d866",
[]
+ ],
+ "2d.layer.unclosed-nested-expected.html": [
+ "5e90134a2505d39da1285122f2df86fe05c8f027",
+ []
]
},
"manual": {
@@ -422687,6 +423294,48 @@
[]
]
},
+ "shadows": {
+ "2d.shadow.alpha.2.png": [
+ "8764e89b371d41428f0ba45d9c0391e41b0dd8a2",
+ []
+ ],
+ "2d.shadow.alpha.3.png": [
+ "8764e89b371d41428f0ba45d9c0391e41b0dd8a2",
+ []
+ ],
+ "2d.shadow.alpha.4.png": [
+ "8764e89b371d41428f0ba45d9c0391e41b0dd8a2",
+ []
+ ],
+ "2d.shadow.alpha.5.png": [
+ "8764e89b371d41428f0ba45d9c0391e41b0dd8a2",
+ []
+ ],
+ "2d.shadow.blur.high.png": [
+ "743640b79f8810c193ae9ad86fdfaa76ee5f4943",
+ []
+ ],
+ "2d.shadow.blur.low.png": [
+ "99fb651c21bca0fe563843d987bdf0f0ff9a6db6",
+ []
+ ],
+ "2d.shadow.canvas.alpha.png": [
+ "8764e89b371d41428f0ba45d9c0391e41b0dd8a2",
+ []
+ ],
+ "2d.shadow.gradient.alpha.png": [
+ "8764e89b371d41428f0ba45d9c0391e41b0dd8a2",
+ []
+ ],
+ "2d.shadow.image.alpha.png": [
+ "8764e89b371d41428f0ba45d9c0391e41b0dd8a2",
+ []
+ ],
+ "2d.shadow.pattern.alpha.png": [
+ "8764e89b371d41428f0ba45d9c0391e41b0dd8a2",
+ []
+ ]
+ },
"text": {
"2d.text.draw.fill.basic.png": [
"70d7b046cb226cfcb2bfeebe3477d3b580d8270a",
@@ -422753,10 +423402,6 @@
]
},
"tools": {
- "PRESUBMIT.py": [
- "c7fb93ae6fd14e0006dda63ba5279524d6bad9b8",
- []
- ],
"gentest.py": [
"6574ff53238375b9018a8c307572efadf9259fd9",
[]
@@ -422770,7 +423415,7 @@
[]
],
"gentestutilsunion.py": [
- "0542e32571a0524090ab5800dbb258cb9acc2450",
+ "cf141f2f07475edb4912b6846aa67468648a6a74",
[]
],
"name2dir-canvas.yaml": [
@@ -422822,53 +423467,29 @@
"yaml": {
"element": {
"drawing-text-to-the-canvas.yaml": [
- "3443ad35b3cdccffb0dcb383b946dcd81a0521d5",
- []
- ],
- "fill-and-stroke-styles.yaml": [
- "9d35dde661c724d6f166d7bd5db7a423295b546d",
+ "55597b31594dedf449feba0761f298f83801eaf8",
[]
],
"meta.yaml": [
"e8c425042668653f6908e6cf25ad6bf658aeb2f5",
[]
],
- "shadows.yaml": [
- "7a7c115a7c44d450fc60d2e5bbb544cc5c75d225",
- []
- ],
"text-styles.yaml": [
- "407e34621091a6324cbd1ace8510738adaaec967",
+ "0eba21943c08be58e03b0f0930ca92566dc336e1",
[]
],
"the-canvas-element.yaml": [
"d6d8cd801b410909fdee32b7e0c9f903fda469de",
[]
- ],
- "the-canvas-state.yaml": [
- "045208615436efec1596a2f14cb62f02fa8e470a",
- []
]
},
"offscreen": {
- "fill-and-stroke-styles.yaml": [
- "5f794d61e6f31080804238818c58d14925de9ebc",
- []
- ],
"meta.yaml": [
"bd761937f40e8796f6192e09741c1c2bccf3df2d",
[]
],
- "shadows.yaml": [
- "ec1bdd101e7067d3a3fdf101b84f55a2c4d47813",
- []
- ],
"text.yaml": [
- "784a099aca09747325bbc800a0976031a4324d08",
- []
- ],
- "the-canvas-state.yaml": [
- "afb4cf956c6d564fc29b85ec7354361a123c9f5d",
+ "0907076cc8a5eb0da6adaabfb531c027325735c6",
[]
],
"the-offscreen-canvas.yaml": [
@@ -422898,16 +423519,20 @@
"408e932abe86b31ce3e8d88672e04abed12b74b2",
[]
],
+ "fill-and-stroke-styles.yaml": [
+ "e30eb010088699f6b15347c1722f3490035ae369",
+ []
+ ],
"filters.yaml": [
"a5c2b9864b6becd54f06d0639ddc96d46bfca263",
[]
],
"layers.yaml": [
- "8ca05bec84d72f48fdde9aa90e0d6ad1efceccd1",
+ "63edf62e3b83b552d3a9cd0c04b5a29bec544c86",
[]
],
"line-styles.yaml": [
- "604f4f3659a40b89b05f1bce3968f2580dce3c6f",
+ "47bf3af97ec75a2933384862c028106bce2b8e2c",
[]
],
"path-objects.yaml": [
@@ -422926,6 +423551,14 @@
"dd088aa396f47e70a6e66b0b9c7d8ffca0fa0e1e",
[]
],
+ "shadows.yaml": [
+ "366ac0b6072dfaa9de58abbda84525d9fe1806d1",
+ []
+ ],
+ "the-canvas-state.yaml": [
+ "045208615436efec1596a2f14cb62f02fa8e470a",
+ []
+ ],
"transformations.yaml": [
"0d2265be7aa0c94ccbddc41f4051dbf082bfc186",
[]
@@ -422983,6 +423616,10 @@
"iframeTest.js": [
"501a864d4677e1c7e5ddc0b4c4868ac8712e4723",
[]
+ ],
+ "redirect_none_to_credentialless.py": [
+ "7f0c35e93e69d7fe4c78a05d813b7f614e3e885d",
+ []
]
},
"video.https.window.js.headers": [
@@ -423598,7 +424235,7 @@
[]
],
"resource-popup.html": [
- "2957e35f59b6aef225cf46bcdd4430412de9e2a2",
+ "ee08bcb4962aed59f6221b9d97369e764a33ea05",
[]
],
"universal-worker.js": [
@@ -428483,7 +429120,7 @@
[]
],
"video-controls-vertical-writing-mode-ref.html": [
- "9a2d1d064139b4f58dc06c1d588c50b89a97aaec",
+ "e65bf6cbe808b4ea2674f3540a5d3845966a5dce",
[]
]
},
@@ -429033,6 +429670,10 @@
"delayed-broken-video.py": [
"4eae3261f765cc36ae60f99e25a6c52dbed62d86",
[]
+ ],
+ "media-min-width.html": [
+ "6d429d70fd20206208bfac2749fcd4aea72a1a59",
+ []
]
}
},
@@ -434316,6 +434957,14 @@
]
}
},
+ "https-upgrades": {
+ "resources": {
+ "pass.html": [
+ "5c7ca343e9b2bbe4774ed127d905c8c77b09e47f",
+ []
+ ]
+ }
+ },
"idle-detection": {
"META.yml": [
"adbdc7bd93d71cee1fb318dfd36a8bd5cd305892",
@@ -441132,6 +441781,26 @@
}
}
},
+ "private-aggregation": {
+ "resources": {
+ "private-aggregation-helper-module.js": [
+ "f5a8533d0f384391785f8f1af0fe29782296f081",
+ []
+ ],
+ "reports.py": [
+ "fc6260c784d5b2eae33c993acd106c46c75e50c4",
+ []
+ ],
+ "util.js": [
+ "7b3a2c54f880c4dcdd2f460e39a25281b11587c0",
+ []
+ ]
+ },
+ "shared-storage-permissions-policy-none.https.html.headers": [
+ "878191015163abd568cff4664c0b7dbe0b2239a6",
+ []
+ ]
+ },
"proximity": {
"META.yml": [
"87450781306a3941fe13d756a3761fdecd829016",
@@ -443421,7 +444090,7 @@
[]
],
"webxr-test.js": [
- "ab2c6faa0ee84ba95f5969de4f57d4c607d8c638",
+ "c5eb1bd14b881d9d6149d6fd0e9b627a5d9b4bee",
[]
],
"webxr-test.js.headers": [
@@ -450182,7 +450851,7 @@
[]
],
"pytest.ini": [
- "bf58dc409aa28b42d1dccc866ad14a49e8c6875c",
+ "3347ec6dbdbcbb20ab02875db0c086517abe1cda",
[]
],
"requirements_flake8.txt": [
@@ -450194,7 +450863,7 @@
[]
],
"requirements_pytest.txt": [
- "6dc497515bc452414df067fef55c72ac8f8b76fd",
+ "2ca04f876e4c0457a21c75461be95c7e10aadbbb",
[]
],
"requirements_tests.txt": [
@@ -450265,7 +450934,7 @@
[]
],
"serve.py": [
- "e5aa5f0d89683cec6c952841869418b00f24c2ec",
+ "1725399facab11c621633c606ff50f8e2ce4e6a4",
[]
],
"test_functional.py": [
@@ -458140,11 +458809,11 @@
[]
],
"script.py": [
- "d994c6388d8c2405cc52c5f81d60b516f701cf46",
+ "99b26927403515de31d822336ee4d5ed062f7cd6",
[]
],
"session.py": [
- "7c1fef30ae131993ab8adc0205fba11bbd6dea86",
+ "cdcef11b94f24cfa24232812126b28a12ed4c13a",
[]
]
},
@@ -458257,7 +458926,7 @@
[]
],
"run.py": [
- "58e0004f9be4b21e8ada52f91a0cb45459b910c0",
+ "15be2af2d3d7a969910deb3a83365c733354dd1e",
[]
],
"testfiles.py": [
@@ -458730,7 +459399,7 @@
[]
],
"print_pdf_runner.html": [
- "3ce18d4dd823e042e986ce94f2f858977a0ddb19",
+ "fbe09bab989d31e635c04b9f944b4498b8fe31cc",
[]
],
"products.py": [
@@ -458774,7 +459443,7 @@
[]
],
"testloader.py": [
- "950273c38941ca95ae3ab068f7573983d4da76f6",
+ "8cd24f2f5aecf75cb9f05e41a6fb48c45422a5ff",
[]
],
"testrunner.py": [
@@ -461906,17 +462575,17 @@
],
"bidi": {
"__init__.py": [
- "625cd3a6304c4d7d9118aa8071b66aaa970d9182",
+ "4e039d2a69ced81f11ec04615ca68d4a13329746",
[]
],
"browsing_context": {
"__init__.py": [
- "a887aeb8a459dfd7f6e8257f4bf633179628b432",
+ "e076885859e7e57dabe568c1e53fca05b9499f68",
[]
],
"capture_screenshot": {
"__init__.py": [
- "066c34f3f28ae7e74e083748a5138bd74a03c540",
+ "924f0521dd73dbffdd0676f57e660bb1b91d9e40",
[]
]
},
@@ -462003,6 +462672,12 @@
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
[]
]
+ },
+ "reload": {
+ "__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ []
+ ]
}
},
"errors": {
@@ -462268,7 +462943,7 @@
[]
],
"test_click_wdspec.html": [
- "a9451ec82bec97654896f697704218bb6068d14e",
+ "7c6eb6e6e2ea5efa26f9c2e3feffd26d45fb83fe",
[]
]
}
@@ -462644,11 +463319,11 @@
],
"support": {
"__init__.py": [
- "a7b33cc15f4652b9fec16cf202d0801e053beb55",
+ "0535edd2142e39aad37cc1a0ca58dca1fa01164a",
[]
],
"asserts.py": [
- "f5812bc8932360a68fa40237ca8a4e1b8ef2d205",
+ "04bd1993316be1bb449c81ccb22f0f623e38d215",
[]
],
"defaults.py": [
@@ -462656,19 +463331,19 @@
[]
],
"fixtures.py": [
- "eca9fda4bef1964515ac89bbc6c1efcf4000c50d",
+ "ba166ae8da87de03ec68c9c112f67c0d2a6036f3",
[]
],
"fixtures_bidi.py": [
- "39ed3a5bbfd8f77bb71c9566ba7b5880af81689b",
+ "6e53bf7c24390d4bf24b019ddd6a9cbbb209e699",
[]
],
"fixtures_http.py": [
- "03be83a20e125257ed3d1b423fbc991de40660f6",
+ "1533dca2bd986e541b41f85e6e9dc07a38a06e18",
[]
],
"helpers.py": [
- "45f4f4d23922dc3bf28d4d3117208f70ef90ca7f",
+ "c0d0cb11dc4d5156b7fcb16f418acd6da8b4682a",
[]
],
"html": {
@@ -462689,7 +463364,7 @@
[]
],
"render.html": [
- "d0408480dafbbeb34856553f176034489c51907a",
+ "6f1fadb64bee121740443089620ba68718d98855",
[]
],
"subframe.html": [
@@ -462697,15 +463372,15 @@
[]
],
"test_actions.html": [
- "0253add960792f79bef8a8747dac26661c4a2f86",
+ "40e4b5aa37c2f4ebd14d10a476b44ff7dbd6799e",
[]
],
"test_actions_pointer.html": [
- "f1fd9b2da3f860a4c2afcd4176bfc2aee067d2f8",
+ "dd169f0c5bcc292a554a72035a49ae6cec25816a",
[]
],
"test_actions_scroll.html": [
- "b6e281e581816f7f42b5e92387adc3047fa4f891",
+ "cc9278954a0e0bb278f940b2f6e091e0c90a086b",
[]
]
},
@@ -462715,7 +463390,7 @@
[]
],
"authentication.py": [
- "62067dd1667cd5535d4f90d35ae21474d4481666",
+ "db247af610a9b754920ee782e80330f15f26288c",
[]
],
"cached.py": [
@@ -462723,7 +463398,7 @@
[]
],
"headers.py": [
- "ddae62dc6afabfaa9ceca93f5215d4afc5d002ed",
+ "71c4901c44522847ec93d5fc5b57c4720fadbce9",
[]
],
"must-revalidate.py": [
@@ -462740,27 +463415,19 @@
]
},
"http_request.py": [
- "242dc9c9188708eaceccd32c9379e5c9d14fbbd4",
+ "a936d7f1f0408133227245d86e8bc713e8c64675",
[]
],
"image.py": [
- "055ebe71fbc568741432a9c19344996286876a2a",
+ "9597b05a22fe29c9bd107d5ff7e1e9a41de802a0",
[]
],
"inline.py": [
- "494ca74f92653d8d898e5922d0b0f1add0c4ab04",
+ "a0a8d3881ef5f48644c4ef1d6398dbad77dcc11f",
[]
],
"keys.py": [
- "e835a6a596f8d52d691afff812c9dacc5012b9e0",
- []
- ],
- "merge_dictionaries.py": [
- "72f1cab352dec4f333aa9f5498d6115276a3f836",
- []
- ],
- "pdf.py": [
- "573ec1af4b284fdb015931c8c0a4436ae2af7e79",
+ "c353644dddfde4178829b0253c2c5064d7bd3fd5",
[]
],
"screenshot.py": [
@@ -463542,6 +464209,10 @@
"9c2e4709fdd48e82b52ae14b65a43be2478ea9e9",
[]
],
+ "receive-many-with-backpressure_wsh.py": [
+ "8e35beebdf5027fdcb034eda27ebfb2a4c2dbd4c",
+ []
+ ],
"referrer_wsh.py": [
"9df652dc3cbf12f6364462839e340848dec8e08f",
[]
@@ -465956,18 +466627,18 @@
[]
]
},
- "window-placement": {
+ "window-management": {
"META.yml": [
- "2c6d60f4e71a754754425c0b633e68429ccbca71",
+ "74f926f230fb9f7e0026dd083d3f3e9ce5ac6093",
[]
],
"README.md": [
- "d9e324c9118f59e1a39fb5f30864230d7e50aaf3",
+ "e96a8a00b8b94c92755b96dc203ade889a83bcb9",
[]
],
"resources": {
"helpers.js": [
- "92442f913324fd46788297e6c9171ef2f0461db9",
+ "3c869f168e134cd844d1ad66585474edbdcff5ce",
[]
]
}
@@ -469145,7 +469816,7 @@
]
],
"database-names-by-origin.html": [
- "374b05c8fd292185403711a34515aa5566f34c54",
+ "5833b7e9ba9ba4f40b24a36d34a86983ce1a9b73",
[
null,
{
@@ -481537,7 +482208,7 @@
},
"accname": {
"basic.html": [
- "097123569dbd826e8a4c8a872f221a6b6657831e",
+ "d84f4dc3b95a062b61e1cc4bd2554d744545f82d",
[
null,
{
@@ -493561,6 +494232,13 @@
{}
]
],
+ "default-src-sri_hash.sub.html": [
+ "87fce5961fd1854303377ee939b21b6275b312cf",
+ [
+ null,
+ {}
+ ]
+ ],
"default-src-strict_dynamic_and_unsafe_inline.html": [
"bf45820ade2d75e4405ddc1780780345dcf7c997",
[
@@ -493742,35 +494420,35 @@
},
"font-src": {
"font-match-allowed.sub.html": [
- "ebba1e0096ca077dea9de0d92756d5ab56d6fb93",
+ "54e04d4f7af9a72fb0c3ab111767510cb5cd950c",
[
null,
{}
]
],
"font-mismatch-blocked.sub.html": [
- "b164cf0f172c97540d96a25fad239b67ccaaff16",
+ "fb491cb58d20e46cc3e5c6f0dadde4b2546351d6",
[
null,
{}
]
],
"font-none-blocked.sub.html": [
- "eae1b4986d9e58d5eeae595398a6ef5169ed5d47",
+ "b8dbb7530aa148a161e7b74fa7af0849b42c39bf",
[
null,
{}
]
],
"font-self-allowed.html": [
- "b8d46e5c9877d3845270bf1e0a686dbd8735aecc",
+ "aeca1285e4f6c7975818153c51e67b9c070e2059",
[
null,
{}
]
],
"font-stylesheet-font-blocked.sub.html": [
- "3b47d0b2e22f72bb39cce8f3f98f21b97d4f7004",
+ "4b34bc5746d438362aa2ae11c7714a91993d51b5",
[
null,
{}
@@ -496743,35 +497421,35 @@
]
],
"img-src-4_1.sub.html": [
- "9e4e345a1670bf951c4736978ad9e66da6496bed",
+ "a0ddceb64c6eb03f0822c94545f08aaebf303e92",
[
null,
{}
]
],
"img-src-full-host-wildcard-blocked.sub.html": [
- "23c33d56553817384b0ab6928eb8939459562c48",
+ "e7f3472072efe2a00db707f13f22f191cbb3cab5",
[
null,
{}
]
],
"img-src-host-partial-wildcard-allowed.sub.html": [
- "d2d36d1341c526d9ed8f83e92a376374563c9aa5",
+ "f80ff2d4dd93da01f0fd8a643c2b8f4af64cbe9b",
[
null,
{}
]
],
"img-src-none-blocks.html": [
- "9bc0326ef8a2d8ae8112de50e16f013f6a475e21",
+ "5a05970f6006c2977db2f4e828d79c5d6369e114",
[
null,
{}
]
],
"img-src-port-wildcard-allowed.sub.html": [
- "215c10089bb547645fe304f6d3345016ea2b99d5",
+ "993be396ae17057e822c473f2a9fc7064406b5f7",
[
null,
{}
@@ -496785,7 +497463,7 @@
]
],
"img-src-wildcard-allowed.html": [
- "72326ee6fc615ee15219c64b5f6a0a5d1bbe81c1",
+ "050a4d14100bb1ef719d6700bfbd37a97424af59",
[
null,
{}
@@ -497389,7 +498067,7 @@
},
"navigation": {
"javascript-url-navigation-inherits-csp.html": [
- "21c4fb33ce2d66db750d92a892e3871bd5d9b576",
+ "39f4747d19191d01a17bfd0da3c3cb6ca7d783d4",
[
null,
{}
@@ -497697,7 +498375,7 @@
]
],
"report-uri-from-child-frame.html": [
- "1be496194b637b74efdfc6c3dcc27dd1e6dd896d",
+ "2040a34a8f71502c30b099834d5e511d154e72ae",
[
null,
{}
@@ -498129,7 +498807,7 @@
]
],
"script-src-sri_hash.sub.html": [
- "b59206824dc8b3849a3324d943af1867c536c3b2",
+ "9216e2b0d4971fc46d0010e8dfa7375845187a8d",
[
null,
{}
@@ -501719,6 +502397,15 @@
{}
]
],
+ "fedcm-context.https.html": [
+ "7675866272116b72d4ce41c286d2c178847a5a4e",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"fedcm-cross-origin-policy.https.html": [
"b2a68b00c8e47a00dbc71534504dc89b62e1448f",
[
@@ -501756,84 +502443,84 @@
],
"fedcm-multi-idp": {
"abort-multiple-gets-through-first-idp.https.html": [
- "eb9f7da7b26200a936b4d6ce304466bb4c1128e4",
+ "ed7c1300bd1b95cd3f7d233e7a0ee638829f2990",
[
null,
{}
]
],
"abort-multiple-gets-through-second-idp.https.html": [
- "7e7ec2ce3d18b193183c2444b708c9d0927f1d2d",
+ "dfe8969932b8a88ba9f52284c99a0fb1e4628a71",
[
null,
{}
]
],
"get-before-and-after-onload.https.html": [
- "fa9ec7b52fca1faf6cdd29ce6deef31669417f7b",
+ "dc332870abc729eb10069ccae02012278c178abe",
[
null,
{}
]
],
"get-before-and-during-onload.https.html": [
- "93ee2075fe54128d55c8d69262134bad36840505",
+ "6a61891a3027c80d4ee6c360ad5b5f924b70f3ef",
[
null,
{}
]
],
"get-before-onload-and-during-dom-content-loaded.https.html": [
- "edc293daff8806efea54d86425d29828fdbdfd87",
+ "65aeb72dcf16f1e14f5720460160f12edb559b7c",
[
null,
{}
]
],
"multiple-gets-after-abort.https.html": [
- "b7b03e4a147d30e5d55ae8d757c0f666374bb7e7",
+ "12f88d3068e5847117242f511230d05e63c0b9fe",
[
null,
{}
]
],
"multiple-gets-after-onload.https.html": [
- "1a806a2049d39990039b10e690a8505ad1e5856b",
+ "bf8d717381b5c9d1c2864537d67f37ef7d997847",
[
null,
{}
]
],
"multiple-gets-before-onload.https.html": [
- "69a70ce47de9dbe946d0451cda0f0a68aa45cbd8",
+ "e754b86ec65c4b4ea41e3ada4f8e3f6ea51f1f83",
[
null,
{}
]
],
"multiple-gets-during-onload.https.html": [
- "e98b63ff339f5948188d7422a80e2ba70cd886b1",
+ "252732c9643374b42bc688d65e2ac5d14a5a7de4",
[
null,
{}
]
],
"single-get-after-onload.https.html": [
- "a34ff84aabdf3e4297af4a126f670d6587fc9b5f",
+ "a023e3c57fd9fd3319b5bf4681b8f80d880e30e1",
[
null,
{}
]
],
"single-get-before-onload.https.html": [
- "91195fc5a75f626796b73dbaf1d5dea386519c26",
+ "be94d17d8f2b69a33e8f68ae455764f947a044c8",
[
null,
{}
]
],
"single-get-during-onload.https.html": [
- "17939d2d9353fa255c746729f14a37c7383d1814",
+ "8383c3b9ff848a7395983ae8a45fc4bc9d7c42ff",
[
null,
{}
@@ -503486,6 +504173,20 @@
{}
]
],
+ "anchor-position-auto-002.html": [
+ "1c86fe2e4678f5fc7600d16f6580b24b60117330",
+ [
+ null,
+ {}
+ ]
+ ],
+ "anchor-position-auto-003.html": [
+ "33ef58b2af4692f071596aa005f4e72954d6c04f",
+ [
+ null,
+ {}
+ ]
+ ],
"anchor-position-borders-001.html": [
"1e2ecbc909cee0f9f301481c12ab6a8fc9b4ff0c",
[
@@ -504281,7 +504982,7 @@
]
],
"inheritance.html": [
- "dd9d6469336cbc6bbf4fa3eba84e6ba05afad6de",
+ "6e7697b9d81db6888077318389e1d70964241b3c",
[
null,
{}
@@ -504331,7 +505032,7 @@
]
],
"animation-computed.html": [
- "9152c49ee0cfedaff778f95765986392ea643f15",
+ "f8d34b889ba19dfc7d9fd4d644da499b979d4166",
[
null,
{}
@@ -504436,7 +505137,7 @@
]
],
"animation-duration-computed.html": [
- "ef2ef69059fa9f92910b7a716faf499a16a757e7",
+ "a8bc1600f80489414d3068ec06dc97daeedb8c69",
[
null,
{}
@@ -504597,7 +505298,7 @@
]
],
"animation-shorthand.html": [
- "8b482ff900f0d0a31189add815b08a7c6ca406b1",
+ "0856ab24a04634c9449b0b43decc19f3ac63de60",
[
null,
{}
@@ -505123,7 +505824,7 @@
]
],
"background-position-valid.html": [
- "1c05517c62aeee4f2d4837a3a9cf7b8880bd6e19",
+ "dac7b1012a009ed9def788bc06951b86de3d86e3",
[
null,
{}
@@ -505221,7 +505922,7 @@
]
],
"background-valid.html": [
- "cb086dd3ec87d902d47f209688f0cee21921ab97",
+ "e011c2238d2df73452dd011a8114415556ea790a",
[
null,
{}
@@ -506401,7 +507102,7 @@
]
],
"all-prop-revert-layer.html": [
- "ac665a9bedbfdb873f361a1bae2cb46ed4510fd0",
+ "fa29b5106a7bab8bb8f7f5ce5ccc864fbeda312d",
[
null,
{}
@@ -506711,7 +507412,7 @@
]
],
"scope-deep.html": [
- "e7dd96c5ac77c3d432a010332e43319f58471c53",
+ "0e88778202fc847e447e8f3838440b2c9babbefc",
[
null,
{}
@@ -508339,6 +509040,13 @@
{}
]
],
+ "content-visibility-with-popover-top-layer-006.html": [
+ "fbe8b9fbb777b2fdd632ddc0f17e69fbfed06bd7",
+ [
+ null,
+ {}
+ ]
+ ],
"content-visibility-with-top-layer-006.html": [
"36a79532a9a73bf13a675ac2b81537e5512b158f",
[
@@ -515829,6 +516537,41 @@
null,
{}
]
+ ],
+ "subgrid-baseline-005.html": [
+ "455439f79808db13751b7960982f0e5285d8daa2",
+ [
+ null,
+ {}
+ ]
+ ],
+ "subgrid-baseline-006.html": [
+ "23d2b3b60622619c5fee11c507c5d1ca71134b56",
+ [
+ null,
+ {}
+ ]
+ ],
+ "subgrid-baseline-007.html": [
+ "f8477bea50ce2317f2c321f8a60d9d86da070a9a",
+ [
+ null,
+ {}
+ ]
+ ],
+ "subgrid-baseline-008.html": [
+ "1ef23599f9571a7b9ba6f2ab6565f5ded1194759",
+ [
+ null,
+ {}
+ ]
+ ],
+ "subgrid-baseline-009.html": [
+ "b7bf46d8745fada176e5d9c69d2d2ea063be07bd",
+ [
+ null,
+ {}
+ ]
]
},
"table-grid-item-005.html": [
@@ -516015,7 +516758,7 @@
]
],
"image-set-parsing.html": [
- "053ab85422f0ee55f671492cd8e408b84cc7192b",
+ "801cb828c500a574b9cb25b801ad42dbaaf0898b",
[
null,
{}
@@ -517499,7 +518242,7 @@
]
],
"mask-position-valid.html": [
- "f2d2c4a8d14cab6739b3bf6e5559ce1a1ceb6c28",
+ "c70e18c47a3d369b79acb0e51410a87c2fae8112",
[
null,
{}
@@ -517527,7 +518270,7 @@
]
],
"mask-valid.sub.html": [
- "4b2ebfb7c782469e4239ff3358d71c208badb04d",
+ "e0646444d48dd3d92f85d2f50323e984dbe9877e",
[
null,
{}
@@ -520404,7 +521147,7 @@
]
],
"keyframes-004.html": [
- "67924fb01cdab74e34cf66243429775bf701c665",
+ "2dee8c2e64083d517c3a5c7c13a543c09c32a60e",
[
null,
{}
@@ -520425,7 +521168,7 @@
]
],
"shadow-cascade-order-001.html": [
- "c51696e483374e3d7346f105a7e8b85d8fce7606",
+ "59b71b0ee105bba69d68d8535832538f01a39e07",
[
null,
{}
@@ -521522,7 +522265,7 @@
]
],
"scroll-start-fieldset.html": [
- "da48c6ce25ecc7d570959f70a0735181200413fc",
+ "9a0190506e41ccb45f053df82f9963e09f7d7fcd",
[
null,
{}
@@ -521618,6 +522361,41 @@
{}
]
],
+ "scrollbar-color-001.html": [
+ "c056990934466f1804ca096ec7b8f3f5b8162646",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-color-002.html": [
+ "70bfa5586d98abe9aaa882e868d221f3812eda5b",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-color-003.html": [
+ "3fb42bedeafc4e0a98760d686935c5b9efd086fb",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-color-004.html": [
+ "5932cc5d4e1be0b9fb1d6f390e0e3bd2c27d51a4",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-color-005.html": [
+ "52d0027fba6e942fd1452402967e9fd09b5b8211",
+ [
+ null,
+ {}
+ ]
+ ],
"scrollbar-color-parsing.html": [
"17b649d54c8f12cb490bdd732770c95cec02273d",
[
@@ -521688,6 +522466,55 @@
{}
]
],
+ "scrollbar-width-010.html": [
+ "ea117030673bd022cb4e2d73795bb7586c90571c",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-width-011.html": [
+ "a5f60dc28b0cf9d09953b714e56bab8cbf7f8b67",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-width-012.html": [
+ "a685d6c05b8f941d3962ae349d350846e0e4f5ae",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-width-013.html": [
+ "f6460a4797a6cb377dd7df03340d734813604a25",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-width-014.html": [
+ "f737bc366023e54c766e6b9e2281f52defb309a2",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-width-015.html": [
+ "88a6af27bad259aceb69c3e1667097c70adece5b",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollbar-width-016.html": [
+ "7d64131743f18ab744246e034de8d540688178a7",
+ [
+ null,
+ {}
+ ]
+ ],
"scrollbar-width-keywords.html": [
"94ccd6ef6d550c83c97ba9525135cc309cc35842",
[
@@ -529419,7 +530246,7 @@
]
],
"animation-duration.html": [
- "fa78ece016dec262d5ab5d3272ac0ed9f4addeab",
+ "edff11c8a2ce5c6555069aa0e87a7d9d1a3705b7",
[
null,
{}
@@ -530987,7 +531814,7 @@
]
],
"white-space.html": [
- "f050da2839e5341093b14247e4d44ed79c6c742f",
+ "dfb6e08718372b9e501b8b1e008f626b7614e260",
[
null,
{}
@@ -533719,6 +534546,20 @@
{}
]
],
+ "HTMLLinkElement-load-event.html": [
+ "7062f1545061f23c88d38f9f3195dfbcaa133538",
+ [
+ null,
+ {}
+ ]
+ ],
+ "HTMLStyleElement-load-event.html": [
+ "8d4062ed0d4296b4da113c9eea8ddc0c079b6dad",
+ [
+ null,
+ {}
+ ]
+ ],
"MediaList.html": [
"8308ee89e4bacea93d438bb85a2481c590a8dfb8",
[
@@ -534471,7 +535312,7 @@
]
],
"shorthand-values.html": [
- "b64f7e9a12f87812cf3e77d218f8a627c87b27bb",
+ "f831cba2ca5f9aae6a4d610eeba3bfd42ab4d056",
[
null,
{}
@@ -536234,7 +537075,7 @@
]
],
"test_media_queries.html": [
- "20fca4affd24e5a3d1335b9d39420f653c7cd9fb",
+ "f9490bf051a111b4bc88f603d9f23e18e968c769",
[
null,
{}
@@ -536328,7 +537169,7 @@
]
],
"offset-path-interpolation-006.html": [
- "5b95501909ceca7d55ebcab03654d942edb43756",
+ "27bdd3d0c0e70ee334d548343241562c303df080",
[
null,
{}
@@ -536393,7 +537234,7 @@
]
],
"offset-anchor-parsing-valid.html": [
- "6cb4d44117fa6361fc87efdee22e79bc6df749b5",
+ "97a3c54131f1af3b71c635ee5ff37be8a3502ff0",
[
null,
{}
@@ -536435,21 +537276,21 @@
]
],
"offset-path-computed.html": [
- "7b5a8c16438612737af2a5f4fbc0755e7aa7a291",
+ "5bd857f62d2fffa40a630518e1fbd371e00c2c64",
[
null,
{}
]
],
"offset-path-parsing-invalid.html": [
- "28b45db8469f2b953df0381e9877bfc03f8b5b71",
+ "0c8f3ea04cd48c50052903b64dda3262d60fea6f",
[
null,
{}
]
],
"offset-path-parsing-valid.html": [
- "8a22b9420eed7831dcf564b64db8f9ebe36b453e",
+ "be74ed08a40815864c7abb7a72d16c87aa9d9902",
[
null,
{}
@@ -536470,7 +537311,7 @@
]
],
"offset-position-parsing-valid.html": [
- "bc0d19a460f4f22f9a061ae6932f31637c7231d6",
+ "032a5b42b46d5bae228e6a112c50623d76dbc1b1",
[
null,
{}
@@ -537864,7 +538705,7 @@
]
],
"modal-pseudo-class.html": [
- "079f4063d45c3af9d0a8b4e4993517bfcdec6f6a",
+ "f11de65eff677b4ed7fde36f6536f6518e461ab6",
[
null,
{
@@ -538609,7 +539450,7 @@
]
],
"HTMLElement.html": [
- "0a1d40199e633e9677da09f34e42200965b5241c",
+ "b89f2409121827df1084b5d027c7ac75f71b7d56",
[
null,
{}
@@ -539251,7 +540092,7 @@
},
"document-picture-in-picture": {
"beforeunload-is-disabled.https.html": [
- "3dd2b8a6d19fd55d7b2a2d91a9d7557ec8b0bfcd",
+ "35e3e2c5470184253dd071602909ad3699024061",
[
null,
{
@@ -542871,7 +543712,7 @@
},
"parts": {
"basic-dom-part-objects.tentative.html": [
- "175f5d555b9b1ecd8e2d503f0e8e7eb22fdf3b7b",
+ "6e52576b0b46570db7a37e4e59e0e9a3cfe9aa21",
[
null,
{}
@@ -543709,6 +544550,15 @@
]
},
"editing": {
+ "edit-context": {
+ "edit-context-property.tentative.html": [
+ "b6f46dc517bca88611c2d6fd18219fec75e65832",
+ [
+ null,
+ {}
+ ]
+ ]
+ },
"event.html": [
"16d640be2183722ca4f260452ed80b8bb09d2dd2",
[
@@ -547375,7 +548225,7 @@
]
],
"background-image-multiple-elements.html": [
- "11f8c05f9668bdd1f037e28f8df6773c8f3db951",
+ "d4998b47ff1ba841035d7b8c7e4ef2b71dce9384",
[
null,
{}
@@ -547517,7 +548367,7 @@
]
],
"image-rect-iframe.html": [
- "00986366e612b4285d2dd6d901638053bd8eaef5",
+ "3342f5688e784cc09f563b4c34b88b601f615e1a",
[
null,
{}
@@ -547636,7 +548486,7 @@
]
],
"observe-video-poster.html": [
- "5607733529671882bfde5be4c037b7a1614a84a5",
+ "ba1ddc7151ce18ce2c3fc4ce70ddfc4d1cc3e562",
[
null,
{}
@@ -586976,14 +587826,14 @@
]
],
"2d.text.drawing.style.fontKerning.with.uppercase.html": [
- "fd91a09d732af4c0b1b0ede99e8bd5459532f385",
+ "991f35af0dd841cc3c3671330a6454dbcb7ffe58",
[
null,
{}
]
],
"2d.text.drawing.style.fontVariant.settings.html": [
- "cf0a32305d0dbce3e0a7d408ca64083b7b7e0f27",
+ "cff5ad183a084adddc905ef76ff58e7a3ad6a5f9",
[
null,
{}
@@ -588961,6 +589811,106 @@
]
]
},
+ "layers": {
+ "2d.layer.invalid-calls.beginLayer-reset-endLayer.html": [
+ "74e05e1e48e7901aa0e2383eb66af0a7e14def3e",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.beginLayer-restore.html": [
+ "1979cb6c73a1097d4351ca80331d68f9ce853cfd",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.beginLayer-save-endLayer.html": [
+ "c635ac75b99d8de628fa5d4fad4e04e286b99479",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.endLayer.html": [
+ "c39a352d65fa5f5d41d550f199a8d859aec6cdb8",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.save-beginLayer-restore.html": [
+ "e2d4d5658904ccf8650309b7e9c27a57f1512cf7",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.save-endLayer.html": [
+ "f4308e1191dddebd530f12b759b72c84c27ebabf",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer-endLayer.html": [
+ "609cb19a7d861b23ac1453ce7f0b6f1693827d2d",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer-save.html": [
+ "965804029605fe048a81f9431b35db3e5921253e",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer.html": [
+ "055668333179fc7a8908bd5437d123fdccbf4d62",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.restore.html": [
+ "b7a370306fd418d552b4b538a953c2cecabb4751",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save-beginLayer.html": [
+ "816398c7fc6c10d97996159e0b17f8ba42da620d",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save.html": [
+ "d8df8cedcec37ba4505639141dbbff8b96574176",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save_reset_restore.html": [
+ "4c733263a636cdcad67c872744a9cbc13bc9883c",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save_restore.html": [
+ "27ae70278e8d68e28038d278a76f0f4220cf158e",
+ [
+ null,
+ {}
+ ]
+ ]
+ },
"line-styles": {
"2d.line.cap.butt.html": [
"f8c7cab1f2ecd2b0020291ee836b1bd4019c2bc3",
@@ -589025,6 +589975,13 @@
{}
]
],
+ "2d.line.fill.noop.html": [
+ "6dd8804ab033dafb3ce372240400d1171de84ee4",
+ [
+ null,
+ {}
+ ]
+ ],
"2d.line.invalid.strokestyle.html": [
"89a234ecc3831b641a81b2c65b89ece857a5c018",
[
@@ -591565,7 +592522,7 @@
]
],
"2d.shadow.canvas.alpha.html": [
- "222199e6463982df871004f74b710fb6e67abb1b",
+ "18818fa726593489977d56fecd62edd2ab19290b",
[
null,
{}
@@ -591698,42 +592655,42 @@
]
],
"2d.shadow.image.alpha.html": [
- "8d9022d61da7980dac5201f248af355bc2e63797",
+ "f00e1752dfce41d340507da48ab0272dde9aea85",
[
null,
{}
]
],
"2d.shadow.image.basic.html": [
- "351e75152214af6b352529b616cbf9f68b9f6093",
+ "d106e223db791cbac2ff0e9c994e88956a6a08c8",
[
null,
{}
]
],
"2d.shadow.image.scale.html": [
- "cbec7ccce16518c940732ee5b4f551ee203e6552",
+ "7e07fff3783c3e32cd23729643d3c3b24edf8806",
[
null,
{}
]
],
"2d.shadow.image.section.html": [
- "472559b736dc09effd4d9580a13e43b0e9ae0a45",
+ "a1b3e7032fb72bb25d07d1871d163f4645345e33",
[
null,
{}
]
],
"2d.shadow.image.transparent.1.html": [
- "768e961df0e69c5a34a0274cf5892d1788ea819e",
+ "74d8b22951024420ae6b5945fd2a88375c09166e",
[
null,
{}
]
],
"2d.shadow.image.transparent.2.html": [
- "a445b7aebe83ccd9ac283cac5e94a503740527b5",
+ "1a52a52c3fe16f4cb3825a18cad7f1018fcf4200",
[
null,
{}
@@ -591775,28 +592732,28 @@
]
],
"2d.shadow.pattern.alpha.html": [
- "8e602d6c2b273823ca51bad47fbfbd3afd7bff61",
+ "10b5414b1234d0eca2b2b20f8cf9cefb4cfd983a",
[
null,
{}
]
],
"2d.shadow.pattern.basic.html": [
- "c776d6bc3bcbc4ac2b6c761bb1314456d088b62f",
+ "47d2149a57e57b7c7203b00d855e0c68d2567d3a",
[
null,
{}
]
],
"2d.shadow.pattern.transparent.1.html": [
- "c3dca30138b7378941a314072b4b6890f5117a1a",
+ "c41dd8377871ff01ee988a74b871f932f9afcd9b",
[
null,
{}
]
],
"2d.shadow.pattern.transparent.2.html": [
- "ecb82412be2ec42879012ec1a05b5423c4732528",
+ "ddaf21fe9088b4a4565520f420a23146fc5e0deb",
[
null,
{}
@@ -591917,14 +592874,14 @@
]
],
"2d.text.draw.baseline.hanging.html": [
- "7b3a0a9373bc87de31ce263c5bd6d2fc482ef43b",
+ "3ad15f31501a0f47a3b95e5c1f8567fcf66a20d2",
[
null,
{}
]
],
"2d.text.draw.baseline.ideographic.html": [
- "8da9aabb942a17ad8cd63534539be447f9f4d09e",
+ "8d402223a4f213b5ecfedf78f7b5d292305177cc",
[
null,
{}
@@ -591945,28 +592902,28 @@
]
],
"2d.text.draw.space.collapse.end.html": [
- "15b802f1c48989df9e19a8c300c4363411e00552",
+ "ab49fcb4f600bf19cc1d3bb17b17afbefff6f556",
[
null,
{}
]
],
"2d.text.draw.space.collapse.other.html": [
- "3454cfb6fbacd51a78c4c2c77da0a29aee22876c",
+ "30727c858e4479e76bfdfdd6f7435a09ef66d1a1",
[
null,
{}
]
],
"2d.text.draw.space.collapse.space.html": [
- "20c5f70569daeb597a4aca5f52c591905530672c",
+ "23405071725a3bf7c6d0e535635bea3487d682f1",
[
null,
{}
]
],
"2d.text.draw.space.collapse.start.html": [
- "c06efba5c856e0c6ecb8701dd0c961cf29675b37",
+ "cee64201eedf2f9112c84a0b99f479632ca631a8",
[
null,
{}
@@ -591987,7 +592944,14 @@
]
],
"2d.text.font.parse.complex.html": [
- "7f11506b38231dfe647a9fb73225929ca17e4443",
+ "12e1d60e5684ace3713e16040fdca8c4186ba37f",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.text.font.parse.complex2.html": [
+ "d85765fcd3a6fb622733b1b182029ef119ffb353",
[
null,
{}
@@ -592043,7 +593007,7 @@
]
],
"2d.text.measure.width.space.html": [
- "b6f2ef50f761ae63c95b4fbf1a067f78669f8c7e",
+ "1cf93c032d43b8e6c9bafd46c231dc494e408b95",
[
null,
{}
@@ -594732,6 +595696,13 @@
{}
]
],
+ "2d.fillStyle.CSSRGB.html": [
+ "1670d642951f9d6da3aaa5b4c5f1fd76f478e61b",
+ [
+ null,
+ {}
+ ]
+ ],
"2d.fillStyle.default.html": [
"58075168e8aab857a262858ecf2a778ee11aeffa",
[
@@ -596665,14 +597636,14 @@
]
],
"2d.gradient.interpolate.outside.html": [
- "0dda6c0c23573c886a7b37574662c2bfa36cfdec",
+ "02ca008518f9ed64e1d4cc048d9652b7b0d89d57",
[
null,
{}
]
],
"2d.gradient.interpolate.outside.worker.js": [
- "66fc180e7e90de2e521e110c480ee23eeba667cd",
+ "d6c89616613bac3dd21b0f391e203af3846825e4",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.html",
{}
@@ -596735,70 +597706,98 @@
]
],
"2d.gradient.interpolate.zerosize.fill.html": [
- "71d5cb85dd6182d9c2b004aa96d499a32c28b09d",
+ "27579fc829bd7092b7b7178e0895fc982c7ba7ec",
[
null,
{}
]
],
"2d.gradient.interpolate.zerosize.fill.worker.js": [
- "3b86cec3afc9c209fe7b8036410e8da576eab0e4",
+ "916b1cb9779367a0685f27dac28189a0c4caa0ff",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.html",
{}
]
],
"2d.gradient.interpolate.zerosize.fillRect.html": [
- "1b3851cd99ae02365c445a7eb1fef96be94b7e61",
+ "9cf2c7350fe9e4af33a634d5f9be05ed6c615cbb",
[
null,
{}
]
],
"2d.gradient.interpolate.zerosize.fillRect.worker.js": [
- "f6ab1d9348761352ca2e4f91563bda7f611974fa",
+ "607ad85ae746597b714ef6771e6456478a1af554",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.html",
{}
]
],
+ "2d.gradient.interpolate.zerosize.fillText.html": [
+ "59f0964461983f00e1719a215b10711f569ca888",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.gradient.interpolate.zerosize.fillText.worker.js": [
+ "417b564e6d9e8879c8f3bd242ba1813ff7cade89",
+ [
+ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.html",
+ {}
+ ]
+ ],
"2d.gradient.interpolate.zerosize.stroke.html": [
- "3b66f6c12ad22df8253adf6cf416ca4ca8a889bb",
+ "562f46796c42f777a76b8d42201c30235dc8378e",
[
null,
{}
]
],
"2d.gradient.interpolate.zerosize.stroke.worker.js": [
- "7e215017485a128f9fdeb4a2090653b17e42e2fb",
+ "b969be6f850110f27eb2d34c4b19dc5fb23c9a10",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.html",
{}
]
],
"2d.gradient.interpolate.zerosize.strokeRect.html": [
- "e7fd7e7858bf1093fe0fa257de17e25a88224723",
+ "de1e57bbcca0c083e6333fe99136b0e019c4a9ce",
[
null,
{}
]
],
"2d.gradient.interpolate.zerosize.strokeRect.worker.js": [
- "d7344fb4e61254b16607165514e90138063b6027",
+ "b9884d4adf634c8db1e92bfe9da151a1325244e4",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.html",
{}
]
],
+ "2d.gradient.interpolate.zerosize.strokeText.html": [
+ "153ec102ac617416e0047202a275890bf7a6575d",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.gradient.interpolate.zerosize.strokeText.worker.js": [
+ "f0d719262768203334d327287510e8e3c8361ca4",
+ [
+ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.html",
+ {}
+ ]
+ ],
"2d.gradient.linear.nonfinite.html": [
- "bc10ecee537d17ab96ebfb3b68385916d5954619",
+ "6c8f8ec38a88bcd04b234e0059c6b15c14c9f31d",
[
null,
{}
]
],
"2d.gradient.linear.nonfinite.worker.js": [
- "87f689186bba5ca3cc5e017027d57260537e5b6e",
+ "9fd4949d7db53ebcf6cc080393a1278bdb1fb22e",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.html",
{}
@@ -596861,28 +597860,28 @@
]
],
"2d.gradient.object.crosscanvas.html": [
- "7ea9d84a4c06cce2278559bdb49093f0273f59ec",
+ "6d229ea3d5a64a764653a3534df12008e0816602",
[
null,
{}
]
],
"2d.gradient.object.crosscanvas.worker.js": [
- "f877d596ddffdc2a27acb897a5cf54dafad10d38",
+ "1afebdea1b0ef2a30fd3fb7ff62fc4ae2eed2515",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.html",
{}
]
],
"2d.gradient.object.invalidcolor.html": [
- "51160c586f2d846ee69762be787950ea29e12a9d",
+ "3db5afeeb544477a32d936e49923a01312e37d58",
[
null,
{}
]
],
"2d.gradient.object.invalidcolor.worker.js": [
- "40e84ba42be39161a6fb8e0a4939e4e677fb175d",
+ "33b524fbed2a25e766119dc88c3db218a1f064d2",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.html",
{}
@@ -596902,6 +597901,34 @@
{}
]
],
+ "2d.gradient.object.return.html": [
+ "779b941d20bdd2ed9ff6580f51724830f9c21365",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.gradient.object.return.worker.js": [
+ "a279eed4f3e5be54218becaa9bb69527e1659179",
+ [
+ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.html",
+ {}
+ ]
+ ],
+ "2d.gradient.object.type.html": [
+ "aa72183ca5d1226c539f128915038e1954f1fed5",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.gradient.object.type.worker.js": [
+ "e0101dfca41eb8b74373ab3789ed2bb51aa45b0e",
+ [
+ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.html",
+ {}
+ ]
+ ],
"2d.gradient.object.update.html": [
"00c60041e733a78da95d297f4ceae4aef7e6b671",
[
@@ -596917,168 +597944,168 @@
]
],
"2d.gradient.radial.cone.behind.html": [
- "9a07ec4dc2f418a94979e1b0fd0a40350b471332",
+ "4a639778ccdce406816f5133d7f017f9a0b3f282",
[
null,
{}
]
],
"2d.gradient.radial.cone.behind.worker.js": [
- "806a83f7a533e00ec3b52d4f6e6858a0aa58f95d",
+ "114dab0a2197cf53de47ef124d5bbe1940a4efc3",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.html",
{}
]
],
"2d.gradient.radial.cone.beside.html": [
- "1ab27b46c41865d08610b6218e2167b7d33fa80a",
+ "94fe289b1a4795a02692b79589ac0a21d81fb50e",
[
null,
{}
]
],
"2d.gradient.radial.cone.beside.worker.js": [
- "2bb0860a6d25a3cfd1c724ac3f7c3403727acec3",
+ "e6f53fb999276ab7766769ccd963f1a79164e45d",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.html",
{}
]
],
"2d.gradient.radial.cone.bottom.html": [
- "87cac451d6427cf155ef1331c94bb1800a26f2ee",
+ "7cf9867dba8835ef95730d8c860faf35c6254603",
[
null,
{}
]
],
"2d.gradient.radial.cone.bottom.worker.js": [
- "a9c859e7ceaaa0e804b53709e5e6cf1bd26c4482",
+ "132d131bcaef0a84dd25a35c79b97b81458d32fd",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.html",
{}
]
],
"2d.gradient.radial.cone.cylinder.html": [
- "649b83cc8f8c7227dfde27eb94e380b4afba03e6",
+ "27f75a8a743ae373c125c47f08b368bd6be01a9a",
[
null,
{}
]
],
"2d.gradient.radial.cone.cylinder.worker.js": [
- "8223f5265548b5a060ec20eb42b93f4f08647b74",
+ "9534174757b9fc6825ef11af957cde09f47b258a",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.html",
{}
]
],
"2d.gradient.radial.cone.front.html": [
- "6ad51c17955e4a89580d84e70fb32e6398e71905",
+ "b46155701c9ce8a3ab16f385731741da9445acba",
[
null,
{}
]
],
"2d.gradient.radial.cone.front.worker.js": [
- "a1eb55f2ecc309e1389100e622d37dc47ff6d85b",
+ "fffce0f9f2f572523df964e78c7d77230f0c4649",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.html",
{}
]
],
"2d.gradient.radial.cone.shape1.html": [
- "7de944a5209e2cf06ee98fd5a95ca63467ec6088",
+ "5c4d8125265df8f994bcc4d8d240f95421104fe3",
[
null,
{}
]
],
"2d.gradient.radial.cone.shape1.worker.js": [
- "0d211a0c67a017023aa02c0e587faf6b63de8636",
+ "5bd3f5eafa94ef2b6c7c9b746b60b60a3c639975",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.html",
{}
]
],
"2d.gradient.radial.cone.shape2.html": [
- "a748546c1a8f4b047440b4c00076a88546c361e4",
+ "1dec145e58ae062037cbe6a113a45044bd246abb",
[
null,
{}
]
],
"2d.gradient.radial.cone.shape2.worker.js": [
- "2f561598b9ff70a523177dfda08fdef11ce0a54b",
+ "31638cff3d5624a0b49196c88f825bc8030741df",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.html",
{}
]
],
"2d.gradient.radial.cone.top.html": [
- "802006beecd47633957f598b07bcdab7682e97fe",
+ "6cffa28175ae44d0a6ae04b1dbe9b1c48aab9d46",
[
null,
{}
]
],
"2d.gradient.radial.cone.top.worker.js": [
- "731ee8f807c769f265ffdde131aa72eab5917e12",
+ "85a9eae40542a79ce2dab05041dc0cf17f14acfa",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.html",
{}
]
],
"2d.gradient.radial.equal.html": [
- "3786e180f3bdcbc7b7f58c5d16e3c2e710400346",
+ "52319ef6126b61ce125b819900d1184370becb09",
[
null,
{}
]
],
"2d.gradient.radial.equal.worker.js": [
- "d046809a314f66b2a09034cd8f0116691c020e96",
+ "7f5ad50ff390b760cea8a477a7df4c7a7db98f38",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.html",
{}
]
],
"2d.gradient.radial.inside1.html": [
- "db269a9b926aca3d3db7855f629e730dd96127ad",
+ "f0da2c2742ad96e131d9925435baf52e775df590",
[
null,
{}
]
],
"2d.gradient.radial.inside1.worker.js": [
- "bc48654ece556af6fb00937353a2668307bd43bb",
+ "37ed851ab31dd33d47d13884cac09bd83c0c4e62",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.html",
{}
]
],
"2d.gradient.radial.inside2.html": [
- "23de3b00f863a99886da9f87a1fa21ac0ad18ee9",
+ "3f255027a160e76fae41f049a04a012e9da99662",
[
null,
{}
]
],
"2d.gradient.radial.inside2.worker.js": [
- "ffc1040d0b0ab3c84b97d10cf7a45db8ba896afa",
+ "0f36051e6a190e1d12b0e452858752704e65f92f",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.html",
{}
]
],
"2d.gradient.radial.inside3.html": [
- "bbb2ecbcdcaa8d41a7eed5434f06d69281674daa",
+ "1ef80a568ee6aa85eb3761aceed9c3ae89d52d61",
[
null,
{}
]
],
"2d.gradient.radial.inside3.worker.js": [
- "792d9e7852b9a4ee5236efe4fde14ab1d1b017e6",
+ "3c9131dbb3f3df0c35eed9a06e58fc1f56426a2c",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.html",
{}
@@ -597099,98 +598126,98 @@
]
],
"2d.gradient.radial.nonfinite.html": [
- "8ba0476938d7e7ec664170a03b17720a16229bea",
+ "4f068bbda576b63dc549434b3c07fe6592a19143",
[
null,
{}
]
],
"2d.gradient.radial.nonfinite.worker.js": [
- "dd25e607b2c8dabcda4d27bf2ac936aeb0ab21af",
+ "641a341ecc0dfc89787b2c3e4109ef67dd7c5e8e",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.html",
{}
]
],
"2d.gradient.radial.outside1.html": [
- "6c65f23960a9b7e365ed92cd8ea4ccdd9bb4b64a",
+ "61fed27df87677c2aa82e16e56644f3043231856",
[
null,
{}
]
],
"2d.gradient.radial.outside1.worker.js": [
- "d7beb71d2f2ffdfc060f42de8501b15349237c2a",
+ "b23eb81d148e96a4d38b68539952dd3f057115d0",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.html",
{}
]
],
"2d.gradient.radial.outside2.html": [
- "8f4c48ebc1284ca1b6a79e852733a78b4f72abe6",
+ "814beccf510b580733ab8c4a09937fbad0a65d9c",
[
null,
{}
]
],
"2d.gradient.radial.outside2.worker.js": [
- "6c753e38b10e063493f8662d40b674863e8d4b42",
+ "44eb4f4b2ce46a46591d930ebc8a6bfaac102e24",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.html",
{}
]
],
"2d.gradient.radial.outside3.html": [
- "5cfd30876d668206ba8bc0096548921f800e6ce6",
+ "632ada6b9ceed5d2885b75dfb5291f36c6fa52c4",
[
null,
{}
]
],
"2d.gradient.radial.outside3.worker.js": [
- "70593ceb292d8c6e46647282f8f8807e464ed450",
+ "16d0c1a8ee0dbaee34d0bd9524e688710e2756cd",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.html",
{}
]
],
"2d.gradient.radial.touch1.html": [
- "983071ec6530edbd47d20712f5396c7dfe997acc",
+ "38235188133209b1123dff491fc46c242c2b3e7f",
[
null,
{}
]
],
"2d.gradient.radial.touch1.worker.js": [
- "21bbce1e74125e4933508c76c2f714ef0539179e",
+ "853ad165a3f10f575511171cce3cedb7e4f0221c",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.html",
{}
]
],
"2d.gradient.radial.touch2.html": [
- "bd23924988288de3e319e2bfbfaf1487706732d4",
+ "af5bbd78971fa2b3bf0fa0e7f265a2e3cb0f1d96",
[
null,
{}
]
],
"2d.gradient.radial.touch2.worker.js": [
- "75abd38d5d765ade99b381ca717a25f81bd38b8b",
+ "434c27b0b1f2a9eee41f21d88d7082bbb4994d62",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.html",
{}
]
],
"2d.gradient.radial.touch3.html": [
- "bdaed6f7daa822318fbb073e162bbe89be37c8f4",
+ "1cf578bc80db5735de11929bbcc031619e5211b0",
[
null,
{}
]
],
"2d.gradient.radial.touch3.worker.js": [
- "b2f3b0b4102e1b4cfefe49e340b1460fff4d8516",
+ "34fb0caa4489107c123049cfed706c38634962e5",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.html",
{}
@@ -597239,392 +598266,406 @@
]
],
"2d.pattern.basic.canvas.html": [
- "6f66f500e3792654bde4648623a26321fd971302",
+ "f82a259e439ed18c9a167b2ecdb75b2690c37a85",
[
null,
{}
]
],
"2d.pattern.basic.canvas.worker.js": [
- "6f6b882416aa13e733e7ab54bd6560f6d548180f",
+ "510723f009d3792830b61699d14a18835b9fe5c5",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.html",
{}
]
],
"2d.pattern.basic.image.html": [
- "9efa9d6363cc48da1e038b5009b10228d970e53d",
+ "ab7b7bbeb56de43d55dbbc1d77d2e6434e7fd5f4",
[
null,
{}
]
],
"2d.pattern.basic.image.worker.js": [
- "776f1dbabd80bdcc3e3269dd18d132ce97e5dd9a",
+ "14cfcbc9939e7a365131e549489cfae828f4b3b5",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.html",
{}
]
],
"2d.pattern.basic.nocontext.html": [
- "9fa124277ea3fd7facb2d7fbe2662c36d6a4f931",
+ "66e301a002f052a8ff78fe701807331558dd245a",
[
null,
{}
]
],
"2d.pattern.basic.nocontext.worker.js": [
- "11c307653d5385ab2813b55594af7f08b748feda",
+ "f6c24c82ca2b24a6d0651f2f568ca1a2bbdeca51",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.html",
{}
]
],
+ "2d.pattern.basic.type.html": [
+ "1edb4fd22789b25cb6e5f8e1a49d427e5d5515c7",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.pattern.basic.type.worker.js": [
+ "56a8a7d23cd4713810dfaebe3bce94d1071cc9f0",
+ [
+ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.html",
+ {}
+ ]
+ ],
"2d.pattern.basic.zerocanvas.html": [
- "c7f61889ad5c969639427ebe3b38e5ace9c00ac0",
+ "7100c8313fc20dcce3e2fb3e18cdc0549eb1c998",
[
null,
{}
]
],
"2d.pattern.basic.zerocanvas.worker.js": [
- "caeff7cdfab3e1b56ba271b49820e94fae991f91",
+ "9bf487cf7475312c048e734b18eb711796d5d9ed",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.html",
{}
]
],
"2d.pattern.crosscanvas.html": [
- "fbb7e5266e8b7842a9868e3fe388999ac3273623",
+ "bdf89021bb1c943b4a3bdebe71ae5bc9195f6ae7",
[
null,
{}
]
],
"2d.pattern.crosscanvas.worker.js": [
- "bd24b44b0c9e68592db03123922afc27b2b79ee2",
+ "d9004fc028bca07f8e38e7de68d5e548cf0c50fd",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.html",
{}
]
],
"2d.pattern.image.null.html": [
- "4297814be97f245427652d37e61aa4ef0b509257",
+ "fbec25862d1d68bd4285a8c047718d747f351b11",
[
null,
{}
]
],
"2d.pattern.image.null.worker.js": [
- "c7d9969619b27a10a5b9ef9794d73a129595eb6b",
+ "a68ddfdbd72b9d4a9937dd279b8cffca53f89307",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.html",
{}
]
],
"2d.pattern.image.string.html": [
- "469f2236fed3d1b69c55c0dd88b259581b75f6b8",
+ "ff7355d2a46bb3b14581fcc46d88bf3a36284c65",
[
null,
{}
]
],
"2d.pattern.image.string.worker.js": [
- "f8525e4a49487ed59d762e6772c53ece4a162c79",
+ "dc53d82292c269baa3ab0fd132cf3aa1d8b48424",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.html",
{}
]
],
"2d.pattern.image.undefined.html": [
- "475d8ddafaca795302cedba56ae06135c001e561",
+ "845f823e7fb01b6cdd32b8ed30e4be07db218a41",
[
null,
{}
]
],
"2d.pattern.image.undefined.worker.js": [
- "dbfdbe9a1e1bbfb11c2c77437e892d46d2268945",
+ "32f57494930cbfea928c5c31f0dcffacbf447022",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.html",
{}
]
],
"2d.pattern.modify.canvas1.html": [
- "11586f5aa7230da02bbe9d461325b4b748a98ab0",
+ "ebeb92c7f5a7797aa4e086802f107db8971d0f83",
[
null,
{}
]
],
"2d.pattern.modify.canvas1.worker.js": [
- "3dde0ef9a07ef73492b81fcaee8b829636cb4c60",
+ "8e4f9ed4473af4bb1d43f6f41b737313dcfbfa30",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.html",
{}
]
],
"2d.pattern.modify.canvas2.html": [
- "568140a8db34a657a26080cd3cae4f961e13b0fb",
+ "042ebba3b76e64bc7d9a77f55886f5a5917ff558",
[
null,
{}
]
],
"2d.pattern.modify.canvas2.worker.js": [
- "fd70a2fcbb9633abfdbc0bc82f9d5d8bbcae05cd",
+ "ed17db8127b02f34801204a84e1415d8b008997c",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.html",
{}
]
],
"2d.pattern.paint.norepeat.basic.html": [
- "a60a61efc26e4ce591d6a569701d8ad8b7bc422f",
+ "8ab1c8eb402bd0465437e5f12d1b28f17969e31c",
[
null,
{}
]
],
"2d.pattern.paint.norepeat.basic.worker.js": [
- "13c5dd2815610c52ac1feb21bf0235ae692854c9",
+ "9ac4e1605c7c03388fe29fc23530b6c9c854d54a",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.html",
{}
]
],
"2d.pattern.paint.norepeat.coord1.html": [
- "4a254b3afcf0959d7ed239dab5896d2dc20bb39b",
+ "4bdd356df7a780533ed839462f4f5c4998080785",
[
null,
{}
]
],
"2d.pattern.paint.norepeat.coord1.worker.js": [
- "948da3a132acfe01d8b1073293cb0bc0316dd309",
+ "6c4a1409b7d4fc3360f62919ef5e9d47937a2668",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.html",
{}
]
],
"2d.pattern.paint.norepeat.coord2.html": [
- "306428a61628860c343f3aa6ef193aac66b25d6e",
+ "b9164ec6a94063d69a31557f2c57282cec7a64ce",
[
null,
{}
]
],
"2d.pattern.paint.norepeat.coord2.worker.js": [
- "fa90ff652a23a0c9ec904aec545c82a3742d901e",
+ "d2fdd86022a318bed3776f49e80b61fd301afb5a",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.html",
{}
]
],
"2d.pattern.paint.norepeat.coord3.html": [
- "556fca6beffc1bd12fca097ade8f20cc70337b5f",
+ "e2983948c2ddf5a2bcb4cc6713de5ed9544abb55",
[
null,
{}
]
],
"2d.pattern.paint.norepeat.coord3.worker.js": [
- "834516e96a49526f97597abb4b2591121e62f4e6",
+ "584a5d6cfdd48a7675e514bcc9f2309578e85fbd",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.html",
{}
]
],
"2d.pattern.paint.norepeat.outside.html": [
- "c049b79aeb9342b981719f543e9cad270685a932",
+ "43a718d44aa70251a2613994884ce779f5b8db7a",
[
null,
{}
]
],
"2d.pattern.paint.norepeat.outside.worker.js": [
- "93e7a312fb50856b8a949c98d9f10284232a2a57",
+ "0b5fef95ce0e7d2ae12897d4ea2b697df4bc3ce6",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.html",
{}
]
],
"2d.pattern.paint.orientation.canvas.html": [
- "f7305573c4668f65f9bb18a8a03cd4594e418fd3",
+ "b63535c70653f0348c796984b92f6aec96b560f2",
[
null,
{}
]
],
"2d.pattern.paint.orientation.canvas.worker.js": [
- "7896c70def22cb760f6cbc47dcf5d971eb424591",
+ "2fbe52af73647d81d1f3000158cdec688c28b748",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.html",
{}
]
],
"2d.pattern.paint.orientation.image.html": [
- "c5dc174416a5d4c04a53223a11cda328c8d97600",
+ "0b3645981e3cb6f40df906e9b8be27e185d5ade1",
[
null,
{}
]
],
"2d.pattern.paint.orientation.image.worker.js": [
- "56b072be4dd678958717d8925ee19ff11bacae22",
+ "b303b2d813b7b540ab6e9f7ad72aa0d0a1234ba9",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.html",
{}
]
],
"2d.pattern.paint.repeat.basic.html": [
- "9327111eb7a46a95ade0c99b083cdb35ef9d5fde",
+ "b6647f776ed886855c1aaf34a837044d9bef8935",
[
null,
{}
]
],
"2d.pattern.paint.repeat.basic.worker.js": [
- "6e77679552a819365e7a4cc69fad2f480ba419ae",
+ "37f4c04228c2214698446c88a9676cbb834ea1b0",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.html",
{}
]
],
"2d.pattern.paint.repeat.coord1.html": [
- "098abc71651d2ca23e906b14c2b072f4fde62a87",
+ "54b24ac705b60be780e4a48382c1daa528769193",
[
null,
{}
]
],
"2d.pattern.paint.repeat.coord1.worker.js": [
- "28c8d07b6a4b45c28b3a3b4cfe04baa6330c8386",
+ "efbd1c58469bd780dbe89aa495852712892d36a8",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.html",
{}
]
],
"2d.pattern.paint.repeat.coord2.html": [
- "4ee7aac5fa861436445facd5b5c7787892dac649",
+ "a77ce2c6964c38d89bcaaefacbe379eaedce135a",
[
null,
{}
]
],
"2d.pattern.paint.repeat.coord2.worker.js": [
- "6b2228e558c67551909dcfe9b1f4882357cbbbdd",
+ "db707ecb0a656fd783d43aca1227075415f46541",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.html",
{}
]
],
"2d.pattern.paint.repeat.coord3.html": [
- "ed1bb4243d463b08dde2cea67146151c5aada6ad",
+ "10f380fed3552551545c9fe0d78008dbbc2c1a83",
[
null,
{}
]
],
"2d.pattern.paint.repeat.coord3.worker.js": [
- "fc3911fbb136da63179284ef491ca5f9d482cbb1",
+ "e58cddccfeb2f0873cf64a0cffa25495fcdf59cc",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.html",
{}
]
],
"2d.pattern.paint.repeat.outside.html": [
- "420562c5efdd0a874f002724705145e4515af1ba",
+ "6558e07c5b627ac980581e589f52c44df2bd3f4d",
[
null,
{}
]
],
"2d.pattern.paint.repeat.outside.worker.js": [
- "b4d6774ec732a6388466b6a26ccd3b24e9861889",
+ "4a173af0b40a5eab5531d8037855441cb7bb1e06",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.html",
{}
]
],
"2d.pattern.paint.repeatx.basic.html": [
- "ee2c477c936d3c63d05a17d53f23bc02e4b0652d",
+ "494b72cfb94ab88351aa0d47608bd9c95f5dce0b",
[
null,
{}
]
],
"2d.pattern.paint.repeatx.basic.worker.js": [
- "157207a7c54733b1ddfdbedb6c2fbd08975520c0",
+ "e776f7a008a959b895ea3a4342095ba16adddebf",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.html",
{}
]
],
"2d.pattern.paint.repeatx.coord1.html": [
- "0e9a92e51cbb55bd88b27c9cb5a6ed0a748a7194",
+ "6caef0cb1fa8fbfa7f5cb4dfe26993d61d0882c5",
[
null,
{}
]
],
"2d.pattern.paint.repeatx.coord1.worker.js": [
- "684d2b7b4cbfca33fe968be111756d501067feb9",
+ "57c2102cc834952d05feed42d985fcc26b2376e6",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.html",
{}
]
],
"2d.pattern.paint.repeatx.outside.html": [
- "83e8ef37dc86e05ff75fa08ee35084e8c5ce2821",
+ "b3229c8d875fc15972d14da52fbb936cf8139b37",
[
null,
{}
]
],
"2d.pattern.paint.repeatx.outside.worker.js": [
- "bbb7b9055dd4d856db7e248eddef6c5e660a0baa",
+ "e40f6aa20751a95d7ca5304a4aea3a3740e98a44",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.html",
{}
]
],
"2d.pattern.paint.repeaty.basic.html": [
- "48948452af0fac0c4f469650d3e0fd727c4daa25",
+ "d88f3a0ab659ef47945be75b26b0176bd538ad5a",
[
null,
{}
]
],
"2d.pattern.paint.repeaty.basic.worker.js": [
- "0eec87ca75f771c6a6533e7df9ced2c1161d7a4d",
+ "6a53b5dc4d2027e3933c12c7d341578deda13937",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.html",
{}
]
],
"2d.pattern.paint.repeaty.coord1.html": [
- "79ca84193e86b65d918ccbcd7ec1fc00186429fa",
+ "59bfeb2abf1c97528c27092c6e78788246947388",
[
null,
{}
]
],
"2d.pattern.paint.repeaty.coord1.worker.js": [
- "c5f0f4bcc24f23902f789b8bca4710961189f966",
+ "d59abb6e0751a37ef9a9e0b464055455b1012859",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.html",
{}
]
],
"2d.pattern.paint.repeaty.outside.html": [
- "f7fcc3e45a6e52ddad976f1fdfb6cc3e565aea59",
+ "ad2bd3383f3a3fd6223543dd524308d4f69df37e",
[
null,
{}
]
],
"2d.pattern.paint.repeaty.outside.worker.js": [
- "7201c3f133c26713812bf20d7fd9005de5bd51a8",
+ "c4feba10ca228136279d0220033531575af72ae3",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.html",
{}
@@ -597645,14 +598686,14 @@
]
],
"2d.pattern.repeat.empty.html": [
- "550edecf1e14a46f1bf4a5fe2de66d2e3c63b724",
+ "c2197893d7849589e90abf8b902963824661e009",
[
null,
{}
]
],
"2d.pattern.repeat.empty.worker.js": [
- "9777e188fad5b4f2bc06aa5396a7174e679d2290",
+ "5aefc0dab3e74814754653b941ce9cab660b51c2",
[
"html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.html",
{}
@@ -597728,6 +598769,48 @@
{}
]
],
+ "2d.pattern.transform.identity.html": [
+ "2d73296395d4d63c366f64d1993e766fbca4d0db",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.pattern.transform.identity.worker.js": [
+ "a33c771346e5e5ee2edb53fd9f866f2e5762eda8",
+ [
+ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.html",
+ {}
+ ]
+ ],
+ "2d.pattern.transform.infinity.html": [
+ "aa58ad119f48123d00fc443ab958cfe3a96364f2",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.pattern.transform.infinity.worker.js": [
+ "999739b8488605cfd5b28b4cfbbf494d760e659a",
+ [
+ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.html",
+ {}
+ ]
+ ],
+ "2d.pattern.transform.invalid.html": [
+ "f2420d4a2baecd81503eefa71cf94e012582b920",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.pattern.transform.invalid.worker.js": [
+ "163951807fa4dab8c21bf23c0596625278ecf0f5",
+ [
+ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.html",
+ {}
+ ]
+ ],
"2d.strokeStyle.default.html": [
"cd7e424374a31debc172a150fd41bc572a8a4204",
[
@@ -597913,6 +598996,204 @@
]
]
},
+ "layers": {
+ "2d.layer.invalid-calls.beginLayer-reset-endLayer.html": [
+ "c0b11aa6115b1526ebac823caace5bd489481223",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js": [
+ "1c147d6f349b0c6dbbd01322129ce8055899619f",
+ [
+ "html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.beginLayer-restore.html": [
+ "022532b329d4d657fb6c5eb56584989df1b077fe",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.beginLayer-restore.worker.js": [
+ "1aa86635e65cdecdc27766f5e4f60125bf938cf5",
+ [
+ "html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.beginLayer-save-endLayer.html": [
+ "26dd0eee4bcfe01501b351248eed170f83e082a3",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js": [
+ "613921c67c2c0304ddf150b195a298e756b199ff",
+ [
+ "html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.endLayer.html": [
+ "440249980ad890359a9b857d3fb9408410d9cde5",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.endLayer.worker.js": [
+ "b2ba231b9c7d13788029242d9c2a52cd72679cc4",
+ [
+ "html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.save-beginLayer-restore.html": [
+ "c2b09961acfa44a59f9f47559fd2566a4b12d585",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.save-beginLayer-restore.worker.js": [
+ "d155379fcb38acfa06d1cd09011343e9960d89b4",
+ [
+ "html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.save-endLayer.html": [
+ "01b62d1e859d9f0bf1b98239f29ce88a21f60702",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.invalid-calls.save-endLayer.worker.js": [
+ "353c1b00cdc61bcdf3977a4f029eed1c2860edd4",
+ [
+ "html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer-endLayer.html": [
+ "0a6e195ca8636ea34cc488cb52c4a93a40c10ca1",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer-endLayer.worker.js": [
+ "a10bcd98b75e342ad647741e8d2cf91967abffe2",
+ [
+ "html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer-save.html": [
+ "12abcc5270c845bf3e0bd0418375c93a49564c33",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer-save.worker.js": [
+ "03fbeeb4f4837af5f92ba150297bc43d5b2aa434",
+ [
+ "html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer.html": [
+ "2178138e8d232348ad140353a88212f3002e48be",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.beginLayer.worker.js": [
+ "e64be136d786b682d92979b739ab237a6288242f",
+ [
+ "html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.restore.html": [
+ "156dd5abbdc0bbd7ca4caac605acf7b7e9944d76",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.restore.worker.js": [
+ "7417d12abe8412e5e13a1e58d262d466a6e3ce20",
+ [
+ "html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save-beginLayer.html": [
+ "afe735764ecebca789c41cdb49ce43dfdde4cdcd",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save-beginLayer.worker.js": [
+ "773ba77a1578d3083de0e8e376776aa125c6845c",
+ [
+ "html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save.html": [
+ "2b2de23bb88de79c10320437e91967c50ba32b01",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save.worker.js": [
+ "5bbf0386fe9faf9c62b423f69db05931888988e4",
+ [
+ "html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save_reset_restore.html": [
+ "ec5aa6455e30abcc63a03371911684f86f7d9f33",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save_reset_restore.worker.js": [
+ "3636c94357d6ec598535237260277cfe94ab2844",
+ [
+ "html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.html",
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save_restore.html": [
+ "1682bca91c8e1f663c4862a7fe4a93d06e554d30",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.layer.valid-calls.save_restore.worker.js": [
+ "8607722df732b622597736bf8dd0407f06b91493",
+ [
+ "html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.html",
+ {}
+ ]
+ ]
+ },
"line-styles": {
"2d.line.cap.butt.html": [
"145e145cb419e97fa6906084c8bd6ee91c042be2",
@@ -598040,6 +599321,20 @@
{}
]
],
+ "2d.line.fill.noop.html": [
+ "0d1aa4be30e646173c85856eeb180479fe6e6e55",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.line.fill.noop.worker.js": [
+ "e3e8c14b3fb672129a0531bef1743f654aa42686",
+ [
+ "html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.html",
+ {}
+ ]
+ ],
"2d.line.invalid.strokestyle.html": [
"fa67e3b3f826f559967801dfb5523dd2a0f7dfed",
[
@@ -598507,7 +599802,7 @@
]
],
"offscreencanvas.transferrable.html": [
- "d321c324fa0019fa542864e78032c00ff34d247a",
+ "76796034e9a2da76d059f65cdefa2a4e8b7dfda5",
[
null,
{}
@@ -602046,70 +603341,70 @@
},
"shadows": {
"2d.shadow.alpha.1.html": [
- "603d5e5da4274a3f47dd390adb25f40403eae2d0",
+ "765cf41b213e7acd5764ea56f8880fb38846775c",
[
null,
{}
]
],
"2d.shadow.alpha.1.worker.js": [
- "0bc92ac4141752c173d1e520ee9c2acd8aea1ab7",
+ "869aa017e7e3a159467c233784a4d90142c14adc",
[
"html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.html",
{}
]
],
"2d.shadow.alpha.2.html": [
- "254d214c4cd1f5bd036fe6fa40e1308b429944f1",
+ "be2209608fc521f15886a291c282435784efb8ff",
[
null,
{}
]
],
"2d.shadow.alpha.2.worker.js": [
- "ff543b3c8000b9a83f567ccdf1fa5dcb47f79327",
+ "dce91f2e4d3dca7d59576621c0cceac7629074d4",
[
"html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.html",
{}
]
],
"2d.shadow.alpha.3.html": [
- "2c50c0d748a59694e8b6f24bd0ca3815af1439d0",
+ "7239b3cea7b759510039b035aa9621e4af66be0c",
[
null,
{}
]
],
"2d.shadow.alpha.3.worker.js": [
- "d8bc071c85d9ca97ce50d620eb1e1c407171fd4b",
+ "93fc665cedcb1698335c199ec570d7a83e968c18",
[
"html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.html",
{}
]
],
"2d.shadow.alpha.4.html": [
- "d86ee4c4bff063ae5c8a3f07e65ce72a607559c7",
+ "468db2a7166c0db205743ac934b31045a1cd7d39",
[
null,
{}
]
],
"2d.shadow.alpha.4.worker.js": [
- "4fdb8ca7dc58026a7f61940e25aa4b2e66a6b5c9",
+ "2be63d3effaa20dc336c2555cb8a397d835f735e",
[
"html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.html",
{}
]
],
"2d.shadow.alpha.5.html": [
- "4c1a9b08cb051094667aef27d441100312dc0a64",
+ "92ac9717f2a2e11eee1ec7bb581674d5f5a86c64",
[
null,
{}
]
],
"2d.shadow.alpha.5.worker.js": [
- "be4b78d87c55ecd3eba17836b6507e413d411640",
+ "016616ac8c3d652f3cc4edaa0d5cd935b0656b81",
[
"html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.html",
{}
@@ -602130,28 +603425,28 @@
]
],
"2d.shadow.attributes.shadowBlur.invalid.html": [
- "8f199766fe22f77582e0b44c646be4db7fb94dcb",
+ "51d1a4a804d038b5e969d53aa27072be8ad940ee",
[
null,
{}
]
],
"2d.shadow.attributes.shadowBlur.invalid.worker.js": [
- "303b43e8193e87c15d21d5159223cf5f4f6e3c9f",
+ "2e3a28b789eb37ddeee5f7dcec5f5618f3ca7a69",
[
"html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.html",
{}
]
],
"2d.shadow.attributes.shadowBlur.valid.html": [
- "299826a5a2e96de50e1693cd16935def63c6ee3c",
+ "06495f6c3172e144b3536a07769d8a519ed85067",
[
null,
{}
]
],
"2d.shadow.attributes.shadowBlur.valid.worker.js": [
- "c41588b50edffd1affd01a722b56c3ce38baea83",
+ "d0292edaecd10c7a56d68495a46d2841675fed42",
[
"html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.html",
{}
@@ -602172,28 +603467,28 @@
]
],
"2d.shadow.attributes.shadowColor.invalid.html": [
- "93a480b307b30c3f13c7043028a0a2aa9efde235",
+ "ac1d9e733304c308933dd81bc85a94d6022adfcd",
[
null,
{}
]
],
"2d.shadow.attributes.shadowColor.invalid.worker.js": [
- "67e0fa80bc072e7901d00948dd5cd9457e9ddb9d",
+ "c962f2508dd5c1f4a879b0bfb5b7e281a19df696",
[
"html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.html",
{}
]
],
"2d.shadow.attributes.shadowColor.valid.html": [
- "acd36360a8f67ab06c9159fc375f8eefb4aae046",
+ "340f11f54f3c7896d4bc40645628638604377451",
[
null,
{}
]
],
"2d.shadow.attributes.shadowColor.valid.worker.js": [
- "02444723b4ed0c6089bcef887bafc03eaf8a394e",
+ "6d7eb0504d412f632314033cd368cf89787fce7f",
[
"html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.html",
{}
@@ -602214,168 +603509,168 @@
]
],
"2d.shadow.attributes.shadowOffset.invalid.html": [
- "be055aa37ce3bcdb18f66d58a092b378df69e89f",
+ "d789284b0a5db5d176301bb0441c771a4f36d0d0",
[
null,
{}
]
],
"2d.shadow.attributes.shadowOffset.invalid.worker.js": [
- "37ae2e6b7852ae3d1f71530fd91ae84b67da9b7e",
+ "9eb89cd58144a9b0c47a7256f16e7c6f0471d044",
[
"html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.html",
{}
]
],
"2d.shadow.attributes.shadowOffset.valid.html": [
- "785966cb38e68b849fb559d12e677e52ba70bf19",
+ "82f5f0118d0ef1c9d4d98e74a5aecf7ef776ee26",
[
null,
{}
]
],
"2d.shadow.attributes.shadowOffset.valid.worker.js": [
- "a6e047ee2b701d0d4b4938c36cf7d9b21a10e94e",
+ "5881c5bca5148ed0b1057c9a56128abf8a7495ac",
[
"html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.html",
{}
]
],
"2d.shadow.canvas.alpha.html": [
- "ae046cfe19dfb658adf80706bd68213d4ca52285",
+ "cae4235e8cf364eea70b5de85af44c2620386de2",
[
null,
{}
]
],
"2d.shadow.canvas.alpha.worker.js": [
- "21d6309c18321bc949f3526623e48d67545dc3a8",
+ "0fa74a20706f215f90646d86eabaa177e45cdba5",
[
"html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.html",
{}
]
],
"2d.shadow.canvas.basic.html": [
- "3ba1cf1fb06b5ea4876c9f12be9981fb423aaa1a",
+ "f5784e914f567103f8a90c5fb93002776b57b231",
[
null,
{}
]
],
"2d.shadow.canvas.basic.worker.js": [
- "8ec3f4acb3c1dc505e14ca1b8b987b59ba44b5b4",
+ "6a2d916a75431756d584090775e3feafeba546c0",
[
"html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.html",
{}
]
],
"2d.shadow.canvas.transparent.1.html": [
- "960d870923d4e063b7d0fc61cea90a6d2d8dc9fa",
+ "62b3f83272a2b36239cb1f6d58db7bedccdd91c1",
[
null,
{}
]
],
"2d.shadow.canvas.transparent.1.worker.js": [
- "7fd807bda4e65dd7908e560994b7417a7ab36e39",
+ "1b02897d62ed8cab7c46b5be34d076f7386dd533",
[
"html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.html",
{}
]
],
"2d.shadow.canvas.transparent.2.html": [
- "2f1d31d7066555906647fecfe237c675eaed9158",
+ "0f8045352356fbc33efa12f36c0aa28277a89805",
[
null,
{}
]
],
"2d.shadow.canvas.transparent.2.worker.js": [
- "1347eb095feecff4cb0d0318b8552b599678c280",
+ "6e468e28e000b5277a3083e76cae299d63c6638c",
[
"html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.html",
{}
]
],
"2d.shadow.clip.1.html": [
- "a762ab5f9f1af56996f282b38f71a126fa6a707c",
+ "4df101d513c8e523ddb30ffb9c2f2878fab36210",
[
null,
{}
]
],
"2d.shadow.clip.1.worker.js": [
- "2a6423a8b290c933dcf480697e28e74be65381ab",
+ "6b05ceb226f1d53d2cbc8030d7b3d76da1369ebb",
[
"html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.html",
{}
]
],
"2d.shadow.clip.2.html": [
- "31055d7200d1e5beeaa59f4ec62c8e1f918a8f94",
+ "6a09ea53f3654f0489cd2d31881240b301ff1782",
[
null,
{}
]
],
"2d.shadow.clip.2.worker.js": [
- "2c6b8deacd450bee021dd9c548a345684d9526e0",
+ "4cdfcfdcfcd6d32a12253396e604b2edd72cb0f6",
[
"html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.html",
{}
]
],
"2d.shadow.clip.3.html": [
- "3b62b233d1415f8ab1116dda3e534ad1cb53c5a4",
+ "d1732e9f5b7481df0bf025558980c739a383a84c",
[
null,
{}
]
],
"2d.shadow.clip.3.worker.js": [
- "c97f9e5c63a33f9a34841fcd370b91f0efbe80c6",
+ "6f8b79d1fea35fac2e9ac96eef2dc85ff0b120a4",
[
"html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.html",
{}
]
],
"2d.shadow.composite.1.html": [
- "e9a400f1e10b870480b01cd79036e088e26f5e60",
+ "d6014fbd45734b480cf43f25fedc5de2ba9da6c7",
[
null,
{}
]
],
"2d.shadow.composite.1.worker.js": [
- "10baafad47e4664ac6e5f134d7724b034ed79c50",
+ "28637706e15e671017c496d8dad7d383c8620a57",
[
"html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.html",
{}
]
],
"2d.shadow.composite.2.html": [
- "0a4c515bac2b433475c72e9ceb6cfcb41c9d0187",
+ "87f2e3ba0f71b8f36d48132e0077f9c204f35868",
[
null,
{}
]
],
"2d.shadow.composite.2.worker.js": [
- "20c89c1390cf17cf940a8ec003fdbc0dccbd6f30",
+ "a144446ec55611a068903a9e36724f1562c19f20",
[
"html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.html",
{}
]
],
"2d.shadow.composite.3.html": [
- "56218430ef42c715c7e36848db3897a38b7cd754",
+ "f3cafa983abf0f9e6348c86c9c2f50fc7f215c73",
[
null,
{}
]
],
"2d.shadow.composite.3.worker.js": [
- "1257b3f5749222248588b0df4ed2288d65f8d45a",
+ "ba29487eea0ad721041ef3a8b573ec6309e6bac1",
[
"html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.html",
{}
@@ -602452,140 +603747,140 @@
]
],
"2d.shadow.gradient.alpha.html": [
- "384838584e0b6620ec7e8ffe1825da767c8b5962",
+ "199dd6c3fab619b18467284497153d98c5c599cd",
[
null,
{}
]
],
"2d.shadow.gradient.alpha.worker.js": [
- "65d582dd790f9eb137774b32b46f4bdf63c99c5c",
+ "0f9a6449c4bcc776f2c094973cd770e6c899ded5",
[
"html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.html",
{}
]
],
"2d.shadow.gradient.basic.html": [
- "c411b64e84359f733b15fc65c8d5346891c6cfe8",
+ "6746f03f3d86f8d16c6afee114ec13d9226cb401",
[
null,
{}
]
],
"2d.shadow.gradient.basic.worker.js": [
- "2630acc1a4cbe69400202008d0cda48d7969f5ea",
+ "068b48bb6f8488625c8ba5da94f92db34b853ead",
[
"html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.html",
{}
]
],
"2d.shadow.gradient.transparent.1.html": [
- "852d4268fd5d18f63d14cbafafce646914198acb",
+ "7e7309e976ee6c805eff7810e923b5090d44f528",
[
null,
{}
]
],
"2d.shadow.gradient.transparent.1.worker.js": [
- "b08401426af70523d41a370e09d803694ba82b50",
+ "1102848ecbdfed0eab4e44b6505b40642c3ff26b",
[
"html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.html",
{}
]
],
"2d.shadow.gradient.transparent.2.html": [
- "b2c7967d1a717aecf97e69c1529f3aacd62c23e9",
+ "8259eb9ae5d76f93afd0618b64aa74f05b26a06c",
[
null,
{}
]
],
"2d.shadow.gradient.transparent.2.worker.js": [
- "bc651c594ea6e39c9f99f5c8553e63c772baa4d7",
+ "5fcf4ee93d0a8c689aa6e1fdaf6f70f6671f434a",
[
"html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.html",
{}
]
],
"2d.shadow.image.alpha.html": [
- "9d14a7233aae0640241dc79ff6689dcc2c6183dd",
+ "f7f797fd0b5b3d57a51452998d10b277deb170f3",
[
null,
{}
]
],
"2d.shadow.image.alpha.worker.js": [
- "5c290b06cb28443802c4d97b613f41b5a695d3e0",
+ "827bd2ce65285f5075473a4a8f9b826f0e4c0ffc",
[
"html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.html",
{}
]
],
"2d.shadow.image.basic.html": [
- "b1066aa084f2951ea7ae0d7f6644e43a63be87e1",
+ "5b959fdd92da3ba65811347bc7397d2f9a640c0e",
[
null,
{}
]
],
"2d.shadow.image.basic.worker.js": [
- "750326c8944aa6165fedafce5ff1537d5f886e00",
+ "2d02232c6836d550785a87499a808eea355fe6e3",
[
"html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.html",
{}
]
],
"2d.shadow.image.scale.html": [
- "a6710d727b053f89f1e587143ddf6fc5d0c057b1",
+ "7e2536c0522127beb4b1feca82da3c91f0e61659",
[
null,
{}
]
],
"2d.shadow.image.scale.worker.js": [
- "14e4334f0e07e3f208759bd9cd2a7c7b0a5d04ca",
+ "2c10381f98aa43636a50f973d05238a008695bb8",
[
"html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.html",
{}
]
],
"2d.shadow.image.section.html": [
- "be2e6ed5e69aff4db956f143d39f0df455fc8849",
+ "7744ee153bcb80aa89c0730ee3a8b20dd795136f",
[
null,
{}
]
],
"2d.shadow.image.section.worker.js": [
- "c63121c802290056f2f693bcdd2dacbdeb4637a1",
+ "94affdfb6abdd5fb1ee75a676b879b4d7c4f4671",
[
"html/canvas/offscreen/shadows/2d.shadow.image.section.worker.html",
{}
]
],
"2d.shadow.image.transparent.1.html": [
- "23cafc60750d59cd55551e4a24de12ed07dc0aa6",
+ "30db23ce76c9d5e422b64260db1ff1a75b90201d",
[
null,
{}
]
],
"2d.shadow.image.transparent.1.worker.js": [
- "dbae8a5061e3be62f09f075c243cf67753cfe55a",
+ "c5421d70426241e0275536bf6071cd9d7392e71f",
[
"html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.html",
{}
]
],
"2d.shadow.image.transparent.2.html": [
- "6567dacf523b4d99bfcf2ef26fff936c7058d090",
+ "9b3b206a264547a0abadb8a83a06774fca1b004d",
[
null,
{}
]
],
"2d.shadow.image.transparent.2.worker.js": [
- "c424274bb51828504bf7de4f874d90a1d9ef25d0",
+ "071c584fa84bb1800f59b1a7c3118a628016398e",
[
"html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.html",
{}
@@ -602662,168 +603957,168 @@
]
],
"2d.shadow.pattern.alpha.html": [
- "04f6ee2e81a5c1b77be684deb9b77b63a0e70e94",
+ "c45654f9991b5439174e55c64aa4bb319a61d07c",
[
null,
{}
]
],
"2d.shadow.pattern.alpha.worker.js": [
- "8b29bfb064a32c509dd9afe96aaf0445c27cbf53",
+ "41a826a158f4a4ccb9ac4005f2209d3a59ccabb1",
[
"html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.html",
{}
]
],
"2d.shadow.pattern.basic.html": [
- "64d6b59308b32f5e7fd55ab9a238d3d46bb21899",
+ "4e372c0932d85d8db0545b185e3ccdac663b31e9",
[
null,
{}
]
],
"2d.shadow.pattern.basic.worker.js": [
- "db9aefeaf4d53621a594b3ab049f5eb577ffbfdd",
+ "7a8f7e84796a9d72fa463ec337efd8834da418b6",
[
"html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.html",
{}
]
],
"2d.shadow.pattern.transparent.1.html": [
- "fe06c3afde10f255a1c5c1b2d5e49b419098fb7b",
+ "72fa7b29f8ebc6d73f9647609e356478b1f1a731",
[
null,
{}
]
],
"2d.shadow.pattern.transparent.1.worker.js": [
- "b2ebc0ae2cfe2bf059bec8586134bc712b033efd",
+ "8414db6d08ca1126edfc02d780bbf8e325b1f103",
[
"html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.html",
{}
]
],
"2d.shadow.pattern.transparent.2.html": [
- "358113f07cddaa9f6873f809bd48331d7aa2b73f",
+ "6ad8ece009a391daa5615e607edbe097fe999786",
[
null,
{}
]
],
"2d.shadow.pattern.transparent.2.worker.js": [
- "cb963008f9446d67375cae6de3e2a5a75857807e",
+ "726a42d6cd4e845c8266b3c6ebea5defc40a0cf4",
[
"html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.html",
{}
]
],
"2d.shadow.stroke.basic.html": [
- "27edc8750ba65ba441272a125d65e98f306fed82",
+ "c569865a60c78e9ce93cca90c48bf02eadba49d0",
[
null,
{}
]
],
"2d.shadow.stroke.basic.worker.js": [
- "b62e6c75e56f265a119e72201263f2eb82fda5b6",
+ "9d7d0ec3210adfe18860b0327725b2c3df3accba",
[
"html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.html",
{}
]
],
"2d.shadow.stroke.cap.1.html": [
- "46f915b73e761d6ed7f23a282955df3280de1ff1",
+ "b170f88cf65bf2fc54e974679fd581ba8af8f2c1",
[
null,
{}
]
],
"2d.shadow.stroke.cap.1.worker.js": [
- "21c588ac299c68792332c06e15f642117c38cc0f",
+ "582915d28bf1b195b1192fc8a51cdf0b803f82c1",
[
"html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.html",
{}
]
],
"2d.shadow.stroke.cap.2.html": [
- "91bfd80d2b18aff8a754ce4603256000e9d8f08b",
+ "8bbb016bd5e0830dfcfd3e9b6df7f73fd322f7f6",
[
null,
{}
]
],
"2d.shadow.stroke.cap.2.worker.js": [
- "aa607cd6efc0b8f7539cc4802f9f5478f8c7eac6",
+ "13108bec9e418edd61f18bc5a258e026b0e4f66e",
[
"html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.html",
{}
]
],
"2d.shadow.stroke.join.1.html": [
- "1a57acb5f37b839bedf30620be759d495d8a7e4f",
+ "f0ef2d250eafbc411cb3148dbecc0b49a8cfe78a",
[
null,
{}
]
],
"2d.shadow.stroke.join.1.worker.js": [
- "8628fd993bd831f665d055a63b69ac815b3a9906",
+ "0cc1b5f1963b9ff48217890176542fc8a938471c",
[
"html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.html",
{}
]
],
"2d.shadow.stroke.join.2.html": [
- "394226c0ed56e8b51f9a8356dfd673fcb7f86020",
+ "f2800aa19a961be7bc86ec890d902ad69d3f404e",
[
null,
{}
]
],
"2d.shadow.stroke.join.2.worker.js": [
- "06bcbd2c48adacdfcd7cf4117fa407571664df51",
+ "925f65a28ee67a50090662f4909f783d13ba6fa3",
[
"html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.html",
{}
]
],
"2d.shadow.stroke.join.3.html": [
- "2bf7d3dbc1bbd32e746a4b12635f148b97d557da",
+ "390e6a80486a4e546699cb204ff33462fdd9ac6a",
[
null,
{}
]
],
"2d.shadow.stroke.join.3.worker.js": [
- "5c52537a31eb5218ad1e243990df15643ab9a3b3",
+ "827a6d666234834c0d0ed95949809aa93b217c48",
[
"html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.html",
{}
]
],
"2d.shadow.transform.1.html": [
- "3fefcfc087a9263a69d0e07305a3eca5aaceebb9",
+ "23946b20a56bd2f96d4d3ab9c4cdcd4d5bb99d26",
[
null,
{}
]
],
"2d.shadow.transform.1.worker.js": [
- "6227d8487f681b0fab9ff5e8bd7e0676a8223ef5",
+ "6ac8da4c97d6162eed2000ee2cf2e5760575adc3",
[
"html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.html",
{}
]
],
"2d.shadow.transform.2.html": [
- "a4ba056c75927dc20ee2daf09a71bebbad7a4c3f",
+ "edcd20bdcabe57608d986f5d9a8950269ab6e67a",
[
null,
{}
]
],
"2d.shadow.transform.2.worker.js": [
- "32c322af916955781512b864a56d51779781f4a0",
+ "e9e745a2ab87e9c04180cef4230c6a2f227dcd41",
[
"html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.html",
{}
@@ -603042,28 +604337,28 @@
]
],
"2d.text.draw.baseline.hanging.html": [
- "0b8228343289fe59d269b4ccf63dc48b6008edda",
+ "0bd15ff0068e7b238d359e772b2c0fad01e04b04",
[
null,
{}
]
],
"2d.text.draw.baseline.hanging.worker.js": [
- "fca74d6938184d68f11790b86fbdb0240cd11d8e",
+ "4a5ced7b38f95fc9cef8ef3b6290b8ebd8b6338b",
[
"html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.html",
{}
]
],
"2d.text.draw.baseline.ideographic.html": [
- "c996444b860a079402dbeb20344578c94877e58d",
+ "3a1d6e5159c052eadc9fd3073fd3b6dbc70344ef",
[
null,
{}
]
],
"2d.text.draw.baseline.ideographic.worker.js": [
- "0ffa6fe299a0cb9a03778f0f32a57141074d0b7c",
+ "b39c10b74f0c3ce27eb79f81bef5903616722bd7",
[
"html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.html",
{}
@@ -603262,14 +604557,14 @@
]
],
"2d.text.draw.space.collapse.end.html": [
- "9215203eaa7411477c24265e1120d9cca9be220b",
+ "a9dcfb11c42f891fe6405624aab2c8a2950ff38c",
[
null,
{}
]
],
"2d.text.draw.space.collapse.end.worker.js": [
- "f910b274bd4ab39e54f9d8ca841bab559e0f5ecb",
+ "87ae8b8d58bd76f0c86dc8a335ff863f0c0d85c2",
[
"html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.html",
{}
@@ -603290,42 +604585,42 @@
]
],
"2d.text.draw.space.collapse.other.html": [
- "a0cc560f507f7fc4ad466dd928962e9f7be59616",
+ "c9808a4c71616be86b0dd70b3291a425d97f5d41",
[
null,
{}
]
],
"2d.text.draw.space.collapse.other.worker.js": [
- "12edf7f7e7f7074a7c47a4d91024e4d6fc2bcf1f",
+ "f072b76dd81bec651b7552ab2b6cb938235f88d2",
[
"html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.html",
{}
]
],
"2d.text.draw.space.collapse.space.html": [
- "240ba7460c41e76e02030dd46d564bd3e378b0ba",
+ "1ed09048961c25b4841009ee124edfc51380c381",
[
null,
{}
]
],
"2d.text.draw.space.collapse.space.worker.js": [
- "3ce5ef88f73553136dc0ed74d04ef8dda215c167",
+ "979a8a0f1cc55ea5683d84239b93e4de241bef5f",
[
"html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.html",
{}
]
],
"2d.text.draw.space.collapse.start.html": [
- "43fa32f8aebb47acedaebba8acc91fc42f08e800",
+ "1581ce111cecb855d8cdb0cf003ada4004529dcc",
[
null,
{}
]
],
"2d.text.draw.space.collapse.start.worker.js": [
- "2f742ac2b672df16e94818a689e4e208390098f8",
+ "79f8326561c2a7bbd5215e088db883c55f6337b7",
[
"html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.html",
{}
@@ -603353,14 +604648,14 @@
]
],
"2d.text.drawing.style.fontKerning.with.uppercase.html": [
- "380d8e7212f73defa0a7fd7b31550e104690800c",
+ "7f6b57921e4ae6252fb6947059734315898e3af7",
[
null,
{}
]
],
"2d.text.drawing.style.fontKerning.with.uppercase.worker.js": [
- "afce6c3955cfb880767fd8f8cc8d14c1af1fe6bc",
+ "4e0f32c69274eacf0c26a63cee34c00ccdf6983c",
[
"html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.html",
{}
@@ -603374,14 +604669,14 @@
]
],
"2d.text.drawing.style.fontVariant.settings.html": [
- "5ed17baf956418e233d6d66b5b566e4f0454be30",
+ "9756d095ba74fd386b1249b2c1cf24c9381c29ba",
[
null,
{}
]
],
"2d.text.drawing.style.fontVariant.settings.worker.js": [
- "9486b8ae1a4a3a65ef0379086bb6a0150f25ab48",
+ "30c78388ae45586a86289a89509210db79993b28",
[
"html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.html",
{}
@@ -603598,19 +604893,33 @@
]
],
"2d.text.font.parse.complex.html": [
- "30e937804f2db3893077219c209277d4bf43f3b0",
+ "69453437fe2998190c441198ce3086b36ad4e2d4",
[
null,
{}
]
],
"2d.text.font.parse.complex.worker.js": [
- "28cb41c572a9df5184319c2dc2d742230b0a0c93",
+ "71d039cfacaa027eef8922ba62fd49422b8e9ee7",
[
"html/canvas/offscreen/text/2d.text.font.parse.complex.worker.html",
{}
]
],
+ "2d.text.font.parse.complex2.html": [
+ "af94ac720a6d266d31f2455fb209424febaa55af",
+ [
+ null,
+ {}
+ ]
+ ],
+ "2d.text.font.parse.complex2.worker.js": [
+ "45575f8814092483fd2f3e09b071f75bb2a89d89",
+ [
+ "html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.html",
+ {}
+ ]
+ ],
"2d.text.font.parse.family.html": [
"989014fb37c786fa74b0f3c8ab1fcf3678b66d7c",
[
@@ -603780,14 +605089,14 @@
]
],
"2d.text.measure.width.space.html": [
- "bff53f4f0e49f5ed3a1d6068460f29567f20ebc2",
+ "6ef4255b834ec995cc2d4cfb8455912ce6014719",
[
null,
{}
]
],
"2d.text.measure.width.space.worker.js": [
- "83020b34f58a5af83023097aa8c56c203058b985",
+ "5ee4ee3ff74a000465a1d2fc4cc2f7bd8d931dec",
[
"html/canvas/offscreen/text/2d.text.measure.width.space.worker.html",
{}
@@ -605675,6 +606984,79 @@
}
]
],
+ "iframe-coep-redirect.https.window.js": [
+ "a9f6a1c88e2c5ca62bfa3a8186ee44f0b138f81d",
+ [
+ "html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.html?1-4",
+ {
+ "script_metadata": [
+ [
+ "variant",
+ "?1-4"
+ ],
+ [
+ "variant",
+ "?5-last"
+ ],
+ [
+ "script",
+ "/common/get-host-info.sub.js"
+ ],
+ [
+ "script",
+ "/common/utils.js"
+ ],
+ [
+ "script",
+ "/common/dispatcher/dispatcher.js"
+ ],
+ [
+ "script",
+ "./resources/common.js"
+ ],
+ [
+ "script",
+ "./resources/iframeTest.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.html?5-last",
+ {
+ "script_metadata": [
+ [
+ "variant",
+ "?1-4"
+ ],
+ [
+ "variant",
+ "?5-last"
+ ],
+ [
+ "script",
+ "/common/get-host-info.sub.js"
+ ],
+ [
+ "script",
+ "/common/utils.js"
+ ],
+ [
+ "script",
+ "/common/dispatcher/dispatcher.js"
+ ],
+ [
+ "script",
+ "./resources/common.js"
+ ],
+ [
+ "script",
+ "./resources/iframeTest.js"
+ ]
+ ]
+ }
+ ]
+ ],
"iframe-coep-require-corp.https.window.js": [
"a70d4ff8fc4abc3e865400f2e5f2ba217ba9b9d9",
[
@@ -608627,7 +610009,7 @@
]
],
"named_targeting.https.html": [
- "00eb6506e9b9b18bfb385bc4a0dd64dcd48a8b38",
+ "10929847ee64d1f47e78b1c34af55c963871c055",
[
null,
{}
@@ -609845,7 +611227,7 @@
]
],
"002.html": [
- "c9a22ed6db3a9d05c0ebb6a627c29a390d6674cd",
+ "ddfa7c4ade67dac1675316db156319e180b11ac9",
[
null,
{
@@ -609863,7 +611245,7 @@
]
],
"005.html": [
- "33ed630fe061955d94cf0b314d665f4277102226",
+ "047011d071d28b84e4ef3b0ee1b3830bc4a42215",
[
null,
{
@@ -613490,7 +614872,7 @@
]
],
"event-propagate-disabled.tentative.html": [
- "9c8642d10f99b16d41401f28489104d4b4a651cf",
+ "e3dcd43a17ab2a4bd2b3807f699236d080b95f52",
[
null,
{
@@ -613500,7 +614882,7 @@
]
],
"fieldset-event-propagation.tentative.html": [
- "11822e4dd48db047212833a48a82b60c7e9cae72",
+ "6d1a39c1de90b9a1dee36a1880b5fcfb51106ae9",
[
null,
{
@@ -615044,8 +616426,15 @@
{}
]
],
+ "resource-selection-source-media-env-change.html": [
+ "30d591ae6e7db18116eeb47dcf0be7c980112288",
+ [
+ null,
+ {}
+ ]
+ ],
"resource-selection-source-media.html": [
- "6332f0890dba075f7c8d465633d4a6f04b28fc3c",
+ "df5f47add2bfe2e48856d553072e013644c5effc",
[
null,
{}
@@ -616279,13 +617668,6 @@
]
]
},
- "video_008.htm": [
- "c5cb25ed4c2085511b9fdb6b695537734bbc4317",
- [
- null,
- {}
- ]
- ],
"video_loop_base.html": [
"9b5d69b31a033e226ffe4ada1e154293f33ec9a1",
[
@@ -621566,7 +622948,7 @@
]
],
"name-attribute.tentative.html": [
- "f283633aab43af3cc854cc25d838f71705264a12",
+ "48980d0a5e257f7b17422ba4f8d931f9f58d7e0e",
[
null,
{}
@@ -622491,7 +623873,7 @@
]
],
"popover-light-dismiss.html": [
- "0f206f1c700a5fd4def13f49ee927e4526fa1e56",
+ "009d10609b09bb84733dd379fef72bb068d78396",
[
null,
{
@@ -622693,7 +624075,7 @@
]
],
"async_009.htm": [
- "501edda065a87dc706f545ec442484ad93264bb4",
+ "307aa4641283b42d0a0b09efcff69870678e3a1c",
[
null,
{}
@@ -626637,14 +628019,14 @@
]
],
"disabled.html": [
- "f9600439298136e86a6c298e6ae002ab156b4234",
+ "8808675eb69b17c7763b407ea7ce4458e9e08fda",
[
null,
{}
]
],
"enabled.html": [
- "1948343c1866263e2d3edb7b6c35e3ab4155f3f0",
+ "0ad0e1b402a2646d41f736271c65d413455a67e2",
[
null,
{}
@@ -628507,14 +629889,14 @@
},
"clearing-the-stack-back-to-a-given-context": {
"clearing-stack-back-to-a-table-body-context.html": [
- "4d45fa55520c990bfb085a880ed5e576c5a28919",
+ "07af33d01e26273017ec62c7be65ceb7afb92538",
[
null,
{}
]
],
"clearing-stack-back-to-a-table-context.html": [
- "135540a5cbe5f8da1918a2eb0cb64fe0637f5b71",
+ "1bf9c5bba604c1bcbf3ced0f65cc1ac1133bc667",
[
null,
{}
@@ -632292,6 +633674,24 @@
]
]
},
+ "https-upgrades": {
+ "tentative": {
+ "fallback.sub.html": [
+ "8fdf0dc8360f371644e5bf35656202535d1869da",
+ [
+ null,
+ {}
+ ]
+ ],
+ "upgrade.https.sub.html": [
+ "71a1fe1dde618163c259d13eb14797c22785c247",
+ [
+ null,
+ {}
+ ]
+ ]
+ }
+ },
"idle-detection": {
"basics.tentative.https.window.js": [
"32cb6204b99012abd26ba78d838929c8183a7c9a",
@@ -635910,7 +637310,7 @@
]
],
"video-poster.html": [
- "fdc691819bd302e7f37226abe44abfe62a779d06",
+ "aaf2ce8a746b61d93398c21059ccb3d8040ed01c",
[
null,
{}
@@ -640101,7 +641501,7 @@
]
],
"ImageCapture-grabFrame.html": [
- "bf5e9400a038f2432ce1bee3a3b345f3c82e5ea5",
+ "a9a6930aafc577d9d554491341473287b0454d79",
[
null,
{}
@@ -640115,7 +641515,7 @@
]
],
"MediaStreamTrack-applyConstraints-fast.html": [
- "d80ab67321fe5a238efe5e917aba037d2a406981",
+ "38fabdcdfac2f898a2b2e485215611600b75433d",
[
null,
{}
@@ -640158,7 +641558,7 @@
]
],
"MediaStreamTrack-getCapabilities-fast.html": [
- "55272d1499517a6fda0b7e06068928b4e1127b27",
+ "391dbb58f0a41d020a7b9c352b387f761fa726c7",
[
null,
{}
@@ -640183,7 +641583,7 @@
]
],
"MediaStreamTrack-getSettings-fast.html": [
- "a4ecbe61181640f7f993f7f5c9cd3fd4e992f72c",
+ "91c308622cbc9270352df31b951a6b50eba26bc2",
[
null,
{}
@@ -640199,21 +641599,21 @@
]
],
"detached-HTMLCanvasElement.html": [
- "e27950fc5edfea8357344f91198f0105775fef2c",
+ "9ccc51f7b1f28a34ce01fceddde938f801b1efb3",
[
null,
{}
]
],
"getPhotoCapabilities.html": [
- "94962a03f4d372a70eae10b8722987bfaede0054",
+ "8b6ab891ff8cead9d99ac017db5065ed4dad709f",
[
null,
{}
]
],
"getPhotoSettings.html": [
- "454037355942f8bd63afffa9578dfc02cd3fcfc5",
+ "04a7a5395fc72f13284af4b0e6f0a92b6b15737a",
[
null,
{}
@@ -640250,14 +641650,14 @@
]
],
"takePhoto-reject.html": [
- "4deee97d7bc77859602aa25d51e547bd0290409b",
+ "fff36e1a3b8bcf46c6a6f3ac765a509f37c45a07",
[
null,
{}
]
],
"takePhoto-with-PhotoSettings.html": [
- "58708612456fc669c5a445b76ad110fcbb0bb27d",
+ "2946e782d0b99166c0b0c928e6ea32da76c01562",
[
null,
{}
@@ -640271,7 +641671,7 @@
]
],
"takePhoto.html": [
- "6b27f085a8a383657400c29189527b81d7264987",
+ "44586406c470cef6a591a3a94081fdfd0a90f7ea",
[
null,
{}
@@ -640456,7 +641856,7 @@
]
],
"MediaRecorder-peerconnection.https.html": [
- "86c9d4f4a2621b766ac6b6e76621541a29e5588c",
+ "9d74ab59388c66102767795bece4b32285e2b11f",
[
null,
{
@@ -640506,7 +641906,7 @@
],
"passthrough": {
"MediaRecorder-passthrough.https.html": [
- "ceeae2eade89f80b3c13dd0970f99eed55e5aeea",
+ "6a8ebf50dd59c87eeef411566998bd5bb79ff9a9",
[
null,
{
@@ -652316,6 +653716,43 @@
]
}
},
+ "private-aggregation": {
+ "shared-storage-permissions-policy-none.https.html": [
+ "3593ed71ea6b1e755c8c5e71492eb46699496922",
+ [
+ null,
+ {}
+ ]
+ ],
+ "shared-storage-surface-failure-2.https.html": [
+ "b39ecd8d74b56acb418d77e61561edf4573e9502",
+ [
+ null,
+ {}
+ ]
+ ],
+ "shared-storage-surface-failure.https.html": [
+ "9dc62b1bb714b0a4c119b913bbf8611282680450",
+ [
+ null,
+ {}
+ ]
+ ],
+ "shared-storage-surface-success-2.https.html": [
+ "8203fd11eaa325c9c4e4bf294676287a4e86453b",
+ [
+ null,
+ {}
+ ]
+ ],
+ "shared-storage-surface-success.https.html": [
+ "7012180c713f19d4645a898119327586f142eca8",
+ [
+ null,
+ {}
+ ]
+ ]
+ },
"private-click-measurement": {
"idlharness.window.js": [
"1d0539a7bf56d071d247cded4ed2f4555b34bf6f",
@@ -668412,7 +669849,7 @@
"scroll-animations": {
"css": {
"animation-duration-auto.tentative.html": [
- "cfb7cf2c1e4aad9ba103833199a4440e9381bc74",
+ "01982859137855c7f6c3c5011b013ea715c9c4ea",
[
null,
{}
@@ -668433,7 +669870,7 @@
]
],
"animation-shorthand.html": [
- "a17dd431264453f52f69fb8d3f55a1413f0680ba",
+ "b7d5947a212b67a5e9a0ce1b53785b562e622554",
[
null,
{}
@@ -674639,7 +676076,7 @@
]
],
"declarative-with-disabled-shadow.tentative.html": [
- "849bffa5a7f6e8b9417f2a030b36ff408c117256",
+ "bcf53403addb673b609ecbc2a4299d84a701fc3e",
[
null,
{}
@@ -675152,7 +676589,7 @@
]
],
"focus-reverse-unassignable-slot.html": [
- "2eec3acc88a11915e1bcc78d57b2e53eb117b4f1",
+ "5d7f332b854b201abd0b50162f21f63e92a61ee1",
[
null,
{
@@ -686670,6 +688107,13 @@
]
},
"scripted": {
+ "script-invalid-script-type.html": [
+ "9602dd525bd4d2b77b8d4ffadebef9e568a98c77",
+ [
+ null,
+ {}
+ ]
+ ],
"script-runs-in-shadow-tree.html": [
"9693db333ff18c1e6f39515be29c77d551e4e2fe",
[
@@ -692360,7 +693804,7 @@
]
],
"request-video-frame-callback-during-xr-session.https.html": [
- "34561ee5fd065944d133fa5d314b6ced2f79473e",
+ "7afbabcee0b7760d852f4e0139f4693b7f402190",
[
null,
{}
@@ -692381,7 +693825,7 @@
]
],
"request-video-frame-callback-webrtc.https.html": [
- "6a1bdae19efdd0f0eec2d1d07ca9f41435a55659",
+ "22c90f8460500dd126b133caa177b92332a310d5",
[
null,
{}
@@ -692598,7 +694042,7 @@
]
],
"basic.html": [
- "5cb838647015de9ea295e60184b2300bbb718bfe",
+ "5fbe1fe2aa50cc5b00a59280286c471e69049eef",
[
null,
{
@@ -699367,7 +700811,7 @@
]
],
"audiocontext-suspend-resume-close.html": [
- "192317dda26968269f35f000adfec9c0450236b1",
+ "ea93cab96a63e114d8b6399d22278a8f2b945039",
[
null,
{}
@@ -704208,7 +705652,7 @@
]
],
"videoFrame-construction.crossOriginSource.sub.html": [
- "62f2bd934f1d09afb4be1314048fe773db9239b3",
+ "81906d33b7992620f3319395ae2f3003c70bf2ac",
[
null,
{}
@@ -709132,14 +710576,14 @@
]
],
"simplecall-no-ssrcs.https.html": [
- "f2e20846234bb4703d23c876f468994dcd74be30",
+ "b47cd30eaf4e5db337a1fb91e34e9ede16ee5421",
[
null,
{}
]
],
"simplecall.https.html": [
- "dbf6b9a5083a87feeeb3d93befa0a06017be8553",
+ "28c0c5c38bb69a9e1bd2662d04b55200ddee1cdd",
[
null,
{}
@@ -720030,6 +721474,393 @@
]
]
},
+ "send-many-64K-messages-with-backpressure.any.js": [
+ "e93231f2df9e491f4a98d36cf21306f7bba12283",
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.html?wpt_flags=h2",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.html?wss",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.serviceworker.html?wpt_flags=h2",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.serviceworker.html?wss",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.sharedworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.sharedworker.html?wpt_flags=h2",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.sharedworker.html?wss",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.worker.html?wpt_flags=h2",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "websockets/send-many-64K-messages-with-backpressure.any.worker.html?wss",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "script",
+ "constants.sub.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "variant",
+ ""
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ]
+ ],
"stream": {
"tentative": {
"abort.any.js": [
@@ -724427,7 +726258,7 @@
]
],
"webxr_permissions_policy.https.html": [
- "9146dd88f05aebd6ed991a95ede3652a669f1a35",
+ "e47677c8e2ce354c7e55fcb505be5c86fbac1db8",
[
null,
{}
@@ -724889,9 +726720,39 @@
]
]
},
- "window-placement": {
+ "window-management": {
+ "multi-screen-fullscreen-companion.tentative.https.html": [
+ "a4b09f3d5a8100cc8e9e21ce74678ecc84e7ca39",
+ [
+ null,
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
+ ]
+ ],
+ "multi-screen-fullscreen-enter.tentative.https.html": [
+ "b67907807b4f71c8430241201e0b0aebe739b017",
+ [
+ null,
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
+ ]
+ ],
+ "multi-screen-fullscreen-move.tentative.https.html": [
+ "b91ee4cdc4b619b249ea73841a501d476f6e640f",
+ [
+ null,
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
+ ]
+ ],
"multi-screen-window-open.tentative.https.html": [
- "c453107d568e79fd5a4a8cfb96e46bf1dc4a2a98",
+ "708e571c27f950ed414d5e5ea9981bfdec93880a",
[
null,
{
@@ -725699,7 +727560,7 @@
]
],
"Worker_cross_origin_security_err.htm": [
- "8417adbefdad83678b06cdb076696e19b70c32a0",
+ "a3e49df79ad41267ca1838101dd4132194da5549",
[
null,
{
@@ -725921,7 +727782,7 @@
]
],
"same-origin.html": [
- "0bfc503d06f0231a778735b6714f9ec2b7652e7e",
+ "ad464ad50d13d59a12dd6780f33f7f59702a3043",
[
null,
{
@@ -726016,7 +727877,7 @@
]
],
"same-origin.html": [
- "cdc36c17183fb161e281865f160ab27e35f0ed1e",
+ "7c86319c14d4842afb66ebfeb8735e1771f3af57",
[
null,
{
@@ -727040,7 +728901,7 @@
]
],
"dedicated-worker-import-failure.html": [
- "4c705e73251f41d8b7ff796cda5a5629968ec130",
+ "d4e104760e0cd271cb49c849a0415ccca6e5871a",
[
null,
{}
@@ -749273,7 +751134,7 @@
]
},
"background-clip-content-box.html": [
- "7a0248d3dff3d3cc2bc11f9a0c03a9bac7e9c273",
+ "5dc2b477d32b0fea71a34277a1ec4ee0bed79f36",
[
null,
{}
@@ -749540,34 +751401,6 @@
{}
]
],
- "border-image-1.html": [
- "2318f6c1666bc6d7c7d45bb1691082fb73c86cad",
- [
- null,
- {}
- ]
- ],
- "border-image-10.html": [
- "4fa2c2a2f8a7bde9bb31aa43d841c35acde1c1d8",
- [
- null,
- {}
- ]
- ],
- "border-image-11.html": [
- "cc662698b702e081a57daff72cd91f87a0bb5df3",
- [
- null,
- {}
- ]
- ],
- "border-image-12.html": [
- "d5cacb027ead8d4b0fde79bcbbd1e6f2d07af491",
- [
- null,
- {}
- ]
- ],
"border-image-13.html": [
"52095cf289f8a46d348d08611e52c12e1731e676",
[
@@ -749596,48 +751429,6 @@
{}
]
],
- "border-image-2.html": [
- "b6936125b142f705ae6dd2b2ae24f55dcbdbeb22",
- [
- null,
- {}
- ]
- ],
- "border-image-3.html": [
- "d4f1524112ea4516d626b4ad6f3742bdbb96ad01",
- [
- null,
- {}
- ]
- ],
- "border-image-4.html": [
- "619b677e114f3e8f842d4539b486e5b56953653f",
- [
- null,
- {}
- ]
- ],
- "border-image-7.html": [
- "4142dcb427c3ffdd5a0458d20ab7c1c0d3528630",
- [
- null,
- {}
- ]
- ],
- "border-image-8.html": [
- "26eaf68c208abbef85077b1a0bd4ed8eb4347867",
- [
- null,
- {}
- ]
- ],
- "border-image-9.html": [
- "5d805ec7527111006a0a6b24a71ef85606d1a91e",
- [
- null,
- {}
- ]
- ],
"border-image-image-type-001.htm": [
"ebc152fe74bd165b68cda0953ce3ef5545aa998d",
[
@@ -753414,7 +755205,7 @@
"browsing_context": {
"capture_screenshot": {
"capture_screenshot.py": [
- "f6e4c34d8d103eb4d0c67d0b001ae2fecc2ec709",
+ "79cc5025ab9fd99890b143a3c2d0f1eab89b9cc2",
[
null,
{}
@@ -753462,7 +755253,7 @@
},
"context_created": {
"context_created.py": [
- "9a0c74cbb851ed377c8155e9fc013441453a42af",
+ "080ef581b33da81059b558f5bbabd173d10e4ad4",
[
null,
{}
@@ -753607,7 +755398,7 @@
},
"print": {
"background.py": [
- "b527aef3827f4e574bd53d7542cb4061bcb3e903",
+ "1b854742eacf25458b3220532eec2d996aed5e37",
[
null,
{}
@@ -753621,7 +755412,7 @@
]
],
"invalid.py": [
- "114aeb62dcc27474a0869c0964b8dca2e95c8053",
+ "7193ecd017269de841fb02d12d4e22ae2562d127",
[
null,
{}
@@ -753637,14 +755428,14 @@
]
],
"orientation.py": [
- "4dee803bc8b099b0cb5757f671c577c5b60ab373",
+ "2e410d74302c9fb4fafe770d860cba3cb9a5f112",
[
null,
{}
]
],
"page.py": [
- "b66fb9881e5c8bbe530d2056e959d76a0add6e44",
+ "ef1c07d142fae404eed9a52a5d891d3496bf83eb",
[
null,
{}
@@ -753686,7 +755477,7 @@
},
"errors": {
"errors.py": [
- "0d6e9ea0e15f40ce2c04da8bae9e6c5e6c699d3f",
+ "b54f26b8c96997de5564d7398a7be21b3311c52f",
[
null,
{}
@@ -753823,14 +755614,14 @@
]
],
"event_buffer.py": [
- "99a95df104951a2760d5a6a2f13e887d277f25aa",
+ "a5f038865c74f9a39f18d9919e474eead1de0f90",
[
null,
{}
]
],
"javascript.py": [
- "fe8a9b6b58a0b576f2f4e6a9d735340bd1f92940",
+ "f687f76c0e2fa1a2b5292e24dc4eab2940f3f899",
[
null,
{}
@@ -753862,7 +755653,7 @@
"network": {
"before_request_sent": {
"before_request_sent.py": [
- "39e5b5a3cfdaaba9a39cae5e6fdb73ae3d09a673",
+ "d1a9269729f195356e1b24ec090c05a567e4d187",
[
null,
{}
@@ -753871,7 +755662,7 @@
},
"combined": {
"network_events.py": [
- "7f8f134af0d6688f4ee2055a75005ddbeca7faa7",
+ "f4af23bfd2f58679a8a044df87fe48a5f5e7e5bc",
[
null,
{}
@@ -753880,14 +755671,14 @@
},
"response_completed": {
"response_completed.py": [
- "1df23cda5946b6321640fad7763b3e3eecbec946",
+ "1043f52cb72a82dcfc9edcd8c1e9998082dd178c",
[
null,
{}
]
],
"response_completed_cached.py": [
- "eb344885087b2ab28794589be5e150bdc351d691",
+ "ea1366cb9676c135a6dd330183a4a346ebf01e62",
[
null,
{}
@@ -753896,14 +755687,14 @@
},
"response_started": {
"response_started.py": [
- "e3fd7a4d35cdada7cd829e76d71cb0e28d0168a3",
+ "2d6c1c835439298bdefd446758730f822cfa0cac",
[
null,
{}
]
],
"response_started_cached.py": [
- "15373b7107bcbe24d429133999adf6b6d42e6d77",
+ "6e0a7431c6bf867853f69f370f8c667529646fcf",
[
null,
{}
@@ -754007,7 +755798,7 @@
]
],
"result_node.py": [
- "378f6bed92704591f73d1be7de445d579a035c1b",
+ "a2359b164ebbd6e3ef0abba42ad43106bc38e2d9",
[
null,
{}
@@ -754132,7 +755923,7 @@
]
],
"result_node.py": [
- "ae07b940d056aefb264aac8755ad891d6a23bda9",
+ "89ce95ed21da1088334e11238c296a565d27e498",
[
null,
{}
@@ -754233,7 +756024,7 @@
"session": {
"new": {
"connect.py": [
- "7118f77ea0f0d62ed6f1960e19b8ec840491e9d7",
+ "d5872cd3ba542c92f70bd7280598637f903e5aa2",
[
null,
{}
@@ -754242,7 +756033,7 @@
},
"status": {
"status.py": [
- "eee102fee71f7de9e13740938d2fb8cc23e6b94d",
+ "13d131bfec5dfc7116a60ab09c2f1354405ef73a",
[
null,
{}
@@ -754251,21 +756042,21 @@
},
"subscribe": {
"contexts.py": [
- "785542fee5bf555fd8fd71c08c17b0a071ffb615",
+ "111e7ef1031cfe5471519eb444620d3412ee5d21",
[
null,
{}
]
],
"events.py": [
- "ee00e35a64642b9cbb57ed232bb3b8f7d473b7df",
+ "2953aafe03fa5c49a736876a720f902b2769e9ab",
[
null,
{}
]
],
"invalid.py": [
- "005574b03ca265a73e5569c27d08f9f456347b5b",
+ "056f6827281e9e0a56b01f76ca296133f38fadf4",
[
null,
{}
@@ -754274,21 +756065,21 @@
},
"unsubscribe": {
"contexts.py": [
- "98b119d82d14b0b8b6868ed87a10c1a397accb6b",
+ "ec38df3beded08754ab9bbcbf9aa5725666f7a1f",
[
null,
{}
]
],
"events.py": [
- "52a293fe1e4ecb307de2f23462d083807f5b083c",
+ "728518768833ef08c37d31e2436da96ef696f4b9",
[
null,
{}
]
],
"invalid.py": [
- "7fd25546e3f1a8ab64ce1f359c5bd40e30b2cfab",
+ "e6f3050da318755b037d9e828cc77cfad611912e",
[
null,
{}
@@ -754327,7 +756118,7 @@
},
"back": {
"back.py": [
- "62434323e0ad5339a861d0752d29f7d1f95c81cc",
+ "bc97a9ed6157e3003ef19889cb9695cb487d1807",
[
null,
{}
@@ -754479,7 +756270,7 @@
]
],
"navigate.py": [
- "4d1c48235ca176554375ebd26fb4d96aabad4d4d",
+ "96883ad3b640f2e00b9ce0dae4dab06872ce3ba4",
[
null,
{}
@@ -754585,7 +756376,7 @@
]
],
"collections.py": [
- "5dfbf2059470a2f17604a0a3d9bf47f905bca82e",
+ "2b57120a4cc699b65f639891ab91053a3b07fa5c",
[
null,
{}
@@ -754652,7 +756443,7 @@
]
],
"collections.py": [
- "ec5d5ee1e32beb19b799b633534ec31fcfb0c7ad",
+ "939eb8916fb9203b7fa4c15af151085e2506fbcf",
[
null,
{}
@@ -754827,7 +756618,7 @@
},
"forward": {
"forward.py": [
- "f27be403f9e95bd2359d5ae6224f6ae2708ff7c8",
+ "7945f188309a08412f26aba17c3ae405c53d50a7",
[
null,
{}
@@ -755145,7 +756936,7 @@
},
"get_window_handle": {
"get.py": [
- "68441da5ef8460bb472beecd2e31a6cc34f0faa3",
+ "50ff0d306b50b7ae9d140cd18c898a4ac8f4796e",
[
null,
{}
@@ -755309,7 +757100,7 @@
]
],
"navigate.py": [
- "d61377af275902c48083d3d84b35c3bba30bc34e",
+ "a9ff3f6a05890201bd354d6d37312ce52c20c083",
[
null,
{}
@@ -755595,21 +757386,21 @@
},
"print": {
"background.py": [
- "22b392db2e3c51dbf68fe616bb3340535adf53f8",
+ "4f2f85980bae434c04f536d2ea7a2e8a3c6065bf",
[
null,
{}
]
],
"orientation.py": [
- "c2afacf94fb45adb7d163fd45974416b6a9fcc25",
+ "107cf380df6044d9b7fd335691efa7bd6b3181a1",
[
null,
{}
]
],
"printcmd.py": [
- "f3fe50bd92d6a7dc4f8bf0c2290f2ecebc0dd1d7",
+ "aec7769c3e890406508544b3d84410abf6a7a84f",
[
null,
{
@@ -755618,7 +757409,7 @@
]
],
"user_prompts.py": [
- "fb13ec2d65a25038641a42a67e48237fdef60c10",
+ "ade1c38a5c473037df15352ab119db57a728822c",
[
null,
{
@@ -755629,7 +757420,7 @@
},
"refresh": {
"refresh.py": [
- "b3647130c77ec6c0c84514ff9f599b9a872303e7",
+ "93a71bbf8b10f1fa2f18824c7ca512dcc011cf26",
[
null,
{}
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini
new file mode 100644
index 00000000000..0bb304465a7
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini
@@ -0,0 +1,27 @@
+[animation-duration-computed.html]
+ [Property animation-duration value 'auto']
+ expected: FAIL
+
+ [Property animation-duration value 'auto, auto']
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:auto]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:auto, auto]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:--t]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:--t, --t2]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:none]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:scroll()]
+ expected: FAIL
+
+ [Resolved value of animation-duration:auto with animation-timeline:view()]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-002.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-002.html.ini
new file mode 100644
index 00000000000..d695ff0e521
--- /dev/null
+++ b/tests/wpt/metadata/css/css-backgrounds/border-image-002.html.ini
@@ -0,0 +1,2 @@
+[border-image-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-003.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-003.html.ini
new file mode 100644
index 00000000000..182fa949db8
--- /dev/null
+++ b/tests/wpt/metadata/css/css-backgrounds/border-image-003.html.ini
@@ -0,0 +1,2 @@
+[border-image-003.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-004.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-004.html.ini
new file mode 100644
index 00000000000..e4f30d04308
--- /dev/null
+++ b/tests/wpt/metadata/css/css-backgrounds/border-image-004.html.ini
@@ -0,0 +1,2 @@
+[border-image-004.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-006.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-006.html.ini
new file mode 100644
index 00000000000..14f85783493
--- /dev/null
+++ b/tests/wpt/metadata/css/css-backgrounds/border-image-006.html.ini
@@ -0,0 +1,2 @@
+[border-image-006.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-012.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-012.html.ini
new file mode 100644
index 00000000000..126a8510576
--- /dev/null
+++ b/tests/wpt/metadata/css/css-backgrounds/border-image-012.html.ini
@@ -0,0 +1,2 @@
+[border-image-012.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini b/tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini
index 206453f3c7a..4d2a4b9f6d7 100644
--- a/tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini
@@ -5,9 +5,6 @@
[e.style['background'\] = "none" should set background-color]
expected: FAIL
- [e.style['background'\] = "none" should set background-position]
- expected: FAIL
-
[e.style['background'\] = "url(\\"https://example.com/\\") 1px 2px / 3px 4px space round local padding-box content-box, rgb(5, 6, 7) url(\\"https://example.com/\\") 1px 2px / 3px 4px space round local padding-box content-box" should set background-attachment]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-position/overlay/overlay-transition-backdrop.html.ini b/tests/wpt/metadata/css/css-position/overlay/overlay-transition-backdrop.html.ini
new file mode 100644
index 00000000000..f6389e9308d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-position/overlay/overlay-transition-backdrop.html.ini
@@ -0,0 +1,2 @@
+[overlay-transition-backdrop.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/text-stroke-width-subpixel.html.ini b/tests/wpt/metadata/css/css-text/text-stroke-width-subpixel.html.ini
new file mode 100644
index 00000000000..b60ebc9df3a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/text-stroke-width-subpixel.html.ini
@@ -0,0 +1,2 @@
+[text-stroke-width-subpixel.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini
index 5df2147d428..9b57dd697c9 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini
@@ -8,33 +8,15 @@
[Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (1) should be [translate(13px, 90%)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.25) should be [translate3d(7px, -6px, 11px) skewX(1.25rad) matrix3d(1, 0, 0, 0, 0, 1.25, 0, 0, 0, 0, 1, -0.001875, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateZ(2em)\] to [translateZ(3em)\] at (0.75) should be [translateZ(2.75em)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (-1) should be [translate3d(12px, 4px, 16px) skewX(0rad) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.005, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (-1) should be [translate3d(12px, 4px, 16px) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.003, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 200, 300, 1)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (-1) should be [translate3d(12px, 4px, 16px) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.003, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0) should be [matrix3d(1, 0, 0, 0, 1.5574077246549023, 1, 0, 0, -0.02, 0.01, 0.97, -0.0025, 8, -4, 12, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (0) should be [translateX(12px) translateY(70%) translateZ(2em)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (2) should be [matrix3d(1, 0, 0, 0, -11.227342763749263, 3, 0, 0, 0.021237113402061854, -0.010618556701030927, 1.03, -0.0014653608247422677, -8, 4, -12, 0.9861443298969074)\]]
- expected: FAIL
-
[CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 400, 600, 1)\]]
expected: FAIL
@@ -44,12 +26,6 @@
[Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (0) should be [skewX(10rad) translateY(70%)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.25) should be [translate3d(7px, -6px, 11px) skewX(1.25rad) matrix3d(1, 0, 0, 0, 0, 1.25, 0, 0, 0, 0, 1, -0.001875, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0) should be [translate3d(8px, -4px, 12px) matrix3d(1, 0, 0, 0, 1.55741, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (0.75) should be [translate(12.75px, 85%)\]]
expected: FAIL
@@ -59,18 +35,9 @@
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (2) should be [translate3d(0px, -20px, 4px) matrix3d(1, 0, 0, 0, -4.67222, 3, 0, 0, 0, 0, 1, -0.0015, 0, 0, 0, 1)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 1.1186572632293585, 1.25, 0, 0, -0.0151159793814433, 0.00755798969072165, 0.9775, -0.002378247422680413, 6, -3, 9, 1.0012989690721648)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 1.1186572632293585, 1.25, 0, 0, -0.0151159793814433, 0.00755798969072165, 0.9775, -0.002378247422680413, 6, -3, 9, 1.0012989690721648)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (2) should be [translate3d(0px, -20px, 4px) skewX(3rad) matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -0.7525665307288518, 1.75, 0, 0, -0.005115979381443298, 0.002557989690721649, 0.9924999999999999, -0.002128247422680412, 2, -1, 3, 1.001298969072165)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (-1) should be [translate3d(12px, 4px, 16px) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.003, 0, 0, 0, 1)\]]
expected: FAIL
@@ -83,27 +50,15 @@
[CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (1) should be [matrix(1, 0, 0, 1, 0, 0) \]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.25) should be [translate3d(7px, -6px, 11px) skewX(1.25rad) matrix3d(1, 0, 0, 0, 0, 1.25, 0, 0, 0, 0, 1, -0.001875, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (-1) should be [skewX(0rad) translateY(50%)\]]
expected: FAIL
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (2) should be [matrix3d(1, 0, 0, 0, -11.227342763749263, 3, 0, 0, 0.021237113402061854, -0.010618556701030927, 1.03, -0.0014653608247422677, -8, 4, -12, 0.9861443298969074)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 0, 0, 0, -0.03876288659793814, 0.01938144329896907, 0.94, -0.0029653608247422686, 16, -8, 24, 0.986144329896907)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (0.25) should be [translateX(12.25px)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.75) should be [translate3d(5px, -10px, 9px) skewX(1.75rad) matrix3d(1, 0, 0, 0, 0, 1.75, 0, 0, 0, 0, 1, -0.000625, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0.621795827675797, 1, 0, 0, 0, 0, 1, 0, 2, -1, 3, 1)\]]
- expected: FAIL
-
[CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 75, 150, 225, 1)\]]
expected: FAIL
@@ -113,54 +68,27 @@
[CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0) should be [matrix(1, 0, 1.5574077246549023, 1, 0, 0)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (2) should be [matrix3d(1, 0, 0, 0, -11.227342763749263, 3, 0, 0, 0.021237113402061854, -0.010618556701030927, 1.03, -0.0014653608247422677, -8, 4, -12, 0.9861443298969074)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateZ(2em)\] to [translateZ(3em)\] at (0) should be [translateZ(2em)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 0, 0, 0, -0.03876288659793814, 0.01938144329896907, 0.94, -0.0029653608247422686, 16, -8, 24, 0.986144329896907)\]]
- expected: FAIL
-
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (1) should be [translate3d(4px, -12px, 8px) matrix3d(1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]]
- expected: FAIL
-
[CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.75) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 25, 50, 75, 1)\]]
expected: FAIL
[CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0) should be [matrix(1, 0, 1.5574077246549023, 1, 0, 0)\]]
expected: FAIL
- [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 1, 0, 0, 0, 0, 1, 0, 8, -4, 12, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(12px, 70%, 2em)\] to [translate3d(13px, 90%, 3em)\] at (-1) should be [translate3d(11px, 50%, 1em)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (2) should be [translate3d(0px, -20px, 4px) matrix3d(1, 0, 0, 0, -4.67222, 3, 0, 0, 0, 0, 1, -0.0015, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0) should be [matrix(1, 0, 1.5574077246549023, 1, 0, 0)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0) should be [translate3d(8px, -4px, 12px) skewX(1rad) matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (1) should be [translateX(13px)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -1.2494279662824135, 1, 0, 0, 0, 0, 1, 0, 6, -3, 9, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (2) should be [matrix3d(1, 0, 0, 0, -5.9274874511779405, 1, 0, 0, 0, 0, 1, 0, 16, -8, 24, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (2) should be [translate3d(0px, -20px, 4px) skewX(3rad) matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0.0025, 0, 0, 0, 1)\]]
expected: FAIL
@@ -176,9 +104,6 @@
[Web Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0.621795827675797, 1, 0, 0, 0, 0, 1, 0, 2, -1, 3, 1)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (-1) should be [translate3d(12px, 4px, 16px) skewX(0rad) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.005, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateZ(2em)\] to [translateZ(3em)\] at (-1) should be [translateZ(1em)\]]
expected: FAIL
@@ -191,9 +116,6 @@
[CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0) should be [matrix(1, 0, 1.5574077246549023, 1, 0, 0)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.75) should be [translate3d(5px, -10px, 9px) matrix3d(1, 0, 0, 0, 0.681366, 1.75, 0, 0, 0, 0, 1, -0.002125, 0, 0, 0, 1)\]]
expected: FAIL
@@ -209,24 +131,15 @@
[Web Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (-1) should be [matrix3d(1, 0, 0, 0, 5.2998553125713235, 1, 0, 0, 0, 0, 1, 0, -8, 4, -12, 1)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0) should be [translate3d(8px, -4px, 12px) matrix3d(1, 0, 0, 0, 1.55741, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
[CSS Transitions: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (1) should be [matrix(1, 0, 0, 1, 0, 0) \]]
expected: FAIL
[Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (0.75) should be [skewX(17.5rad) translateY(85%)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0) should be [matrix3d(1, 0, 0, 0, 1.5574077246549023, 1, 0, 0, -0.02, 0.01, 0.97, -0.0025, 8, -4, 12, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (1) should be [translateX(13px) translateY(90%) translateZ(3em)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (2) should be [translate3d(0px, -20px, 4px) skewX(3rad) matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
[CSS Transitions: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 200, 300, 1)\]]
expected: FAIL
@@ -239,63 +152,27 @@
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.75) should be [translate3d(5px, -10px, 9px) skewX(1.75rad) matrix3d(1, 0, 0, 0, 0, 1.75, 0, 0, 0, 0, 1, -0.000625, 0, 0, 0, 1)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 1.1186572632293585, 1.25, 0, 0, -0.0151159793814433, 0.00755798969072165, 0.9775, -0.002378247422680413, 6, -3, 9, 1.0012989690721648)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (-1) should be [translate(11px, 50%)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0.621795827675797, 1, 0, 0, 0, 0, 1, 0, 2, -1, 3, 1)\]]
- expected: FAIL
-
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (2) should be [translate3d(0px, -20px, 4px) matrix3d(1, 0, 0, 0, -4.67222, 3, 0, 0, 0, 0, 1, -0.0015, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (-1) should be [translate3d(12px, 4px, 16px) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.003, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -0.7525665307288518, 1.75, 0, 0, -0.005115979381443298, 0.002557989690721649, 0.9924999999999999, -0.002128247422680412, 2, -1, 3, 1.001298969072165)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(12px, 70%, 2em)\] to [translate3d(13px, 90%, 3em)\] at (0) should be [translate3d(12px, 70%, 2em)\]]
expected: FAIL
[Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (2) should be [translateX(14px) translateY(110%) translateZ(4em)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 1, 0, 0, 0, 0, 1, 0, 8, -4, 12, 1)\]]
- expected: FAIL
-
[CSS Transitions with transition: all: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.75) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 25, 50, 75, 1)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 1, 0, 0, 0, 0, 1, 0, 8, -4, 12, 1)\]]
- expected: FAIL
-
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (1) should be [translate3d(4px, -12px, 8px) matrix3d(1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (2) should be [translateX(14px)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.25) should be [translate3d(7px, -6px, 11px) matrix3d(1, 0, 0, 0, 1.46007, 1.25, 0, 0, 0, 0, 1, -0.002375, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0) should be [translate3d(8px, -4px, 12px) matrix3d(1, 0, 0, 0, 1.55741, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]]
expected: FAIL
- [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (-1) should be [matrix3d(1, 0, 0, 0, 5.2998553125713235, 1, 0, 0, 0, 0, 1, 0, -8, 4, -12, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -0.7525665307288518, 1.75, 0, 0, -0.005115979381443298, 0.002557989690721649, 0.9924999999999999, -0.002128247422680412, 2, -1, 3, 1.001298969072165)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.75) should be [translate3d(5px, -10px, 9px) matrix3d(1, 0, 0, 0, 0.681366, 1.75, 0, 0, 0, 0, 1, -0.002125, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.25) should be [translate3d(7px, -6px, 11px) matrix3d(1, 0, 0, 0, 1.46007, 1.25, 0, 0, 0, 0, 1, -0.002375, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (0.25) should be [skewX(12.5rad) translateY(75%)\]]
expected: FAIL
@@ -308,66 +185,36 @@
[CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (2) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -100, -200, -300, 1)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.75) should be [translate3d(5px, -10px, 9px) matrix3d(1, 0, 0, 0, 0.681366, 1.75, 0, 0, 0, 0, 1, -0.002125, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateY(70%)\] to [translateY(90%)\] at (-1) should be [translateY(50%)\]]
expected: FAIL
[Web Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.75) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 25, 50, 75, 1)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (2) should be [matrix3d(1, 0, 0, 0, -11.227342763749263, 3, 0, 0, 0.021237113402061854, -0.010618556701030927, 1.03, -0.0014653608247422677, -8, 4, -12, 0.9861443298969074)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (1) should be [matrix(1, 0, 0, 1, 0, 0) \]]
expected: FAIL
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.25) should be [translate3d(7px, -6px, 11px) matrix3d(1, 0, 0, 0, 1.46007, 1.25, 0, 0, 0, 0, 1, -0.002375, 0, 0, 0, 1)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0) should be [translate3d(8px, -4px, 12px) skewX(1rad) matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (2) should be [translate(14px, 110%)\]]
expected: FAIL
- [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (2) should be [matrix3d(1, 0, 0, 0, -5.9274874511779405, 1, 0, 0, 0, 0, 1, 0, 16, -8, 24, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 1, 0, 0, 0, 0, 1, 0, 8, -4, 12, 1)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.75) should be [translate3d(5px, -10px, 9px) skewX(1.75rad) matrix3d(1, 0, 0, 0, 0, 1.75, 0, 0, 0, 0, 1, -0.000625, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (0) should be [translate(12px, 70%)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0) should be [translate3d(8px, -4px, 12px) matrix3d(1, 0, 0, 0, 1.55741, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.75) should be [translate3d(5px, -10px, 9px) matrix3d(1, 0, 0, 0, 0.681366, 1.75, 0, 0, 0, 0, 1, -0.002125, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateY(70%)\] to [translateY(90%)\] at (1) should be [translateY(90%)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 1.1186572632293585, 1.25, 0, 0, -0.0151159793814433, 0.00755798969072165, 0.9775, -0.002378247422680413, 6, -3, 9, 1.0012989690721648)\]]
- expected: FAIL
-
[CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (1) should be [translate3d(4px, -12px, 8px) skewX(2rad) matrix(1, 0, 0, 2, 0, 0)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0) should be [matrix3d(1, 0, 0, 0, 1.5574077246549023, 1, 0, 0, -0.02, 0.01, 0.97, -0.0025, 8, -4, 12, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (-1) should be [translateX(11px)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0) should be [translate3d(8px, -4px, 12px) skewX(1rad) matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
[CSS Transitions: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 400, 600, 1)\]]
expected: FAIL
@@ -377,15 +224,9 @@
[Web Animations: property <transform> from [translateZ(2em)\] to [translateZ(3em)\] at (1) should be [translateZ(3em)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -1.2494279662824135, 1, 0, 0, 0, 0, 1, 0, 6, -3, 9, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (-1) should be [translate3d(12px, 4px, 16px) skewX(0rad) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.005, 0, 0, 0, 1)\]]
expected: FAIL
- [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -1.2494279662824135, 1, 0, 0, 0, 0, 1, 0, 6, -3, 9, 1)\]]
- expected: FAIL
-
[CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (1) should be [translate3d(4px, -12px, 8px) skewX(2rad) matrix(1, 0, 0, 2, 0, 0)\]]
expected: FAIL
@@ -404,30 +245,9 @@
[Web Animations: property <transform> from [translate3d(12px, 70%, 2em)\] to [translate3d(13px, 90%, 3em)\] at (0.75) should be [translate3d(12.75px, 85%, 2.75em)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0.621795827675797, 1, 0, 0, 0, 0, 1, 0, 2, -1, 3, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (1) should be [translate3d(4px, -12px, 8px) skewX(2rad) matrix(1, 0, 0, 2, 0, 0)\]]
expected: FAIL
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.25) should be [translate3d(7px, -6px, 11px) matrix3d(1, 0, 0, 0, 1.46007, 1.25, 0, 0, 0, 0, 1, -0.002375, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (2) should be [translate3d(0px, -20px, 4px) skewX(3rad) matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0.0025, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (2) should be [translate3d(0px, -20px, 4px) matrix3d(1, 0, 0, 0, -4.67222, 3, 0, 0, 0, 0, 1, -0.0015, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (-1) should be [translate3d(12px, 4px, 16px) skewX(0rad) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.005, 0, 0, 0, 1)\]]
- expected: FAIL
-
- [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (2) should be [matrix3d(1, 0, 0, 0, -5.9274874511779405, 1, 0, 0, 0, 0, 1, 0, 16, -8, 24, 1)\]]
- expected: FAIL
-
- [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (-1) should be [matrix3d(1, 0, 0, 0, 5.2998553125713235, 1, 0, 0, 0, 0, 1, 0, -8, 4, -12, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0) should be [matrix3d(1, 0, 0, 0, 1.5574077246549023, 1, 0, 0, -0.02, 0.01, 0.97, -0.0025, 8, -4, 12, 1)\]]
expected: FAIL
@@ -443,15 +263,6 @@
[CSS Transitions: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 75, 150, 225, 1)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -0.7525665307288518, 1.75, 0, 0, -0.005115979381443298, 0.002557989690721649, 0.9924999999999999, -0.002128247422680412, 2, -1, 3, 1.001298969072165)\]]
- expected: FAIL
-
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 0, 0, 0, -0.03876288659793814, 0.01938144329896907, 0.94, -0.0029653608247422686, 16, -8, 24, 0.986144329896907)\]]
- expected: FAIL
-
- [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (1) should be [translate3d(4px, -12px, 8px) matrix3d(1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateY(70%)\] to [translateY(90%)\] at (0) should be [translateY(70%)\]]
expected: FAIL
@@ -464,27 +275,17 @@
[Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (0.25) should be [translateX(12.25px) translateY(75%) translateZ(2.25em)\]]
expected: FAIL
- [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.75) should be [translate3d(5px, -10px, 9px) skewX(1.75rad) matrix3d(1, 0, 0, 0, 0, 1.75, 0, 0, 0, 0, 1, -0.000625, 0, 0, 0, 1)\]]
- expected: FAIL
-
[CSS Transitions with transition: all: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 200, 300, 1)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (-1) should be [translateX(11px) translateY(50%) translateZ(1em)\]]
expected: FAIL
[Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (0.75) should be [translateX(12.75px)\]]
expected: FAIL
- [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (-1) should be [matrix3d(1, 0, 0, 0, 5.2998553125713235, 1, 0, 0, 0, 0, 1, 0, -8, 4, -12, 1)\]]
- expected: FAIL
-
[Web Animations: property <transform> from [translate3d(12px, 70%, 2em)\] to [translate3d(13px, 90%, 3em)\] at (0.25) should be [translate3d(12.25px, 75%, 2.25em)\]]
expected: FAIL
[Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (1) should be [skewX(20rad) translateY(90%)\]]
expected: FAIL
-
diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-load-event.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-load-event.html.ini
new file mode 100644
index 00000000000..cff25974ea9
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-load-event.html.ini
@@ -0,0 +1,3 @@
+[HTMLLinkElement-load-event.html]
+ [Link element load event doesn't block the parser.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html.ini b/tests/wpt/metadata/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html.ini
new file mode 100644
index 00000000000..abc91030830
--- /dev/null
+++ b/tests/wpt/metadata/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html.ini
@@ -0,0 +1,2 @@
+[negated-nth-child-when-ancestor-changes.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html.ini b/tests/wpt/metadata/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html.ini
new file mode 100644
index 00000000000..f908ecc15fd
--- /dev/null
+++ b/tests/wpt/metadata/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html.ini
@@ -0,0 +1,2 @@
+[negated-nth-last-child-when-ancestor-changes.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini
index 6b36b7c0d59..53c21f695d4 100644
--- a/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini
+++ b/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini
@@ -43,7 +43,7 @@
expected: FAIL
[popover on HTMLElement must enqueue an attributeChanged reaction when adding popover content attribute]
- expected: FAIL
+ expected: PRECONDITION_FAILED
[popover on HTMLElement must enqueue an attributeChanged reaction when replacing an existing attribute]
- expected: FAIL
+ expected: PRECONDITION_FAILED
diff --git a/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini
index 4e03d42d068..8eb904ed506 100644
--- a/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini
+++ b/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini
@@ -34,3 +34,6 @@
[local https to local https: success.]
expected: FAIL
+
+ [private to private: success.]
+ 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 d7ccdbdf676..1bca09f21d6 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
@@ -1,10 +1,9 @@
[iframe-src-aboutblank-navigate-immediately.html]
- expected: TIMEOUT
[Navigating to a different document with window.open]
expected: FAIL
[Navigating to a different document with link click]
- expected: TIMEOUT
+ expected: FAIL
[Navigating to a different document with form submission]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini
new file mode 100644
index 00000000000..60a4fa51f8a
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini
@@ -0,0 +1,3 @@
+[a-click.html]
+ [aElement.click() before the load event must NOT replace]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini
new file mode 100644
index 00000000000..f49298fea1f
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini
@@ -0,0 +1,4 @@
+[pageload-image-in-popup.html]
+ expected: TIMEOUT
+ [The document for a standalone media file should have one child in the body.]
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini b/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini
index 24c9e5d3926..90eb9ed743b 100644
--- a/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini
+++ b/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini
@@ -1,5 +1,4 @@
[cross-origin-objects.html]
- expected: TIMEOUT
[Basic sanity-checking (cross-origin)]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
index 3613f3de8bf..558ce5dcaa5 100644
--- a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
+++ b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
@@ -1,5 +1,4 @@
[embedded-opener-remove-frame.html]
- expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini b/tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini
index 3db28a14187..3f02c8abdf5 100644
--- a/tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini
@@ -2,3 +2,5 @@
[Testing basic functionalities of fontKerning for canvas]
expected: FAIL
+ [Testing basic functionalities of fontVariant for canvas]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.cross-layer-paths.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.cross-layer-paths.html.ini
new file mode 100644
index 00000000000..31a9fbece14
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.cross-layer-paths.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.cross-layer-paths.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini
new file mode 100644
index 00000000000..496ead4da9e
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-reset-endLayer.html]
+ [Raises exception on beginLayer() + reset() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini
new file mode 100644
index 00000000000..444711d1cb5
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-restore.html]
+ [Raises exception on beginLayer() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini
new file mode 100644
index 00000000000..faa85d2001e
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-save-endLayer.html]
+ [Raises exception on beginLayer() + save() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html.ini
new file mode 100644
index 00000000000..a0fa169daf0
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.endLayer.html]
+ [Raises exception on lone endLayer calls.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini
new file mode 100644
index 00000000000..aa99622e06d
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.save-beginLayer-restore.html]
+ [Raises exception on save() + beginLayer() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html.ini
new file mode 100644
index 00000000000..6e387a858cc
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.save-endLayer.html]
+ [Raises exception on save() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.reset.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.reset.html.ini
new file mode 100644
index 00000000000..a8ea215b961
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.reset.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.reset.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.unclosed-nested.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.unclosed-nested.html.ini
new file mode 100644
index 00000000000..05e5e6521b0
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.unclosed-nested.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.unclosed-nested.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini
new file mode 100644
index 00000000000..533365a84e0
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer-endLayer.html]
+ [No exception raised on beginLayer() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html.ini
new file mode 100644
index 00000000000..e20d4c7cbee
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer-save.html]
+ [No exception raised on beginLayer() + save().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html.ini
new file mode 100644
index 00000000000..1b6445b05e9
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer.html]
+ [No exception raised on lone beginLayer() calls.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html.ini
new file mode 100644
index 00000000000..e477a705dc3
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.save-beginLayer.html]
+ [No exception raised on save() + beginLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html.ini
new file mode 100644
index 00000000000..bb8658055e1
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.save_reset_restore.html]
+ [No exception raised on save() + reset() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini
index cb95d477d9f..6977cd809fb 100644
--- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini
@@ -2,3 +2,5 @@
[Space characters at the end of a line are collapsed (per CSS)]
expected: FAIL
+ [Space characters at the end of a line are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini
index 1eb038b12c4..788874e33cb 100644
--- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020, and collapsed (per CSS)]
expected: FAIL
+ [Space characters are converted to U+0020, and are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini
index 6aebf256e44..29a17e29f3c 100644
--- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020, and collapsed (per CSS)]
expected: FAIL
+ [Space characters are converted to U+0020, and are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html.ini
new file mode 100644
index 00000000000..14a3cd3ba4d
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html.ini
@@ -0,0 +1,3 @@
+[2d.text.draw.space.collapse.start.html]
+ [Space characters at the start of a line are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.font.parse.complex.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.font.parse.complex.html.ini
deleted file mode 100644
index 6c349803d6b..00000000000
--- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.font.parse.complex.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.text.font.parse.complex.html]
- [Canvas test: 2d.text.font.parse.complex]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini
index 471785ac065..e2d0be20f73 100644
--- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020 and collapsed (per CSS)]
expected: FAIL
+ [Space characters are converted to U+0020 and NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html.ini
new file mode 100644
index 00000000000..d5060a30811
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html.ini
@@ -0,0 +1,3 @@
+[2d.fillStyle.CSSRGB.html]
+ [CSSRGB works as color input]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html.ini
new file mode 100644
index 00000000000..0a8b4be90d6
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html.ini
@@ -0,0 +1,3 @@
+[2d.gradient.interpolate.zerosize.fillText.html]
+ [OffscreenCanvas test: 2d.gradient.interpolate.zerosize.fillText]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js.ini
new file mode 100644
index 00000000000..0a6c14e61c4
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.gradient.interpolate.zerosize.fillText.worker.html]
+ [2d]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html.ini
new file mode 100644
index 00000000000..dc008b71116
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html.ini
@@ -0,0 +1,3 @@
+[2d.gradient.interpolate.zerosize.strokeText.html]
+ [OffscreenCanvas test: 2d.gradient.interpolate.zerosize.strokeText]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js.ini
new file mode 100644
index 00000000000..2dc871e9499
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.gradient.interpolate.zerosize.strokeText.worker.html]
+ [2d]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html.ini
new file mode 100644
index 00000000000..4c3373ceaba
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html.ini
@@ -0,0 +1,3 @@
+[2d.pattern.basic.type.html]
+ [OffscreenCanvas test: 2d.pattern.basic.type]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js.ini
new file mode 100644
index 00000000000..94a6165796f
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.pattern.basic.type.worker.html]
+ [2d]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html.ini
new file mode 100644
index 00000000000..e3346f3c063
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html.ini
@@ -0,0 +1,3 @@
+[2d.pattern.transform.identity.html]
+ [OffscreenCanvas test: 2d.pattern.transform.identity]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js.ini
new file mode 100644
index 00000000000..09484f510c6
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.pattern.transform.identity.worker.html]
+ [2d]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html.ini
new file mode 100644
index 00000000000..f364e3ccc8e
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html.ini
@@ -0,0 +1,3 @@
+[2d.pattern.transform.infinity.html]
+ [OffscreenCanvas test: 2d.pattern.transform.infinity]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js.ini
new file mode 100644
index 00000000000..2bde0688389
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.pattern.transform.infinity.worker.html]
+ [2d]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html.ini
new file mode 100644
index 00000000000..31a9fbece14
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.cross-layer-paths.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html.ini
new file mode 100644
index 00000000000..c1f94bab034
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.cross-layer-paths.w.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html.ini
deleted file mode 100644
index 8707ec46c87..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[2d.layer.endlayer.alone.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html.ini
deleted file mode 100644
index 9634b39bdea..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[2d.layer.endlayer.alone.w.html]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html.ini
deleted file mode 100644
index 3159d54e5d5..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[2d.layer.endlayer.unmatched.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html.ini
deleted file mode 100644
index 842409080a7..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[2d.layer.endlayer.unmatched.w.html]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini
new file mode 100644
index 00000000000..496ead4da9e
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-reset-endLayer.html]
+ [Raises exception on beginLayer() + reset() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js.ini
new file mode 100644
index 00000000000..f21042077c2
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.html]
+ [Raises exception on beginLayer() + reset() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini
new file mode 100644
index 00000000000..444711d1cb5
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-restore.html]
+ [Raises exception on beginLayer() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js.ini
new file mode 100644
index 00000000000..0d70c915210
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-restore.worker.html]
+ [Raises exception on beginLayer() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini
new file mode 100644
index 00000000000..faa85d2001e
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-save-endLayer.html]
+ [Raises exception on beginLayer() + save() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js.ini
new file mode 100644
index 00000000000..e0d36e7a967
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.beginLayer-save-endLayer.worker.html]
+ [Raises exception on beginLayer() + save() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html.ini
new file mode 100644
index 00000000000..a0fa169daf0
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.endLayer.html]
+ [Raises exception on lone endLayer calls.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js.ini
new file mode 100644
index 00000000000..6be52066638
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.endLayer.worker.html]
+ [Raises exception on lone endLayer calls.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini
new file mode 100644
index 00000000000..aa99622e06d
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.save-beginLayer-restore.html]
+ [Raises exception on save() + beginLayer() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js.ini
new file mode 100644
index 00000000000..1daf8a926bf
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.save-beginLayer-restore.worker.html]
+ [Raises exception on save() + beginLayer() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html.ini
new file mode 100644
index 00000000000..6e387a858cc
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.save-endLayer.html]
+ [Raises exception on save() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js.ini
new file mode 100644
index 00000000000..8d2d20076f7
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.invalid-calls.save-endLayer.worker.html]
+ [Raises exception on save() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.html.ini
new file mode 100644
index 00000000000..a8ea215b961
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.reset.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.w.html.ini
new file mode 100644
index 00000000000..ffe6604630a
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.w.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.reset.w.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html.ini
new file mode 100644
index 00000000000..05e5e6521b0
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.unclosed-nested.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html.ini
new file mode 100644
index 00000000000..e721c702a1d
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html.ini
@@ -0,0 +1,2 @@
+[2d.layer.unclosed-nested.w.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini
new file mode 100644
index 00000000000..533365a84e0
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer-endLayer.html]
+ [No exception raised on beginLayer() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js.ini
new file mode 100644
index 00000000000..578649c9794
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer-endLayer.worker.html]
+ [No exception raised on beginLayer() + endLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html.ini
new file mode 100644
index 00000000000..e20d4c7cbee
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer-save.html]
+ [No exception raised on beginLayer() + save().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js.ini
new file mode 100644
index 00000000000..ada8e6e57b5
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer-save.worker.html]
+ [No exception raised on beginLayer() + save().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html.ini
new file mode 100644
index 00000000000..1b6445b05e9
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer.html]
+ [No exception raised on lone beginLayer() calls.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js.ini
new file mode 100644
index 00000000000..6987943ebe6
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.beginLayer.worker.html]
+ [No exception raised on lone beginLayer() calls.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html.ini
new file mode 100644
index 00000000000..e477a705dc3
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.save-beginLayer.html]
+ [No exception raised on save() + beginLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js.ini
new file mode 100644
index 00000000000..662b71b7dbc
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.save-beginLayer.worker.html]
+ [No exception raised on save() + beginLayer().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html.ini
new file mode 100644
index 00000000000..bb8658055e1
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.save_reset_restore.html]
+ [No exception raised on save() + reset() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js.ini
new file mode 100644
index 00000000000..14c92491ba3
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.layer.valid-calls.save_reset_restore.worker.html]
+ [No exception raised on save() + reset() + restore().]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini b/tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini
index 4c5795bed90..d441d8d17f7 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini
@@ -14,3 +14,5 @@
[Test that calling getContext('2d') on a detached OffscreenCanvas throws exception.]
expected: FAIL
+ [Test that transfer an OffscreenCanvas that already have a 2d context throws exception.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini
index cb95d477d9f..6977cd809fb 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini
@@ -2,3 +2,5 @@
[Space characters at the end of a line are collapsed (per CSS)]
expected: FAIL
+ [Space characters at the end of a line are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini
index a6d773d8450..e71752d438f 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini
@@ -2,3 +2,5 @@
[Space characters at the end of a line are collapsed (per CSS)]
expected: FAIL
+ [Space characters at the end of a line are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini
index 1eb038b12c4..788874e33cb 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020, and collapsed (per CSS)]
expected: FAIL
+ [Space characters are converted to U+0020, and are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini
index 8959b461ee0..1c2b191e43d 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020, and collapsed (per CSS)]
expected: FAIL
+ [Space characters are converted to U+0020, and are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini
index 6aebf256e44..29a17e29f3c 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020, and collapsed (per CSS)]
expected: FAIL
+ [Space characters are converted to U+0020, and are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini
index 7a55af6845d..247f77f59f7 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020, and collapsed (per CSS)]
expected: FAIL
+ [Space characters are converted to U+0020, and are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini
index 2e400f45551..6c165dc1372 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini
@@ -2,3 +2,5 @@
[Space characters at the start of a line are collapsed (per CSS)]
expected: FAIL
+ [Space characters at the start of a line are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini
index 32469f60d90..22e8d76dcd7 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini
@@ -2,3 +2,5 @@
[Space characters at the start of a line are collapsed (per CSS)]
expected: FAIL
+ [Space characters at the start of a line are NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini
index 3db28a14187..3f02c8abdf5 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini
@@ -2,3 +2,5 @@
[Testing basic functionalities of fontKerning for canvas]
expected: FAIL
+ [Testing basic functionalities of fontVariant for canvas]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini
index caffba5a37d..fcd8921b0cb 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini
@@ -2,3 +2,5 @@
[Testing basic functionalities of fontKerning for canvas]
expected: FAIL
+ [Testing basic functionalities of fontVariant for canvas]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.html.ini
new file mode 100644
index 00000000000..5459525b077
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.html.ini
@@ -0,0 +1,3 @@
+[2d.text.font.parse.complex2.html]
+ [OffscreenCanvas test: 2d.text.font.parse.complex2]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js.ini
new file mode 100644
index 00000000000..805965d47e9
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js.ini
@@ -0,0 +1,3 @@
+[2d.text.font.parse.complex2.worker.html]
+ [2d]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini
index 5ed3378b4f6..c2696aebba2 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas]
expected: FAIL
+ [Space characters are converted to U+0020 and NOT collapsed]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini
index fc8abc87933..7f49879d842 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini
@@ -2,3 +2,5 @@
[Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas]
expected: FAIL
+ [Space characters are converted to U+0020 and NOT collapsed]
+ expected: FAIL
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/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini
new file mode 100644
index 00000000000..a7b23688dad
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini
@@ -0,0 +1,3 @@
+[resource-selection-source-media-env-change.html]
+ [the <source> media attribute: no reaction to environment change]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini
index 93215a877a4..3ecab634971 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini
@@ -2,3 +2,5 @@
[the <source> media attribute has no effect]
expected: FAIL
+ [the <source> media attribute]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/video_008.htm.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/video_008.htm.ini
deleted file mode 100644
index 9abec1b147d..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/video_008.htm.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[video_008.htm]
- [HTML5 Media Elements: 'media' attribute]
- 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-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 6f7461b9472..53b0601e68c 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,4 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
+ expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
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 84d07e03c64..7907a19a508 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
@@ -56,9 +56,6 @@
[multipart/form-data: \\r\\n in value (normal form)]
expected: FAIL
- [multipart/form-data: \\r\\n in value (formdata event)]
- expected: FAIL
-
[multipart/form-data: \\n\\r in value (normal form)]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/historical.html.ini b/tests/wpt/metadata/html/semantics/forms/historical.html.ini
deleted file mode 100644
index 5d8289307cc..00000000000
--- a/tests/wpt/metadata/html/semantics/forms/historical.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[historical.html]
- [<input name=isindex> should not be supported]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini
index c6a7a498152..671b79580ec 100644
--- a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini
+++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini
@@ -10,3 +10,6 @@
[mutation event and toggle event order matches order of insertion in set of named elements]
expected: FAIL
+
+ [mutation event and toggle event order matches tree order]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/disabled.html.ini b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/disabled.html.ini
deleted file mode 100644
index 1bad2c00b1a..00000000000
--- a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/disabled.html.ini
+++ /dev/null
@@ -1,18 +0,0 @@
-[disabled.html]
- [':disabled' should match only disabled elements]
- expected: FAIL
-
- [':disabled' should not match elements whose disabled attribute has been removed]
- expected: FAIL
-
- [':disabled' should also match elements whose disabled attribute has been set]
- expected: FAIL
-
- [':disabled' should also match elements whose disabled attribute has been set twice]
- expected: FAIL
-
- [':disabled' should also match disabled elements whose type has changed]
- expected: FAIL
-
- [':disabled' should not match elements not in the document]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini
index 31bfd644df0..8bcf3a07de4 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini
@@ -1,9 +1,10 @@
[promise-job-entry.html]
+ expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
- expected: FAIL
+ expected: TIMEOUT
[Sanity check: this all works as expected with no promises involved]
expected: FAIL
@@ -15,4 +16,4 @@
expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise]
- expected: FAIL
+ expected: TIMEOUT
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/018.html.ini b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
deleted file mode 100644
index b7b36c1d3a4..00000000000
--- a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[018.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, javascript:]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/websockets/send-many-64K-messages-with-backpressure.any.js.ini b/tests/wpt/metadata/websockets/send-many-64K-messages-with-backpressure.any.js.ini
new file mode 100644
index 00000000000..96f9da18cec
--- /dev/null
+++ b/tests/wpt/metadata/websockets/send-many-64K-messages-with-backpressure.any.js.ini
@@ -0,0 +1,27 @@
+[send-many-64K-messages-with-backpressure.any.serviceworker.html]
+ expected: ERROR
+
+[send-many-64K-messages-with-backpressure.any.sharedworker.html?wss]
+ expected: ERROR
+
+[send-many-64K-messages-with-backpressure.any.html?wpt_flags=h2]
+ [sending 50 messages of size 65536 with backpressure applied should not hang]
+ expected: FAIL
+
+
+[send-many-64K-messages-with-backpressure.any.serviceworker.html?wpt_flags=h2]
+ expected: ERROR
+
+[send-many-64K-messages-with-backpressure.any.worker.html?wpt_flags=h2]
+ [sending 50 messages of size 65536 with backpressure applied should not hang]
+ expected: FAIL
+
+
+[send-many-64K-messages-with-backpressure.any.serviceworker.html?wss]
+ expected: ERROR
+
+[send-many-64K-messages-with-backpressure.any.sharedworker.html]
+ expected: ERROR
+
+[send-many-64K-messages-with-backpressure.any.sharedworker.html?wpt_flags=h2]
+ expected: ERROR
diff --git a/tests/wpt/mozilla/meta/mozilla/img_placeholder_load.html.ini b/tests/wpt/mozilla/meta/mozilla/img_placeholder_load.html.ini
new file mode 100644
index 00000000000..f6e96da94e0
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/img_placeholder_load.html.ini
@@ -0,0 +1,4 @@
+[img_placeholder_load.html]
+ expected: TIMEOUT
+ [Loading a placeholder image should trigger an error on the img element]
+ expected: TIMEOUT
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..d380380616c
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini
@@ -0,0 +1,3 @@
+[task_queue_throttling.any.html]
+ [Throttling the performance timeline task queue.]
+ expected: FAIL
diff --git a/tests/wpt/web-platform-tests/.azure-pipelines.yml b/tests/wpt/web-platform-tests/.azure-pipelines.yml
index 428411d04ab..4dae0798b03 100644
--- a/tests/wpt/web-platform-tests/.azure-pipelines.yml
+++ b/tests/wpt/web-platform-tests/.azure-pipelines.yml
@@ -144,7 +144,8 @@ jobs:
steps:
- task: UsePythonVersion@0
inputs:
- versionSpec: '3.7'
+ # TODO(#40525): Revert back to 3.7 once the Mac agent's Python v3.7 contains bz2 again.
+ versionSpec: '3.7.16'
- template: tools/ci/azure/checkout.yml
- template: tools/ci/azure/tox_pytest.yml
parameters:
@@ -176,7 +177,8 @@ jobs:
steps:
- task: UsePythonVersion@0
inputs:
- versionSpec: '3.7'
+ # TODO(#40525): Revert back to 3.7 once the Mac agent's Python v3.7 contains bz2 again.
+ versionSpec: '3.7.16'
- template: tools/ci/azure/checkout.yml
- template: tools/ci/azure/tox_pytest.yml
parameters:
@@ -209,7 +211,8 @@ jobs:
# full checkout required
- task: UsePythonVersion@0
inputs:
- versionSpec: '3.7'
+ # TODO(#40525): Revert back to 3.7 once the Mac agent's Python v3.7 contains bz2 again.
+ versionSpec: '3.7.16'
- template: tools/ci/azure/install_chrome.yml
- template: tools/ci/azure/install_firefox.yml
- template: tools/ci/azure/update_hosts.yml
diff --git a/tests/wpt/web-platform-tests/.well-known/private-aggregation/debug/report-shared-storage b/tests/wpt/web-platform-tests/.well-known/private-aggregation/debug/report-shared-storage
new file mode 100644
index 00000000000..7ffdb70773d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/.well-known/private-aggregation/debug/report-shared-storage
@@ -0,0 +1,7 @@
+"""Endpoint to receive and return aggregatable reports."""
+from importlib import import_module
+
+reports = import_module('private-aggregation.resources.reports')
+
+def main(request, response):
+ return reports.handle_request(request)
diff --git a/tests/wpt/web-platform-tests/.well-known/private-aggregation/report-shared-storage b/tests/wpt/web-platform-tests/.well-known/private-aggregation/report-shared-storage
new file mode 100644
index 00000000000..7ffdb70773d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/.well-known/private-aggregation/report-shared-storage
@@ -0,0 +1,7 @@
+"""Endpoint to receive and return aggregatable reports."""
+from importlib import import_module
+
+reports = import_module('private-aggregation.resources.reports')
+
+def main(request, response):
+ return reports.handle_request(request)
diff --git a/tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html b/tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html
index 374b05c8fd2..5833b7e9ba9 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html
@@ -126,7 +126,7 @@ for (const databaseKind of ['open', 'closed']) {
const sameOriginDbNames = await crossOriginHelper(
testCase, mode, sameOrigin, { action: 'get-database-names' });
assert_in_array(
- sameOriginDbNames, dbName,
+ dbName, sameOriginDbNames,
`Database creation should reflect in same-origin ${mode}`);
const otherOriginDbNames = await crossOriginHelper(
diff --git a/tests/wpt/web-platform-tests/accessibility/crashtests/append-image-using-illegal-map.html b/tests/wpt/web-platform-tests/accessibility/crashtests/append-image-using-illegal-map.html
new file mode 100644
index 00000000000..c78e74eeed7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/accessibility/crashtests/append-image-using-illegal-map.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<map name="map1"><button><li>xyz</li></button></map>
+<script>
+ const image = document.createElement('img');
+ image.setAttribute('src', 'exists.gif');
+ image.setAttribute('usemap', '#map1');
+ document.documentElement.appendChild(image);
+</script>
diff --git a/tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html b/tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html
index db7c664251a..5787de8059f 100644
--- a/tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html
+++ b/tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html
@@ -7,7 +7,7 @@ This test passes if it does not crash.
<img usemap="#map2">
<map id=map name="map2">
<command id=command>
- <article id=article ></article>
+ <article id=article></article>
</command>
</map>
<script>
diff --git a/tests/wpt/web-platform-tests/accessibility/crashtests/removed-from-flat-tree.html b/tests/wpt/web-platform-tests/accessibility/crashtests/removed-from-flat-tree.html
new file mode 100644
index 00000000000..2deaf6ab390
--- /dev/null
+++ b/tests/wpt/web-platform-tests/accessibility/crashtests/removed-from-flat-tree.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<audio src="foo"></audio>
+<template shadowroot="closed"></template>
diff --git a/tests/wpt/web-platform-tests/accname/basic.html b/tests/wpt/web-platform-tests/accname/basic.html
index 097123569db..d84f4dc3b95 100644
--- a/tests/wpt/web-platform-tests/accname/basic.html
+++ b/tests/wpt/web-platform-tests/accname/basic.html
@@ -5,6 +5,16 @@
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
+<!--
+
+These tests should remain solid and passing in any implementation that supports get_computed_label.
+
+It uses a standard promise_test (rather than aria-util.js) to reduce other dependencies.
+
+If you're adding something you expect to fail in one or more implementations, you probably want a different file.
+
+-->
+
<div id='d' style='height: 100px; width: 100px' role="group" aria-label="test label"></div>
<h1 id="h">test heading</h1>
<script>
diff --git a/tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html b/tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html
index 21efd76180c..96d2886f0e3 100644
--- a/tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html
+++ b/tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html
@@ -7,6 +7,6 @@
});
</script>
-<iframe src="embedded-popup-expect-no-hints.html" />
+<iframe src="embedded-popup-expect-no-hints.html"></iframe>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html b/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html
new file mode 100644
index 00000000000..87fce5961fd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+ <title>External scripts with matching SRI hash (in default-src) should be allowed.</title>
+ <script src='/resources/testharness.js' nonce='dummy'></script>
+ <script src='/resources/testharnessreport.js' nonce='dummy'></script>
+
+ <!-- CSP served: default-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=='; style-src 'unsafe-inline' -->
+ <!-- ShA256 is intentionally mixed case -->
+</head>
+
+<body>
+ <h1>External scripts with matching SRI hash (in default-src) should be allowed.</h1>
+ <div id='log'></div>
+
+ <script nonce='dummy'>
+ var port = "{{ports[http][0]}}";
+ if (location.protocol === "https:")
+ port = "{{ports[https][0]}}";
+ var crossorigin_base = location.protocol + "//{{domains[www]}}:" + port;
+
+ // Test name, src, integrity, expected to run.
+ var test_cases = [
+ [ 'matching integrity',
+ './simpleSourcedScript.js',
+ 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=',
+ true ],
+ [ 'matching integrity (case-insensitive algorithm)',
+ './simpleSourcedScript.js',
+ 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=',
+ true ],
+ [ 'multiple matching integrity',
+ './simpleSourcedScript.js',
+ 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA==',
+ true ],
+ [ 'no integrity',
+ './simpleSourcedScript.js',
+ '',
+ false ],
+ [ 'matching plus unsupported integrity',
+ './simpleSourcedScript.js',
+ 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha999-xyz',
+ true ],
+ [ 'mismatched integrity',
+ './simpleSourcedScript.js',
+ 'sha256-xyz',
+ false ],
+ [ 'multiple mismatched integrity',
+ './simpleSourcedScript.js',
+ 'sha256-xyz sha256-zyx',
+ false ],
+ [ 'partially matching integrity',
+ './simpleSourcedScript.js',
+ 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha256-xyz',
+ false ],
+ [ 'crossorigin no integrity but allowed host',
+ crossorigin_base + '/content-security-policy/script-src/crossoriginScript.js',
+ '',
+ true ],
+ [ 'crossorigin mismatched integrity but allowed host',
+ crossorigin_base + '/content-security-policy/script-src/crossoriginScript.js',
+ 'sha256-kKJ5c48yxzaaSBupJSCmY50hkD8xbVgZgLHLtmnkeAo=',
+ true ],
+ ];
+
+ test(_ => {
+ for (item of test_cases) {
+ async_test(t => {
+ var s = document.createElement('script');
+ s.id = item[0].replace(' ', '-');
+ s.src = item[1];
+ s.integrity = item[2];
+ s.setAttribute('crossorigin', 'anonymous');
+
+ if (item[3]) {
+ s.onerror = t.unreached_func("Script should load! " + s.src);
+ window.addEventListener('message', t.step_func(e => {
+ if (e.data == s.id)
+ t.done();
+ }));
+ } else {
+ s.onerror = t.step_func_done();
+ window.addEventListener('message', t.step_func(e => {
+ if (e.data == s.id)
+ assert_unreached("Script should not execute!");
+ }));
+ }
+
+ document.body.appendChild(s);
+ }, item[0]);
+ }
+ }, "Load all the tests.");
+ </script>
+
+ <script nonce='dummy'>
+ var externalRan = false;
+ </script>
+ <script src='./externalScript.js'
+ integrity="sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0="></script>
+ <script nonce='dummy'>
+ test(function() {
+ assert_true(externalRan, 'External script ran.');
+ }, 'External script in a script tag with matching SRI hash should run.');
+ </script>
+
+</body>
+
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html.sub.headers
new file mode 100644
index 00000000000..6f206606387
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html.sub.headers
@@ -0,0 +1,5 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Content-Security-Policy: default-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=='; style-src 'unsafe-inline'
diff --git a/tests/wpt/web-platform-tests/content-security-policy/default-src/externalScript.js b/tests/wpt/web-platform-tests/content-security-policy/default-src/externalScript.js
new file mode 100644
index 00000000000..2920b03c9bc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/default-src/externalScript.js
@@ -0,0 +1 @@
+externalRan = true; \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/content-security-policy/default-src/simpleSourcedScript.js b/tests/wpt/web-platform-tests/content-security-policy/default-src/simpleSourcedScript.js
new file mode 100644
index 00000000000..deca86508ff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/default-src/simpleSourcedScript.js
@@ -0,0 +1 @@
+window.postMessage(document.currentScript.id, "*");
diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html
index ebba1e0096c..54e04d4f7af 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id="log"/>
+ <div id="log"></div>
<script>
async_test(function(t) {
document.addEventListener("securitypolicyviolation", t.unreached_func("Loading allowed fonts should not trigger a violation."));
diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html
index b164cf0f172..fb491cb58d2 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id="log"/>
+ <div id="log"></div>
<script>
async_test(function(t) {
var link = document.createElement('link');
diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html
index eae1b4986d9..b8dbb7530aa 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id="log"/>
+ <div id="log"></div>
<script>
async_test(function(t) {
var link = document.createElement('link');
diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html
index b8d46e5c987..aeca1285e4f 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id="log"/>
+ <div id="log"></div>
<script>
async_test(function(t) {
document.addEventListener("securitypolicyviolation", t.unreached_func("Loading allowed fonts should not trigger a violation."));
diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html
index 3b47d0b2e22..4b34bc5746d 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id="log"/>
+ <div id="log"></div>
<script>
async_test(function(t) {
var link = document.createElement('link');
diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html
index 9e4e345a167..a0ddceb64c6 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id='log'/>
+ <div id='log'></div>
<script>
async_test(function(t) {
diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html
index 23c33d56553..e7f3472072e 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id='log'/>
+ <div id='log'></div>
<script>
var t1 = async_test("img src does not match full host and wildcard csp directive");
diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html
index d2d36d1341c..f80ff2d4dd9 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id='log'/>
+ <div id='log'></div>
<script>
var t1 = async_test("img src matches correctly partial wildcard host csp directive");
diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html
index 9bc0326ef8a..5a05970f600 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id='log'/>
+ <div id='log'></div>
<script>
var t1 = async_test("img-src with 'none' source should not match");
diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html
index 215c10089bb..993be396ae1 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id='log'/>
+ <div id='log'></div>
<script>
var t1 = async_test("img-src with wildcard port should match any port");
diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html
index 72326ee6fc6..050a4d14100 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html
@@ -7,7 +7,7 @@
<script src='/resources/testharnessreport.js'></script>
</head>
<body>
- <div id='log'/>
+ <div id='log'></div>
<script>
var t1 = async_test("img-src with wildcard should match all");
diff --git a/tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html b/tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html
index 21c4fb33ce2..39f4747d191 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html
@@ -3,7 +3,7 @@
<script src="/resources/testharnessreport.js"></script>
<script>
- var window_url = encodeURIComponent("javascript:'<iframe src=/content-security-policy/support/fail.js />'");
+ var window_url = encodeURIComponent("javascript:'<iframe src=/content-security-policy/support/fail.js></iframe>'");
var report_cookie_name = encodeURIComponent("javascript-url-navigation-inherits-csp");
window.open("support/test_csp_self_window.sub.html?window_url=" + window_url + "&report_cookie_name=" + report_cookie_name);
setTimeout(function() {
diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html
index 1be496194b6..2040a34a8f7 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html
@@ -18,6 +18,6 @@
}
}
</script>
- <iframe src="support/generate-csp-report.html"/>
+ <iframe src="support/generate-csp-report.html"></iframe>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html
index b59206824dc..9216e2b0d49 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html
@@ -6,7 +6,8 @@
<script src='/resources/testharness.js' nonce='dummy'></script>
<script src='/resources/testharnessreport.js' nonce='dummy'></script>
- <!-- CSP served: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=' -->
+ <!-- CSP served: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA==' -->
+ <!-- ShA256 is intentionally mixed case -->
</head>
<body>
@@ -25,9 +26,13 @@
'./simpleSourcedScript.js',
'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=',
true ],
+ [ 'matching integrity (case-insensitive algorithm)',
+ './simpleSourcedScript.js',
+ 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=',
+ true ],
[ 'multiple matching integrity',
'./simpleSourcedScript.js',
- 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=',
+ 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA==',
true ],
[ 'no integrity',
'./simpleSourcedScript.js',
diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers
index 25cd6541aca..971525ff762 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers
+++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers
@@ -2,4 +2,4 @@ Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0, false
Pragma: no-cache
-Content-Security-Policy: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA='
+Content-Security-Policy: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=='
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-context.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-context.https.html
new file mode 100644
index 00000000000..76758662721
--- /dev/null
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-context.https.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API context tests.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<body>
+
+<script type="module">
+import {request_options_with_mediation_required,
+ request_options_with_context,
+ fedcm_get_title_promise,
+ fedcm_test} from './support/fedcm-helper.sub.js';
+
+fedcm_test(async t => {
+ navigator.credentials.get(request_options_with_mediation_required());
+ const title = await fedcm_get_title_promise();
+ assert_true(title.toLowerCase().includes('sign in'));
+}, "FedCM call defaults to 'signin' context.");
+
+fedcm_test(async t => {
+ navigator.credentials.get(request_options_with_context("manifest.py", "signup"));
+ const title = await fedcm_get_title_promise(t);
+ assert_true(title.toLowerCase().includes('sign up'));
+}, "FedCM with 'signup' context.");
+
+fedcm_test(async t => {
+ navigator.credentials.get(request_options_with_context("manifest.py", "use"));
+ const title = await fedcm_get_title_promise();
+ assert_true(title.toLowerCase().includes('use'));
+}, "FedCM with 'use' context.");
+
+fedcm_test(async t => {
+ navigator.credentials.get(request_options_with_context("manifest.py", "continue"));
+ const title = await fedcm_get_title_promise();
+ assert_true(title.toLowerCase().includes('continue'));
+}, "FedCM with 'continue' context.");
+</script>
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html
index eb9f7da7b26..ed7c1300bd1 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html
@@ -8,20 +8,20 @@
import {
set_fedcm_cookie,
set_alt_fedcm_cookie,
- default_request_options,
- default_alt_request_options
+ request_options_with_mediation_required,
+ alt_request_options_with_mediation_required
} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
promise_test(async t => {
let first_controller = new AbortController();
- let first_test_options = default_request_options();
+ let first_test_options = request_options_with_mediation_required();
first_test_options.signal = first_controller.signal;
const first_cred = navigator.credentials.get(first_test_options);
let second_controller = new AbortController();
- let second_test_options = default_alt_request_options();
+ let second_test_options = alt_request_options_with_mediation_required();
second_test_options.signal = second_controller.signal;
const second_cred = navigator.credentials.get(second_test_options);
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html
index 7e7ec2ce3d1..dfe8969932b 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html
@@ -8,20 +8,20 @@
import {
set_fedcm_cookie,
set_alt_fedcm_cookie,
- default_request_options,
- default_alt_request_options
+ request_options_with_mediation_required,
+ alt_request_options_with_mediation_required
} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
promise_test(async t => {
let first_controller = new AbortController();
- let first_test_options = default_request_options();
+ let first_test_options = request_options_with_mediation_required();
first_test_options.signal = first_controller.signal;
const first_cred = navigator.credentials.get(first_test_options);
let second_controller = new AbortController();
- let second_test_options = default_alt_request_options();
+ let second_test_options = alt_request_options_with_mediation_required();
second_test_options.signal = second_controller.signal;
const second_cred = navigator.credentials.get(second_test_options);
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html
index fa9ec7b52fc..dc332870abc 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html
@@ -7,7 +7,7 @@
<body>
<script type="module">
-import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
let has_window_loaded = false;
@@ -22,12 +22,12 @@ promise_test(async t => {
let first_cred_resolved = false;
assert_false(has_window_loaded);
// First navigator.credentials.get() is called prior to window.onload
- const first_cred = navigator.credentials.get(default_request_options()).finally(() => { first_cred_resolved = true; });
+ const first_cred = navigator.credentials.get(request_options_with_mediation_required()).finally(() => { first_cred_resolved = true; });
await Promise.all([cookies_promise, window_loaded]);
assert_true(has_window_loaded);
assert_false(first_cred_resolved);
// Second navigator.credentials.get() is called after window.onload but before first navigator.credentials.get() resolves
- const second_cred = navigator.credentials.get(default_alt_request_options());
+ const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required());
const rejection = promise_rejects_dom(t, 'NotAllowedError', second_cred);
const first = await first_cred;
assert_equals(first.token, "token");
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html
index 93ee2075fe5..6a61891a302 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html
@@ -7,7 +7,7 @@
<body>
<script type="module">
-import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
@@ -15,14 +15,14 @@ promise_test(async t => {
let has_window_loaded = false;
const window_loaded = new Promise(resolve => {
window.addEventListener('load', async () => {
- const second_cred = navigator.credentials.get(default_alt_request_options());
+ const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required());
await promise_rejects_dom(t, 'NetworkError', second_cred);
has_window_loaded = true;
resolve();
});
});
assert_false(has_window_loaded);
- const first_cred = navigator.credentials.get(default_request_options());
+ const first_cred = navigator.credentials.get(request_options_with_mediation_required());
await Promise.all([cookies_promise, window_loaded]);
assert_true(has_window_loaded);
const first = await first_cred;
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html
index edc293daff8..65aeb72dcf1 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html
@@ -7,7 +7,7 @@
<body>
<script type="module">
-import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
@@ -15,14 +15,14 @@ promise_test(async t => {
let has_dom_content_loaded = false;
const dom_content_loaded = new Promise(resolve => {
document.addEventListener('DOMContentLoaded', async () => {
- const second_cred = navigator.credentials.get(default_alt_request_options());
+ const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required());
await promise_rejects_dom(t, 'NetworkError', second_cred);
has_dom_content_loaded = true;
resolve();
});
});
assert_false(has_dom_content_loaded);
- const first_cred = navigator.credentials.get(default_request_options());
+ const first_cred = navigator.credentials.get(request_options_with_mediation_required());
await Promise.all([cookies_promise, dom_content_loaded]);
assert_true(has_dom_content_loaded);
const first = await first_cred;
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html
index b7b03e4a147..12f88d3068e 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html
@@ -8,20 +8,20 @@
import {
set_fedcm_cookie,
set_alt_fedcm_cookie,
- default_request_options,
- default_alt_request_options
+ request_options_with_mediation_required,
+ alt_request_options_with_mediation_required
} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
promise_test(async t => {
let first_controller = new AbortController();
- let first_test_options = default_request_options();
+ let first_test_options = request_options_with_mediation_required();
first_test_options.signal = first_controller.signal;
const first_cred = navigator.credentials.get(first_test_options);
let second_controller = new AbortController();
- let second_test_options = default_alt_request_options();
+ let second_test_options = alt_request_options_with_mediation_required();
second_test_options.signal = second_controller.signal;
const second_cred = navigator.credentials.get(second_test_options);
@@ -32,8 +32,8 @@
promise_rejects_dom(t, 'AbortError', second_cred)
]);
- const third_cred = navigator.credentials.get(default_request_options());
- const fourth_cred = navigator.credentials.get(default_alt_request_options());
+ const third_cred = navigator.credentials.get(request_options_with_mediation_required());
+ const fourth_cred = navigator.credentials.get(alt_request_options_with_mediation_required());
// NetworkError is returned when another IDP is selected.
await promise_rejects_dom(t, 'NetworkError', fourth_cred);
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html
index 1a806a2049d..bf8d717381b 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html
@@ -7,7 +7,7 @@
<body>
<script type="module">
-import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
const window_loaded = new Promise(resolve => {
@@ -18,8 +18,8 @@ const window_loaded = new Promise(resolve => {
promise_test(async t => {
await Promise.all([cookies_promise, window_loaded]);
- const first_cred = navigator.credentials.get(default_request_options());
- const second_cred = navigator.credentials.get(default_alt_request_options());
+ const first_cred = navigator.credentials.get(request_options_with_mediation_required());
+ const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required());
// NetworkError is returned when another IDP is selected.
await promise_rejects_dom(t, 'NetworkError', second_cred);
const first = await first_cred;
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html
index 69a70ce47de..e754b86ec65 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html
@@ -7,7 +7,7 @@
<body>
<script type="module">
-import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
let has_window_loaded = false;
@@ -18,8 +18,8 @@ window.addEventListener('load', () => {
// TODO(crbug.com/1374869): Add multi IDP test where second IDP is selected.
promise_test(async t => {
assert_false(has_window_loaded);
- const first_cred = navigator.credentials.get(default_alt_request_options());
- const second_cred = navigator.credentials.get(default_request_options());
+ const first_cred = navigator.credentials.get(alt_request_options_with_mediation_required());
+ const second_cred = navigator.credentials.get(request_options_with_mediation_required());
await cookies_promise;
await promise_rejects_dom(t, 'NetworkError', second_cred);
const first = await first_cred;
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html
index e98b63ff339..252732c9643 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html
@@ -7,15 +7,15 @@
<body>
<script type="module">
-import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js';
let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
promise_test(async t => {
const window_loaded = new Promise(resolve => {
window.addEventListener('load', async () => {
- const first_cred = navigator.credentials.get(default_request_options());
- const second_cred = navigator.credentials.get(default_alt_request_options());
+ const first_cred = navigator.credentials.get(request_options_with_mediation_required());
+ const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required());
await cookies_promise;
await promise_rejects_dom(t, 'NetworkError', second_cred);
const first = await first_cred;
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html
index a34ff84aabd..a023e3c57fd 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html
@@ -7,7 +7,7 @@
<body>
<script type="module">
-import {set_fedcm_cookie, default_request_options} from '../support/fedcm-helper.sub.js';
+import {set_fedcm_cookie, request_options_with_mediation_required} from '../support/fedcm-helper.sub.js';
const window_loaded = new Promise(resolve => {
window.addEventListener('load', () => {
@@ -18,7 +18,7 @@ const window_loaded = new Promise(resolve => {
promise_test(async t => {
await set_fedcm_cookie();
await window_loaded;
- const cred = await navigator.credentials.get(default_request_options());
+ const cred = await navigator.credentials.get(request_options_with_mediation_required());
assert_equals(cred.token, "token");
}, "Single `get` call after onload is allowed.");
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html
index 91195fc5a75..be94d17d8f2 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html
@@ -7,7 +7,7 @@
<body>
<script type="module">
-import {set_fedcm_cookie, default_request_options} from '../support/fedcm-helper.sub.js';
+import {set_fedcm_cookie, request_options_with_mediation_required} from '../support/fedcm-helper.sub.js';
let has_window_loaded = false;
const window_loaded = new Promise(resolve => {
@@ -18,7 +18,7 @@ const window_loaded = new Promise(resolve => {
});
promise_test(async t => {
- const first_cred = navigator.credentials.get(default_request_options());
+ const first_cred = navigator.credentials.get(request_options_with_mediation_required());
assert_false(has_window_loaded);
await set_fedcm_cookie();
await window_loaded;
diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html
index 17939d2d935..8383c3b9ff8 100644
--- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html
@@ -7,12 +7,12 @@
<body>
<script type="module">
-import {default_request_options, set_fedcm_cookie} from '../support/fedcm-helper.sub.js';
+import {request_options_with_mediation_required, set_fedcm_cookie} from '../support/fedcm-helper.sub.js';
promise_test(async t => {
const window_loaded = new Promise(resolve => {
window.addEventListener('load', async () => {
- const first_cred = navigator.credentials.get(default_request_options());
+ const first_cred = navigator.credentials.get(request_options_with_mediation_required());
await set_fedcm_cookie();
const first = await first_cred;
assert_equals(first.token, "token");
diff --git a/tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js b/tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js
index 270ac1d743a..79136b5958f 100644
--- a/tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js
+++ b/tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js
@@ -78,6 +78,26 @@ export function request_options_with_mediation_optional(manifest_filename) {
return options;
}
+export function request_options_with_context(manifest_filename, context) {
+ if (manifest_filename === undefined) {
+ manifest_filename = "manifest.py";
+ }
+ const manifest_path = `https://{{host}}:{{ports[https][0]}}/\
+credential-management/support/fedcm/${manifest_filename}`;
+ return {
+ identity: {
+ providers: [{
+ configURL: manifest_path,
+ clientId: '1',
+ nonce: '2'
+ }],
+ context: context
+ },
+ mediation: 'required'
+ };
+}
+
+
// Test wrapper which does FedCM-specific setup.
export function fedcm_test(test_func, test_name) {
promise_test(async t => {
@@ -117,3 +137,15 @@ export function request_options_with_login_hint(manifest_filename, login_hint) {
return options;
}
+
+export function fedcm_get_title_promise(t) {
+ async function helper(resolve) {
+ try {
+ const title = await window.test_driver.get_fedcm_dialog_title();
+ resolve(title);
+ } catch (ex) {
+ t.step_timeout(100, helper);
+ }
+ }
+ return new Promise(helper);
+} \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html
index dee9ed8a1b8..bbb484073a3 100644
--- a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html
+++ b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html
@@ -30,7 +30,7 @@ oElement.insertAdjacentElement('beforeend',function(){
}();
oRange.insertNode(oInsertedElement)
}
-document.addEventListener("load", event_handler_EC9_load, true);
+document.addEventListener("load", event_handler_EC9_load, { capture: true, once: true });
function event_handler_ECA_DOMCharacterDataModified() {
var oElement = event.srcElement;
var oParent =function(){
diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-002.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-002.html
new file mode 100644
index 00000000000..1c86fe2e467
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-002.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<title>Tests automatic anchor fallbacks created from the base style</title>
+<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#fallback-automatic">
+<link rel="auto" href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/test-common.js"></script>
+
+<style>
+body {
+ margin: 0;
+}
+
+.cb {
+ position: absolute;
+ width: 500px;
+ height: 500px;
+}
+
+.anchor {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: orange;
+}
+
+.target {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: lime;
+}
+
+.flip-x {
+ top: anchor(top);
+ left: anchor(auto);
+}
+
+.flip-x-same {
+ width: 200px;
+ top: anchor(top);
+ left: anchor(auto-same);
+}
+
+.flip-y {
+ top: anchor(auto);
+ left: anchor(left);
+}
+
+.flip-y-same {
+ height: 200px;
+ left: anchor(left);
+ top: anchor(auto-same);
+}
+
+.flip-both {
+ top: anchor(auto);
+ left: anchor(auto);
+}
+
+#anchor1 {
+ top: 50px;
+ left:200px;
+ anchor-name: --a1;
+}
+
+#anchor2 {
+ bottom: 50px;
+ left: 200px;
+ anchor-name: --a2;
+}
+
+#anchor3 {
+ left: 50px;
+ top: 200px;
+ anchor-name: --a3;
+}
+
+#anchor4 {
+ right: 50px;
+ top: 200px;
+ anchor-name: --a4
+}
+
+#anchor5 {
+ top: 50px;
+ left: 50px;
+ anchor-name: --a5;
+}
+
+#anchor6 {
+ top: 50px;
+ right: 50px;
+ anchor-name: --a6;
+}
+
+#anchor7 {
+ bottom: 50px;
+ left: 50px;
+ anchor-name: --a7;
+}
+
+#anchor8 {
+ bottom: 50px;
+ right: 50px;
+ anchor-name: --a8;
+}
+
+#anchor9 {
+ top: 200px;
+ right: 50px;
+ anchor-name: --a9;
+}
+
+#anchor10 {
+ top: 200px;
+ left: 50px;
+ anchor-name: --a10;
+}
+
+#anchor11 {
+ left: 200px;
+ top: 50px;
+ anchor-name: --a11;
+}
+
+#anchor12 {
+ left: 200px;
+ bottom: 50px;
+ anchor-name: --a12;
+}
+
+#target1 { anchor-default: --a1; }
+#target2 { anchor-default: --a2; }
+#target3 { anchor-default: --a3; }
+#target4 { anchor-default: --a4; }
+#target5 { anchor-default: --a5; }
+#target6 { anchor-default: --a6; }
+#target7 { anchor-default: --a7; }
+#target8 { anchor-default: --a8; }
+#target9 { anchor-default: --a9; }
+#target10 { anchor-default: --a10; }
+#target11 { anchor-default: --a11; }
+#target12 { anchor-default: --a12; }
+
+</style>
+
+<body onload="checkLayoutForAnchorPos('.target')">
+ <!-- Test cases creating flipped fallbacks in one axis -->
+ <div class="cb">
+ <div class="anchor" id="anchor1"></div>
+ <div class="anchor" id="anchor2"></div>
+ <div class="anchor" id="anchor3"></div>
+ <div class="anchor" id="anchor4"></div>
+
+ <div class="target flip-y" id="target1"
+ data-offset-x="200" data-offset-y="150"></div>
+ <div class="target flip-y" id="target2"
+ data-offset-x="200" data-offset-y="250"></div>
+ <div class="target flip-x" id="target3"
+ data-offset-x="150" data-offset-y="200"></div>
+ <div class="target flip-x" id="target4"
+ data-offset-x="250" data-offset-y="200"></div>
+ </div>
+
+ <!-- Test cases creating flipped fallbacks in both axes -->
+ <div class="cb" style="top: 500px">
+ <div class="anchor" id="anchor5"></div>
+ <div class="anchor" id="anchor6"></div>
+ <div class="anchor" id="anchor7"></div>
+ <div class="anchor" id="anchor8"></div>
+
+ <div class="target flip-both" id="target5"
+ data-offset-x="150" data-offset-y="150"></div>
+ <div class="target flip-both" id="target6"
+ data-offset-x="250" data-offset-y="150"></div>
+ <div class="target flip-both" id="target7"
+ data-offset-x="150" data-offset-y="250"></div>
+ <div class="target flip-both" id="target8"
+ data-offset-x="250" data-offset-y="250"></div>
+ </div>
+
+ <!-- Test cases for `auto-same` flipping -->
+ <div class="cb" style="top: 1000px">
+ <div class="anchor" id="anchor9"></div>
+ <div class="anchor" id="anchor10"></div>
+ <div class="anchor" id="anchor11"></div>
+ <div class="anchor" id="anchor12"></div>
+
+ <div class="target flip-x-same" id="target9"
+ data-offset-x="250" data-offset-y="200"></div>
+ <div class="target flip-x-same" id="target10"
+ data-offset-x="50" data-offset-y="200"></div>
+ <div class="target flip-y-same" id="target11"
+ data-offset-x="200" data-offset-y="50"></div>
+ <div class="target flip-y-same" id="target12"
+ data-offset-x="200" data-offset-y="250"></div>
+ </div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-003.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-003.html
new file mode 100644
index 00000000000..33ef58b2af4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-003.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<title>Tests automatic anchor fallbacks created from an @try rule</title>
+<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#fallback-automatic">
+<link rel="auto" href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/test-common.js"></script>
+
+<style>
+body {
+ margin: 0;
+}
+
+.cb {
+ position: absolute;
+ width: 500px;
+ height: 500px;
+}
+
+.anchor {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: orange;
+}
+
+.target {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: lime;
+ position-fallback: --pf;
+}
+
+@position-fallback --pf {
+ @try {
+ top: anchor(auto);
+ left: anchor(auto);
+ }
+}
+
+#anchor1 {
+ top: 50px;
+ left: 50px;
+ anchor-name: --a1;
+}
+
+#anchor2 {
+ top: 50px;
+ right: 50px;
+ anchor-name: --a2;
+}
+
+#anchor3 {
+ bottom: 50px;
+ left: 50px;
+ anchor-name: --a3;
+}
+
+#anchor4 {
+ bottom: 50px;
+ right: 50px;
+ anchor-name: --a4;
+}
+
+#target1 { anchor-default: --a1; }
+#target2 { anchor-default: --a2; }
+#target3 { anchor-default: --a3; }
+#target4 { anchor-default: --a4; }
+
+#anchor5 {
+ top: 200px;
+ right: 50px;
+ anchor-name: --a5;
+}
+
+#anchor6 {
+ bottom: 50px;
+ left: 200px;
+ anchor-name: --a6;
+}
+
+#target5 {
+ top: anchor(top);
+ left: anchor(auto);
+ anchor-default: --a5;
+ position-fallback: --pf-empty;
+}
+
+#target6 {
+ top: anchor(auto);
+ left: anchor(left);
+ anchor-default: --a6;
+ position-fallback: --pf-empty;
+}
+
+#anchor7 {
+ bottom: 50px;
+ right: 50px;
+ anchor-name: --a7;
+}
+
+#target7 {
+ top: anchor(auto);
+ anchor-default: --a7;
+ position-fallback: --pf-flip-x;
+}
+
+#target8 {
+ left: anchor(auto);
+ anchor-default: --a7;
+ position-fallback: --pf-flip-y;
+}
+
+@position-fallback --pf-empty {
+ @try {}
+}
+
+@position-fallback --pf-flip-x {
+ @try { left: anchor(auto); }
+}
+
+@position-fallback --pf-flip-y {
+ @try { top: anchor(auto); }
+}
+</style>
+
+<body onload="checkLayoutForAnchorPos('.target')">
+ <!-- Test cases creating auto fallbacks from an @try rule -->
+ <div class="cb">
+ <div class="anchor" id="anchor1"></div>
+ <div class="anchor" id="anchor2"></div>
+ <div class="anchor" id="anchor3"></div>
+ <div class="anchor" id="anchor4"></div>
+
+ <div class="target" id="target1"
+ data-offset-x="150" data-offset-y="150"></div>
+ <div class="target" id="target2"
+ data-offset-x="250" data-offset-y="150"></div>
+ <div class="target" id="target3"
+ data-offset-x="150" data-offset-y="250"></div>
+ <div class="target" id="target4"
+ data-offset-x="250" data-offset-y="250"></div>
+ </div>
+
+ <div class="cb" style="top: 500px">
+ <div class="anchor" id="anchor5"></div>
+ <div class="anchor" id="anchor6"></div>
+ <div class="anchor" id="anchor7"></div>
+
+ <!-- Test cases where `anchor(auto)` is in base style, so no auto fallbacks
+ are created from @try rules, and targets end up overflowing the
+ containing block. -->
+ <div class="target" id="target5"
+ data-offset-x="450" data-offset-y="200"></div>
+ <div class="target" id="target6"
+ data-offset-x="200" data-offset-y="450"></div>
+
+ <!-- Test cases where `anchor(auto)` is used in both axes, but the `@try`
+ rule affects only one axis, so we only flip in one axis, and the
+ targets end up overflowing the containing block. -->
+ <div class="target" id="target7"
+ data-offset-x="250" data-offset-y="450"></div>
+ <div class="target" id="target8"
+ data-offset-x="450" data-offset-y="250"></div>
+ </div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html b/tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html
index d67a22443bb..a5c9c6763f5 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html
@@ -18,7 +18,7 @@
<div id="dirty" class="none">PASS</div>
<script>
const root = host.attachShadow({mode:"open"});
- root.innerHTML = "<slot />";
+ root.innerHTML = "<slot></slot>";
requestAnimationFrame(() => {
root.firstChild.name = "skip-slot";
dirty.className = "";
diff --git a/tests/wpt/web-platform-tests/css/css-animations/inheritance.html b/tests/wpt/web-platform-tests/css/css-animations/inheritance.html
index dd9d6469336..6e7697b9d81 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/inheritance.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/inheritance.html
@@ -17,7 +17,7 @@
<script>
assert_not_inherited('animation-delay', '0s', '2s');
assert_not_inherited('animation-direction', 'normal', 'reverse');
-assert_not_inherited('animation-duration', 'auto', '3s');
+assert_not_inherited('animation-duration', '0s', '3s');
assert_not_inherited('animation-fill-mode', 'none', 'forwards');
assert_not_inherited('animation-iteration-count', '1', '4');
assert_not_inherited('animation-name', 'none', 'spinner');
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html
index 9152c49ee0c..f8d34b889ba 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html
@@ -18,24 +18,24 @@
// [ none | <keyframes-name> ]
test(() => {
- assert_equals(getComputedStyle(document.getElementById('target')).animation, "auto ease 0s 1 normal none running none");
+ assert_equals(getComputedStyle(document.getElementById('target')).animation, "0s ease 0s 1 normal none running none");
}, "Default animation value");
test_computed_value("animation", "1s", "1s ease 0s 1 normal none running none");
-test_computed_value("animation", "cubic-bezier(0, -2, 1, 3)", "auto cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none");
+test_computed_value("animation", "cubic-bezier(0, -2, 1, 3)", "0s cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none");
test_computed_value("animation", "1s -3s", "1s ease -3s 1 normal none running none");
-test_computed_value("animation", "4", "auto ease 0s 4 normal none running none");
-test_computed_value("animation", "reverse", "auto ease 0s 1 reverse none running none");
-test_computed_value("animation", "both", "auto ease 0s 1 normal both running none");
-test_computed_value("animation", "paused", "auto ease 0s 1 normal none paused none");
-test_computed_value("animation", "none", "auto ease 0s 1 normal none running none");
-test_computed_value("animation", "anim", "auto ease 0s 1 normal none running anim");
+test_computed_value("animation", "4", "0s ease 0s 4 normal none running none");
+test_computed_value("animation", "reverse", "0s ease 0s 1 reverse none running none");
+test_computed_value("animation", "both", "0s ease 0s 1 normal both running none");
+test_computed_value("animation", "paused", "0s ease 0s 1 normal none paused none");
+test_computed_value("animation", "none", "0s ease 0s 1 normal none running none");
+test_computed_value("animation", "anim", "0s ease 0s 1 normal none running anim");
test_computed_value("animation", "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)",
"1s cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim");
test_computed_value("animation", "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)",
- "auto ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none");
+ "0s ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none");
// TODO: Add test with a single timing-function keyword.
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html
index ef2ef69059f..a8bc1600f80 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html
@@ -15,6 +15,34 @@
test_computed_value("animation-duration", "500ms", "0.5s");
test_computed_value("animation-duration", "calc(2 * 3s)", "6s");
test_computed_value("animation-duration", "20s, 10s");
+
+// https://github.com/w3c/csswg-drafts/issues/6530
+test_computed_value("animation-duration", "auto", "0s");
+test_computed_value("animation-duration", "auto, auto", "0s, 0s");
+
+// Test that the resolved value of the specified animation-duration
+// is as expected given some value for animation-timeline.
+function test_auto_duration(duration, timeline, expected) {
+ test((t) => {
+ t.add_cleanup(() => {
+ target.style = "";
+ });
+ target.style.animationDuration = duration;
+ target.style.animationTimeline = timeline;
+ assert_equals(expected, getComputedStyle(target).animationDuration);
+ }, `Resolved value of animation-duration:${duration} with animation-timeline:${timeline}`);
+}
+
+test_auto_duration("auto", "auto", "0s");
+test_auto_duration("auto", "auto, auto", "auto");
+test_auto_duration("auto", "--t", "auto");
+test_auto_duration("auto", "--t, --t2", "auto");
+test_auto_duration("auto", "none", "auto");
+test_auto_duration("auto", "scroll()", "auto");
+test_auto_duration("auto", "view()", "auto");
+test_auto_duration("0s", "auto", "0s");
+test_auto_duration("0s", "auto, auto", "0s");
+
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html
index 8b482ff900f..0856ab24a04 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html
@@ -34,9 +34,9 @@ test_shorthand_value('animation', 'anim paused both reverse, 4 1s -3s cubic-bezi
'animation-fill-mode': 'both, none',
'animation-play-state': 'paused, running',
'animation-name': 'anim, none',
- 'animation-timeline': 'auto, auto',
- 'animation-range-start': 'normal, normal',
- 'animation-range-end': 'normal, normal',
+ 'animation-timeline': 'auto',
+ 'animation-range-start': 'normal',
+ 'animation-range-end': 'normal',
});
test_shorthand_value('animation', '4 1s -3s cubic-bezier(0, -2, 1, 3), anim paused both reverse', {
@@ -48,9 +48,9 @@ test_shorthand_value('animation', '4 1s -3s cubic-bezier(0, -2, 1, 3), anim paus
'animation-fill-mode': 'none, both',
'animation-play-state': 'running, paused',
'animation-name': 'none, anim',
- 'animation-timeline': 'auto, auto',
- 'animation-range-start': 'normal, normal',
- 'animation-range-end': 'normal, normal',
+ 'animation-timeline': 'auto',
+ 'animation-range-start': 'normal',
+ 'animation-range-end': 'normal',
});
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html
index 7a0248d3dff..5dc2b477d32 100644
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html
@@ -24,7 +24,7 @@
background-color:red;
}
</style>
- <head/>
+ </head>
<body>
<p>
"Test passes if the background color is limited to the content only and border is blue dotted without red."
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-002.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-002.html
new file mode 100644
index 00000000000..ac76eb2a5ef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-002.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Backgrounds and Borders Test: border-image-slice (basic)</title>
+
+ <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net">
+ <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice">
+ <link rel="match" href="reference/ref-filled-green-100px-square.xht">
+
+ <meta name="flags" content="">
+
+ <!--
+
+ This is a follow-up to
+ Pull Request 8788: Update css-backgrounds/border-image tests
+ https://github.com/web-platform-tests/wpt/pull/8788
+
+ Credit should go to Chris Nardi for trying to fix
+ 16 border-image tests with 2 relevant commits
+
+ -->
+
+ <style>
+ div#red-overlapped-ref
+ {
+ background-color: red;
+ height: 100px;
+ width: 100px;
+ }
+
+ div#green-overlapping-test
+ {
+ border: red solid 40px;
+
+ border-image-slice: 1;
+ border-image-source: url("support/1pxgreen-98pxred.png");
+ }
+
+ div#green-filled-center
+ {
+ background-color: green;
+ height: 20px;
+ }
+ </style>
+
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.
+
+ <div id="red-overlapped-ref">
+ <div id="green-overlapping-test">
+ <div id="green-filled-center"></div>
+ </div>
+ </div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-003.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-003.html
new file mode 100644
index 00000000000..6d4ee0fde93
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-003.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Backgrounds and Borders Test: border-image-slice with fill keyword (basic)</title>
+
+ <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net">
+ <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice">
+ <link rel="match" href="reference/ref-filled-green-100px-square.xht">
+
+ <meta name="flags" content="">
+
+ <!--
+
+ This is a follow-up to
+ Pull Request 8788: Update css-backgrounds/border-image tests
+ https://github.com/web-platform-tests/wpt/pull/8788
+
+ Credit should go to Chris Nardi for trying to fix
+ 16 border-image tests with 2 relevant commits
+
+ -->
+
+ <style>
+ div#red-overlapped-ref
+ {
+ background-color: red;
+ height: 100px;
+ width: 100px;
+ }
+
+ div#green-overlapping-test
+ {
+ border: red solid 40px;
+ height: 20px;
+
+ border-image-slice: 5 fill;
+ border-image-source: url("support/12x12-green.png");
+ }
+ </style>
+
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.
+
+ <div id="red-overlapped-ref">
+ <div id="green-overlapping-test"></div>
+ </div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-004.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-004.html
new file mode 100644
index 00000000000..844d98bb3cd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-004.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Backgrounds and Borders Test: border-image-slice with a percentage unit value (basic)</title>
+
+ <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net">
+ <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice">
+ <link rel="match" href="reference/ref-filled-green-100px-square.xht">
+
+ <meta name="flags" content="">
+
+ <!--
+
+ This is a follow-up to
+ Pull Request 8788: Update css-backgrounds/border-image tests
+ https://github.com/web-platform-tests/wpt/pull/8788
+
+ Credit should go to Chris Nardi for trying to fix
+ 16 border-image tests with 2 relevant commits
+
+ -->
+
+ <style>
+ div#red-overlapped-ref
+ {
+ background-color: red;
+ height: 100px;
+ width: 100px;
+ }
+
+ div#green-overlapping-test
+ {
+ border: red solid 40px;
+
+ border-image-slice: 1%;
+ border-image-source: url("support/1pxgreen-98pxred.png");
+ }
+
+ div#green-filled-center
+ {
+ background-color: green;
+ height: 20px;
+ }
+ </style>
+
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.
+
+ <div id="red-overlapped-ref">
+ <div id="green-overlapping-test">
+ <div id="green-filled-center"></div>
+ </div>
+ </div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-006.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-006.html
new file mode 100644
index 00000000000..e3782f2ecd1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-006.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Backgrounds and Borders Test: border-image-slice (basic)</title>
+
+ <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net">
+ <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice">
+ <link rel="match" href="reference/border-image-006-ref.html">
+
+ <meta name="flags" content="">
+
+ <!--
+
+ This is a follow-up to
+ Pull Request 8788: Update css-backgrounds/border-image tests
+ https://github.com/web-platform-tests/wpt/pull/8788
+
+ Credit should go to Chris Nardi for trying to fix
+ 16 border-image tests with 2 relevant commits
+
+ -->
+
+ <style>
+ div#outer-test
+ {
+ border: red solid 25px;
+ width: 50px;
+
+ border-image-source: url("support/1x1-green.png");
+ }
+
+ div#inner-blue
+ {
+ border: blue solid 1px;
+ height: 48px;
+ }
+ </style>
+
+ <p>Test passes if there is an hollow blue square with smaller filled green squares at its corners and <strong>no red</strong>.
+
+ <div id="outer-test">
+ <div id="inner-blue"></div>
+ </div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-007.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-007.html
new file mode 100644
index 00000000000..41ac9dac37f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-007.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Backgrounds and Borders Test: border-image-width with various values (basic)</title>
+
+ <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net">
+ <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-width">
+ <link rel="match" href="reference/border-image-007-ref.html">
+
+ <meta name="flags" content="">
+
+ <!--
+
+ This is a follow-up to
+ Pull Request 8788: Update css-backgrounds/border-image tests
+ https://github.com/web-platform-tests/wpt/pull/8788
+
+ Credit should go to Chris Nardi for trying to fix
+ 16 border-image tests with 2 relevant commits
+
+ -->
+
+ <style>
+ div.outer-parent
+ {
+ border: red solid 40px;
+ border-image-slice: 24;
+ border-image-source: url("support/50x50-green.png");
+ height: 12px;
+ margin-bottom: 16px;
+ padding: 2px 4px 6px 8px;
+ width: 8px;
+ }
+
+ div.inner-child
+ {
+ background-color: blue;
+ height: 100%;
+ width: 100%;
+ }
+
+ div#first-subtest
+ {
+ border-image-width: 1px;
+ }
+
+ div#second-subtest
+ {
+ border-image-width: 1px 5px;
+ }
+
+ div#third-subtest
+ {
+ border-image-width: 1px 5px 10px;
+ }
+
+ div#fourth-subtest
+ {
+ border-image-width: 1px 5px 10px 15px;
+ }
+ </style>
+
+ <div class="outer-parent" id="first-subtest"><div class="inner-child"></div></div>
+
+ <div class="outer-parent" id="second-subtest"><div class="inner-child"></div></div>
+
+ <div class="outer-parent" id="third-subtest"><div class="inner-child"></div></div>
+
+ <div class="outer-parent" id="fourth-subtest"><div class="inner-child"></div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-011.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-011.html
new file mode 100644
index 00000000000..357845bbf71
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-011.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Backgrounds and Borders Test: border-image-outset (basic)</title>
+
+ <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net">
+ <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-outset">
+ <link rel="match" href="reference/ref-filled-green-100px-square.xht">
+
+ <meta name="flags" content="">
+
+ <!--
+
+ This is a follow-up to
+ Pull Request 8788: Update css-backgrounds/border-image tests
+ https://github.com/web-platform-tests/wpt/pull/8788
+
+ Credit should go to Chris Nardi for trying to fix
+ 16 border-image tests with 2 relevant commits
+
+ -->
+
+ <style>
+ div#red-overlapped-ref
+ {
+ background-color: red;
+ padding: 24px;
+ height: 52px;
+ width: 52px;
+ /* border-box is therefore 100px by 100px */
+ }
+
+ div#green-overlapping-test
+ {
+ background-color: green;
+ border: red solid 1px;
+ height: 50px;
+ width: 50px; /* border-box is 52px by 52px */
+
+ border-image-outset: 24px; /* 24px is equal to padding belt */
+ border-image-slice: 25;
+ border-image-source: url("support/60x60-green.png");
+ border-image-width: 25px; /* we make sure that we will fill the outset */
+ }
+ </style>
+
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.
+
+ <div id="red-overlapped-ref">
+ <div id="green-overlapping-test"></div>
+ </div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-012.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-012.html
new file mode 100644
index 00000000000..16a6e9061df
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-012.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Backgrounds and Borders Test: border-image-outset property does not trigger scrolling</title>
+
+ <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net">
+ <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-outset">
+ <link rel="match" href="reference/border-image-012-ref.html">
+
+ <meta name="flags" content="scroll">
+
+ <!--
+
+ This is a follow-up to
+ Pull Request 8788: Update css-backgrounds/border-image tests
+ https://github.com/web-platform-tests/wpt/pull/8788
+
+ Credit should go to Chris Nardi for trying to fix
+ 16 border-image tests with 2 relevant commits
+
+ -->
+
+ <style>
+ div#red-overlapped-ref
+ {
+ background-color: red;
+ width: 100px;
+ height: 100px;
+ overflow: auto;
+ }
+
+ div#green-overlapping-test
+ {
+ background-color: green;
+ border: 1px solid red;
+ width: 98px;
+ height: 98px;
+ /* border-box is therefore 100px by 100px */
+
+ border-image-source: url("support/60x60-green.png");
+ border-image-slice: 10;
+ border-image-width: 10px;
+ border-image-outset: 9px;
+ }
+ </style>
+
+ <p>Test passes if there is a filled green square and if it has <strong>no scrollbar</strong>.
+
+ <div id="red-overlapped-ref">
+ <div id="green-overlapping-test"></div>
+ </div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-1.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-1.html
deleted file mode 100644
index 2318f6c1666..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-1.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #1 border-image-source
- </title>
- <meta name="assert" content="Basic support for the border-image-source property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-source">
-
- <style type="text/css">
-
- #test {
- background-color: #009900;
- border : 10px solid red;
- width : 20px;
- height : 20px;
-
- border-image-source: url(support/img-ref-1.png);
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if the square is fully green without any red border.
- </p>
-
- <div id="test"></div>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-10.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-10.html
deleted file mode 100644
index 4fa2c2a2f8a..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-10.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #10 border-image-width
- </title>
- <meta name="assert" content="Support for 4 values for the border-image-width property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-width">
-
- <style type="text/css">
-
- #test {
- border : 10px solid red;
- width : 20px;
- height : 20px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 10;
- border-image-width : 1px 5px 10px 15px;
- }
-
- #ref {
- border-top : 1px solid #009900;
- border-right : 5px solid #009900;
- border-bottom : 10px solid #009900;
- border-left : 15px solid #009900;
-
- padding: 9px 5px 0 0;
- width : 15px;
- height : 20px;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if both squares are identical.
- </p>
-
- <p id="test"></p>
- <p id="ref"></p>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-11.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-11.html
deleted file mode 100644
index cc662698b70..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-11.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #11 border-image-outset
- </title>
- <meta name="assert" content="Basic support for the border-image-outset property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-source">
-
- <style type="text/css">
-
- #fail {
- background-color: red;
- padding : 9px;
- width : 24px;
- height : 24px;
- }
-
- #test {
- background-color: #009900;
- border : 1px solid red;
- width : 22px;
- height : 22px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 10;
- border-image-width : 10px;
- border-image-outset: 9px;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if the square is green.
- </p>
-
- <div id="fail">
- <div id="test"></div>
- </div>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-12.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-12.html
deleted file mode 100644
index d5cacb027ea..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-12.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #12 border-image-outset
- </title>
- <meta name="assert" content="The border-image-outset property should not trigger scroll" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-outset">
-
- <style type="text/css">
-
- #fail {
- background-color: red;
- width : 42px;
- height : 42px;
- overflow : auto;
- }
-
- #test {
- background-color: #009900;
- border : 1px solid red;
- width : 40px;
- height : 40px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 10;
- border-image-width : 10px;
- border-image-outset: 9px;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if there is <strong>no</strong> scrollbars around the square
- </p>
-
- <div id="fail">
- <div id="test"></div>
- </div>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-2.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-2.html
deleted file mode 100644
index b6936125b14..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-2.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #2 border-image-slice
- </title>
- <meta name="assert" content="Basic support for the border-image-slice property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice">
-
- <style type="text/css">
-
- #fail {
- background-color: red;
- width : 60px;
- height : 60px;
- }
-
- #filler {
- background-color: #009900;
- width : 40px;
- height : 40px;
- }
-
- #test {
- border : 10px solid red;
- width : 40px;
- height : 40px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 10;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if the square is fully green.
- </p>
-
- <div id="fail">
- <div id="test">
- <div id="filler"></div>
- </div>
- </div>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-3.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-3.html
deleted file mode 100644
index d4f1524112e..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-3.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #3 border-image-slice
- </title>
- <meta name="assert" content="Support for the fill keyword on the border-image-slice property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice">
-
- <style type="text/css">
-
- #fail {
- background-color: red;
- width : 60px;
- height : 60px;
- }
-
- #test {
- background-color: red;
- border : 10px solid red;
- width : 40px;
- height : 40px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 10 fill;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if the square is fully green.
- </p>
-
- <div id="fail">
- <div id="test"></div>
- </div>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-4.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-4.html
deleted file mode 100644
index 619b677e114..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-4.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #4 border-image-slice
- </title>
- <meta name="assert" content="Support for percentage with the border-image-slice property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice">
-
- <style type="text/css">
-
- #fail {
- background-color: red;
- width : 60px;
- height : 60px;
- }
-
- #filler {
- background-color: #009900;
- width : 40px;
- height : 40px;
- }
-
- #test {
- border : 10px solid red;
- width : 40px;
- height : 40px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 33%;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if the square is fully green.
- </p>
-
- <div id="fail">
- <div id="test">
- <div id="filler"></div>
- </div>
- </div>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6-ref.html
deleted file mode 100644
index f3e3bb79c05..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6-ref.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>border-image-6-ref</title>
-
- <style type="text/css">
- #container {
- position: relative;
-
- width: 60px;
- height: 60px;
- }
-
- #filler {
- position: absolute;
- top: 10px;
- left: 10px;
-
- width: 40px;
- height: 40px;
-
- background-color: #090;
- }
-
- .small {
- position: absolute;
-
- width: 10px;
- height: 10px;
-
- /* orange appears here to make it super-clear if this doesn't load */
- background: url(support/img-ref-1.png) orange;
- }
-
- .small.top {
- top: 0;
- }
-
- .small.bottom {
- bottom: 0;
- }
-
- .small.left {
- left: 0;
- }
-
- .small.right {
- right: 0;
- }
- </style>
-
- </head>
- <body>
-
- <p>
- Pass if the green square have smaller green squares at its corners and <strong>no</strong> red borders.
- </p>
-
- <div id="container">
- <div id="filler"></div>
- <div class="small top left"></div>
- <div class="small top right"></div>
- <div class="small bottom left"></div>
- <div class="small bottom right"></div>
- </div>
-
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6.html
deleted file mode 100644
index bc4cb1386b5..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #6 border-image-slice
- </title>
- <meta name="assert" content="The border-image-slice property default value is 100%" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice">
-
- <link rel="match" href="border-image-6-ref.html" />
-
- <style type="text/css">
-
- #filler {
- background-color : #009900;
- width : 40px;
- height: 40px;
- }
-
- #test {
- border : 10px solid red;
- width : 40px;
- height : 40px;
-
- border-image-source: url(support/img-ref-1.png);
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if the green square have smaller green squares at its corners and <strong>no</strong> red borders.
- </p>
-
- <div id="test">
- <div id="filler"></div>
- </div>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-7.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-7.html
deleted file mode 100644
index 4142dcb427c..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-7.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #7 border-image-width
- </title>
- <meta name="assert" content="Basic support for the border-image-width property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-width">
-
- <style type="text/css">
-
- #test {
- border : 10px solid red;
- width : 20px;
- height : 20px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 10;
- border-image-width : 1px;
- }
-
- #ref {
- border : 1px solid #009900;
- padding: 9px;
- width : 20px;
- height : 20px;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if both squares are identical.
- </p>
-
- <p id="test"></p>
- <p id="ref"></p>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-8.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-8.html
deleted file mode 100644
index 26eaf68c208..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-8.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #8 border-image-width
- </title>
- <meta name="assert" content="Support for 2 values for the border-image-width property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-width">
-
- <style type="text/css">
-
- #test {
- border : 10px solid red;
- width : 20px;
- height : 20px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 10;
- border-image-width : 1px 5px;
- }
-
- #ref {
- border-top : 1px solid #009900;
- border-right : 5px solid #009900;
- border-bottom : 1px solid #009900;
- border-left : 5px solid #009900;
-
- padding: 9px 5px 9px 5px;
- width : 20px;
- height : 20px;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if both squares are identical.
- </p>
-
- <p id="test"></p>
- <p id="ref"></p>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-9.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-9.html
deleted file mode 100644
index 5d805ec7527..00000000000
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-9.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>
- CSS Border and Background: border-image #9 border-image-width
- </title>
- <meta name="assert" content="Support for 3 values for the border-image-width property" />
-
- <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / >
-
- <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-width">
-
- <style type="text/css">
-
- #test {
- border : 10px solid red;
- width : 20px;
- height : 20px;
-
- border-image-source: url(support/img-ref-1.png);
- border-image-slice : 10;
- border-image-width : 1px 5px 10px;
- }
-
- #ref {
- border-top : 1px solid #009900;
- border-right : 5px solid #009900;
- border-bottom : 10px solid #009900;
- border-left : 5px solid #009900;
-
- padding: 9px 5px 0 5px;
- width : 20px;
- height : 20px;
- }
-
- </style>
-
-</head>
-<body>
-
- <p>
- Pass if both squares are identical.
- </p>
-
- <p id="test"></p>
- <p id="ref"></p>
-
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html
index 1c05517c62a..dac7b1012a0 100644
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html
@@ -38,6 +38,11 @@ test_valid_value("background-position", "top 17px right 18px", "right 18px top 1
test_valid_value("background-position", "bottom center", ["center bottom", "bottom"]);
test_valid_value("background-position", "top left", "left top");
test_valid_value("background-position", "bottom right 19%", ["right 19% bottom", "right 19% bottom 0%"]); // "right 19% bottom 0%" in Edge
+test_valid_value("background-position", "20% 0%");
+test_valid_value("background-position", "0% 0%");
+test_valid_value("background-position", "0%", ["0%", "0% center"]);
+test_valid_value("background-position", "0% center", ["0%", "0% center"]);
+test_valid_value("background-position", "center 0%");
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html
index cb086dd3ec8..e011c2238d2 100644
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html
@@ -25,7 +25,7 @@ test_valid_value("background",
test_shorthand_value('background', 'none', {
'background-image': 'none',
- 'background-position': '0%',
+ 'background-position': '0% 0%',
'background-size': 'auto',
'background-repeat': 'repeat',
'background-attachment': 'scroll',
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-006-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-006-ref.html
new file mode 100644
index 00000000000..8e5ef401ec4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-006-ref.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Reftest reference</title>
+
+ <style>
+ table
+ {
+ border-spacing: 0px;
+ table-layout: fixed;
+ }
+
+ td
+ {
+ padding: 0px;
+ }
+
+ td.green-square
+ {
+ background-color: green;
+ height: 25px;
+ width: 25px;
+ }
+
+ td#blue-square
+ {
+ border: blue solid 1px;
+ height: 48px;
+ width: 48px;
+ }
+ </style>
+
+ <p>Test passes if there is an hollow blue square with smaller filled green squares at its corners and <strong>no red</strong>.
+
+ <table>
+
+ <tr><td class="green-square"><td><td class="green-square">
+
+ <tr><td><td id="blue-square"><td>
+
+ <tr><td class="green-square"><td><td class="green-square">
+
+ </table>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-007-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-007-ref.html
new file mode 100644
index 00000000000..9200edd797e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-007-ref.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+
+ <meta charset="UTF-8">
+
+ <title>CSS Reftest reference</title>
+
+ <style>
+ div.outer
+ {
+ height: 20px;
+ margin-bottom: 16px;
+ width: 20px;
+ }
+
+ div.inside
+ {
+ background-color: blue;
+ height: 12px;
+ margin: 2px 4px 6px 8px;
+ width: 8px;
+ }
+
+ div#first-subtest
+ {
+ border: green solid 1px;
+ padding: 39px;
+ }
+
+ div#second-subtest
+ {
+ border-top: green solid 1px;
+ border-right: green solid 5px;
+ border-bottom: green solid 1px;
+ border-left: green solid 5px;
+ padding: 39px 35px;
+ }
+
+ div#third-subtest
+ {
+ border-top: green solid 1px;
+ border-right: green solid 5px;
+ border-bottom: green solid 10px;
+ border-left: green solid 5px;
+ padding: 39px 35px 30px;
+ }
+
+ div#fourth-subtest
+ {
+ border-top: green solid 1px;
+ border-right: green solid 5px;
+ border-bottom: green solid 10px;
+ border-left: green solid 15px;
+ padding: 39px 35px 30px 25px;
+ }
+ </style>
+
+ <div class="outer" id="first-subtest"><div class="inside"></div></div>
+
+ <div class="outer" id="second-subtest"><div class="inside"></div></div>
+
+ <div class="outer" id="third-subtest"><div class="inside"></div></div>
+
+ <div class="outer" id="fourth-subtest"><div class="inside"></div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-012-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-012-ref.html
new file mode 100644
index 00000000000..c11db014019
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-012-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+
+ <meta charset="utf-8">
+
+ <title>CSS Reftest reference</title>
+
+ <style>
+ div
+ {
+ background-color: green;
+ height: 100px;
+ width: 100px;
+ }
+ </style>
+
+ <p>Test passes if there is a filled green square and if it has <strong>no scrollbar</strong>.
+
+ <div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html
index 439747a9ff2..95db5aa78c7 100644
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html
@@ -32,7 +32,7 @@
}
</style>
- <head/>
+ </head>
<body>
<p>
"Test passes if the border is blue dotted without red."
diff --git a/tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html
index ac665a9bedb..fa29b5106a7 100644
--- a/tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html
+++ b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html
@@ -329,6 +329,7 @@
text-transform: lowercase;
text-underline-offset: 123px;
text-underline-position: under;
+ text-wrap: nowrap;
top: 123px;
touch-action: none;
transform: scale(-1);
@@ -345,7 +346,8 @@
vector-effect: non-scaling-stroke;
vertical-align: 123px;
visibility: collapse;
- white-space: pre;
+ white-space-collapse: preserve;
+ white-space-trim: discard-inner;
widows: 123;
width: 123px;
will-change: height;
diff --git a/tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html b/tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html
index e7dd96c5ac7..0e88778202f 100644
--- a/tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html
+++ b/tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html
@@ -22,7 +22,7 @@ function createStyleSheet(length, i) {
`.trim();
}
-// <div class=s0><div class=s1>...<span/>...</div></div>
+// <div class=s0><div class=s1>...<span></span>...</div></div>
function createElementChain(length, i) {
if (length < 1)
throw 'Invalid length';
diff --git a/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html
new file mode 100644
index 00000000000..c664ce4ccf3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<meta charset="utf-8">
+<style>
+.test {
+ border: 1px solid;
+ max-width: max-content;
+}
+
+span {
+ display: block;
+ background-color: green;
+}
+</style>
+<div class="test">
+ <span style="width: 40px; height: 40px"></span>
+</div>
+<div class="test">
+ <span style="width: 100px; height: 100px"></span>
+</div>
+<div class="test">
+ <span style="width: 200px; height: 200px"></span>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node.html b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node.html
new file mode 100644
index 00000000000..e1a5c714516
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-contain-3/#container-lengths">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1835179">
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="author" href="https://mozilla.org" title="Mozilla">
+<link rel="match" href="container-units-sharing-via-rule-node-ref.html">
+<style>
+.test {
+ position: relative;
+ z-index: 0;
+ border: 1px solid;
+ max-width: max-content;
+}
+
+.container {
+ position: absolute;
+ container-type: size;
+ inset: 0;
+}
+
+.container-content {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100cqi;
+ height: 100cqb;
+ background-color: green;
+}
+
+span {
+ display: block;
+ background-color: red;
+}
+</style>
+<div class="test">
+ <div class="container">
+ <div class="container-content"></div>
+ </div>
+ <span style="width: 40px; height: 40px"></span>
+</div>
+<div class="test">
+ <div class="container">
+ <div class="container-content"></div>
+ </div>
+ <span style="width: 100px; height: 100px"></span>
+</div>
+<div class="test">
+ <div class="container">
+ <div class="container-content"></div>
+ </div>
+ <span style="width: 200px; height: 200px"></span>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-000.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-000.html
new file mode 100644
index 00000000000..fef4f5e5405
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-000.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>CSS Content Visibility: popover doesn't show when hidden</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="container-ref.html">
+<meta name="assert" content="top layer popovers don't render when in skipped subtrees">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.box { width: 150px; height: 150px; background: lightblue }
+.hidden { content-visibility: hidden }
+</style>
+
+<div class="box hidden">
+Fail
+<div popover id=popover>Fail<div id=inner></div></div>
+</div>
+
+<script>
+function runTest() {
+ popover.showPopover();
+ takeScreenshot();
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-001.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-001.html
new file mode 100644
index 00000000000..fb3c9096da6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-001.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>CSS Content Visibility: popover doesn't show when hidden after render</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="container-ref.html">
+<meta name="assert" content="top layer popovers don't render when in skipped subtrees">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.box { width: 150px; height: 150px; background: lightblue }
+.hidden { content-visibility: hidden }
+</style>
+
+<div id=container class=box>
+Fail
+<div popover id=popover>Fail<div id=inner></div></div>
+</div>
+
+<script>
+function runTest() {
+ container.classList.add("hidden");
+ popover.showPopover();
+ takeScreenshot();
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-002.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-002.html
new file mode 100644
index 00000000000..48b436f4de1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-002.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>CSS Content Visibility: popover doesn't show when hidden after render</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="container-ref.html">
+<meta name="assert" content="top layer popovers don't render when in skipped subtrees">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.box { width: 150px; height: 150px; background: lightblue }
+.hidden { content-visibility: hidden }
+</style>
+
+<div id=container class=box>
+content
+<div popover id=popover>popover<div id=inner></div></div>
+</div>
+
+<script>
+function runTest() {
+ container.classList.add("hidden");
+ popover.showPopover();
+ inner.getBoundingClientRect();
+
+ takeScreenshot();
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-003.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-003.html
new file mode 100644
index 00000000000..df3cf07a015
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-003.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>CSS Content Visibility: popover shows when rendered</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="content-with-popover-top-layer-ref.html">
+<meta name="assert" content="top layer popovers start rendering when c-v is removed">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.box { width: 100px; height: 100px; border: 1px solid black; }
+.hidden { content-visibility: hidden }
+#popover { outline: none; }
+</style>
+
+<div id=container class=box>
+This test passes if you can see “PASS” in a white box.
+<div popover id=popover>PASS<div id=inner></div></div>
+</div>
+text
+
+<script>
+function unhide() {
+ container.classList.remove("hidden");
+ takeScreenshot();
+}
+
+function runTest() {
+ container.classList.add("hidden");
+ popover.showPopover();
+ requestAnimationFrame(unhide);
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-004.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-004.html
new file mode 100644
index 00000000000..bbf4567e37d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-004.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>CSS Content Visibility: popover shows under c-v auto</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="spacer-with-popover-top-layer-ref.html">
+<meta name="assert" content="top layer popovers render under c-v auto">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.box { width: 100px; height: 100px; border: 1px solid black; }
+.auto { content-visibility: auto }
+.spacer { width: 10px; height: 3000px; background: lightblue; }
+</style>
+
+<div class=spacer></div>
+<div id=container class="box auto">
+content
+<div popover id=popover>PASS<div id=inner></div></div>
+</div>
+
+<script>
+function runTest() {
+ popover.showPopover();
+ takeScreenshot();
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-005.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-005.html
new file mode 100644
index 00000000000..264d7b317e0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-005.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>CSS Content Visibility: popover shows under c-v auto</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="spacer-with-popover-top-layer-ref.html">
+<meta name="assert" content="top layer popovers render under c-v auto">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.box { width: 100px; height: 100px; border: 1px solid black; }
+.auto { content-visibility: auto }
+.spacer { width: 10px; height: 3000px; background: lightblue; }
+</style>
+
+<div class=spacer></div>
+<div id=container class="box">
+content
+<div popover id=popover><div id=inner class="auto">PASS</div></div>
+</div>
+
+<script>
+function runTest() {
+ popover.showPopover();
+ takeScreenshot();
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-006.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-006.html
new file mode 100644
index 00000000000..fbe8b9fbb77
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-006.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS Content Visibility: offscreen c-v auto content is relevant when in top layer</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<meta name="assert" content="offscreen c-v auto content is relevant when in top layer">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+#inner {
+ content-visibility: auto;
+ contain-intrinsic-size: 100px 100px;
+}
+</style>
+
+<div popover id="popover">
+ <div id="spacer" style="height: 100000px;"></div>
+ <div id="inner">
+ <div style="height: 200px; width: 200px;">content</div>
+ </div>
+</div>
+
+<script>
+test(() => {
+ popover.showPopover();
+
+ // Even though the element with `content-visibility: auto` has an ancestor
+ // in the top layer, this element is not in the top layer list (although
+ // it's in the top layer stacking context). This means it should not be
+ // relevant to the user, because it is not onscreen.
+ assert_equals(inner.getBoundingClientRect().height, 100);
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-hide-after-addition.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-hide-after-addition.html
new file mode 100644
index 00000000000..e3934bf46f8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-hide-after-addition.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>CSS Content Visibility: popover doesn't show when hidden after showModal()</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="container-ref.html">
+<meta name="assert" content="top layer popovers don't render when in skipped subtrees">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.box { width: 150px; height: 150px; background: lightblue }
+.hidden { content-visibility: hidden }
+</style>
+
+<div id=container class=box>
+FAIL
+<div popover id=popovers>FAIL<div id=inner></div></div>
+</div>
+
+<script>
+function runTest() {
+ popovers.showPopover();
+ inner.getBoundingClientRect();
+
+ container.classList.add("hidden");
+
+ takeScreenshot();
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html
new file mode 100644
index 00000000000..59b2304d9ef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS Content Visibility: popover shows when rendered (ref)</title>
+
+<style>
+.box { width: 100px; height: 100px; border: 1px solid black; }
+#popover { outline: none; }
+</style>
+
+<div id=container class=box>
+This test passes if you can see “PASS” in a white box.
+<div popover id=popover>PASS<div id=inner></div></div>
+</div>
+text
+
+<script>
+popover.showPopover();
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html
new file mode 100644
index 00000000000..6c4c65f58c3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset="utf8">
+<title>CSS Content Visibility: popover shows under c-v auto (ref)</title>
+
+<style>
+.box { width: 100px; height: 100px; border: 1px solid black; }
+.spacer { width: 10px; height: 3000px; background: lightblue; }
+</style>
+
+<div class=spacer></div>
+<div id=container class=box>
+content
+<div popover id=popover>PASS<div id=inner></div></div>
+</div>
+
+<script>
+popover.showPopover();
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html
index 52712e3fd07..e7abaad87e5 100644
--- a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html
@@ -10,33 +10,33 @@
ol li { list-style-type: cjk-earthly-branch; }
/* the following CSS is not part of the test */
.test { font-size: 25px; }
-ol { margin: 0; padding-left: 8em; }
+ol { margin: 0; padding-left: 8em; line-height: 100%;}
</style>
</head>
<body>
<p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p>
<div class="test">
-<ol start="13"><div><bdi dir=ltr>子子、</bdi>子子</div></ol>
-<ol start="14"><div><bdi dir=ltr>子丑、</bdi>子丑</div></ol>
-<ol start="77"><div><bdi dir=ltr>巳辰、</bdi>巳辰</div></ol>
-<ol start="80"><div><bdi dir=ltr>巳未、</bdi>巳未</div></ol>
-<ol start="99"><div><bdi dir=ltr>未寅、</bdi>未寅</div></ol>
-<ol start="100"><div><bdi dir=ltr>未卯、</bdi>未卯</div></ol>
-<ol start="101"><div><bdi dir=ltr>未辰、</bdi>未辰</div></ol>
-<ol start="222"><div><bdi dir=ltr>子巳巳、</bdi>子巳巳</div></ol>
-<ol start="540"><div><bdi dir=ltr>寅未亥、</bdi>寅未亥</div></ol>
-<ol start="999"><div><bdi dir=ltr>巳戌寅、</bdi>巳戌寅</div></ol>
-<ol start="1000"><div><bdi dir=ltr>巳戌卯、</bdi>巳戌卯</div></ol>
-<ol start="1005"><div><bdi dir=ltr>巳戌申、</bdi>巳戌申</div></ol>
-<ol start="1060"><div><bdi dir=ltr>午卯卯、</bdi>午卯卯</div></ol>
-<ol start="1065"><div><bdi dir=ltr>午卯申、</bdi>午卯申</div></ol>
-<ol start="1800"><div><bdi dir=ltr>亥辰亥、</bdi>亥辰亥</div></ol>
-<ol start="1860"><div><bdi dir=ltr>亥酉亥、</bdi>亥酉亥</div></ol>
-<ol start="5865"><div><bdi dir=ltr>寅卯未申、</bdi>寅卯未申</div></ol>
-<ol start="7005"><div><bdi dir=ltr>寅亥午申、</bdi>寅亥午申</div></ol>
-<ol start="7800"><div><bdi dir=ltr>卯巳子亥、</bdi>卯巳子亥</div></ol>
-<ol start="7864"><div><bdi dir=ltr>卯巳午卯、</bdi>卯巳午卯</div></ol>
-<ol start="9999"><div><bdi dir=ltr>辰申辰寅、</bdi>辰申辰寅</div></ol>
+<ol start="13"><div><bdi dir=ltr>13、</bdi>13</div></ol>
+<ol start="14"><div><bdi dir=ltr>14、</bdi>14</div></ol>
+<ol start="77"><div><bdi dir=ltr>77、</bdi>77</div></ol>
+<ol start="80"><div><bdi dir=ltr>80、</bdi>80</div></ol>
+<ol start="99"><div><bdi dir=ltr>99、</bdi>99</div></ol>
+<ol start="100"><div><bdi dir=ltr>100、</bdi>100</div></ol>
+<ol start="101"><div><bdi dir=ltr>101、</bdi>101</div></ol>
+<ol start="222"><div><bdi dir=ltr>222、</bdi>222</div></ol>
+<ol start="540"><div><bdi dir=ltr>540、</bdi>540</div></ol>
+<ol start="999"><div><bdi dir=ltr>999、</bdi>999</div></ol>
+<ol start="1000"><div><bdi dir=ltr>1000、</bdi>1000</div></ol>
+<ol start="1005"><div><bdi dir=ltr>1005、</bdi>1005</div></ol>
+<ol start="1060"><div><bdi dir=ltr>1060、</bdi>1060</div></ol>
+<ol start="1065"><div><bdi dir=ltr>1065、</bdi>1065</div></ol>
+<ol start="1800"><div><bdi dir=ltr>1800、</bdi>1800</div></ol>
+<ol start="1860"><div><bdi dir=ltr>1860、</bdi>1860</div></ol>
+<ol start="5865"><div><bdi dir=ltr>5865、</bdi>5865</div></ol>
+<ol start="7005"><div><bdi dir=ltr>7005、</bdi>7005</div></ol>
+<ol start="7800"><div><bdi dir=ltr>7800、</bdi>7800</div></ol>
+<ol start="7864"><div><bdi dir=ltr>7864、</bdi>7864</div></ol>
+<ol start="9999"><div><bdi dir=ltr>9999、</bdi>9999</div></ol>
</div>
<!--Notes:
You will need an appropriate font to run this test.
diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html
index 909118fb109..6f00ee8b2d8 100644
--- a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html
+++ b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html
@@ -11,33 +11,33 @@
ol li { list-style-type: cjk-earthly-branch; }
/* the following CSS is not part of the test */
.test { font-size: 25px; }
-ol { margin: 0; padding-left: 8em; list-style-position: inside; }
+ol { margin: 0; padding-left: 8em; list-style-position: inside; line-height: 100%;}
</style>
</head>
<body>
<p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p>
<div class="test">
-<ol start="13"><li title="13">子子</li></ol>
-<ol start="14"><li title="14">子丑</li></ol>
-<ol start="77"><li title="77">巳辰</li></ol>
-<ol start="80"><li title="80">巳未</li></ol>
-<ol start="99"><li title="99">未寅</li></ol>
-<ol start="100"><li title="100">未卯</li></ol>
-<ol start="101"><li title="101">未辰</li></ol>
-<ol start="222"><li title="222">子巳巳</li></ol>
-<ol start="540"><li title="540">寅未亥</li></ol>
-<ol start="999"><li title="999">巳戌寅</li></ol>
-<ol start="1000"><li title="1000">巳戌卯</li></ol>
-<ol start="1005"><li title="1005">巳戌申</li></ol>
-<ol start="1060"><li title="1060">午卯卯</li></ol>
-<ol start="1065"><li title="1065">午卯申</li></ol>
-<ol start="1800"><li title="1800">亥辰亥</li></ol>
-<ol start="1860"><li title="1860">亥酉亥</li></ol>
-<ol start="5865"><li title="5865">寅卯未申</li></ol>
-<ol start="7005"><li title="7005">寅亥午申</li></ol>
-<ol start="7800"><li title="7800">卯巳子亥</li></ol>
-<ol start="7864"><li title="7864">卯巳午卯</li></ol>
-<ol start="9999"><li title="9999">辰申辰寅</li></ol>
+<ol start="13"><li title="13">13</li></ol>
+<ol start="14"><li title="14">14</li></ol>
+<ol start="77"><li title="77">77</li></ol>
+<ol start="80"><li title="80">80</li></ol>
+<ol start="99"><li title="99">99</li></ol>
+<ol start="100"><li title="100">100</li></ol>
+<ol start="101"><li title="101">101</li></ol>
+<ol start="222"><li title="222">222</li></ol>
+<ol start="540"><li title="540">540</li></ol>
+<ol start="999"><li title="999">999</li></ol>
+<ol start="1000"><li title="1000">1000</li></ol>
+<ol start="1005"><li title="1005">1005</li></ol>
+<ol start="1060"><li title="1060">1060</li></ol>
+<ol start="1065"><li title="1065">1065</li></ol>
+<ol start="1800"><li title="1800">1800</li></ol>
+<ol start="1860"><li title="1860">1860</li></ol>
+<ol start="5865"><li title="5865">5865</li></ol>
+<ol start="7005"><li title="7005">7005</li></ol>
+<ol start="7800"><li title="7800">7800</li></ol>
+<ol start="7864"><li title="7864">7864</li></ol>
+<ol start="9999"><li title="9999">9999</li></ol>
</div>
<!--Notes:
You will need an appropriate font to run this test.
diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html
index 7d8e6fb613e..45b7037a8c1 100644
--- a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html
@@ -10,34 +10,34 @@
ol li { list-style-type: cjk-heavenly-stem; }
/* the following CSS is not part of the test */
.test { font-size: 25px; }
-ol { margin: 0; padding-left: 8em; }
+ol { margin: 0; padding-left: 8em; line-height: 100%;}
</style>
</head>
<body>
<p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p>
<div class="test">
-<ol start="11"><div><bdi dir=ltr>甲甲、</bdi>甲甲</div></ol>
-<ol start="12"><div><bdi dir=ltr>甲乙、</bdi>甲乙</div></ol>
-<ol start="43"><div><bdi dir=ltr>丁丙、</bdi>丁丙</div></ol>
-<ol start="77"><div><bdi dir=ltr>庚庚、</bdi>庚庚</div></ol>
-<ol start="80"><div><bdi dir=ltr>庚癸、</bdi>庚癸</div></ol>
-<ol start="99"><div><bdi dir=ltr>壬壬、</bdi>壬壬</div></ol>
-<ol start="100"><div><bdi dir=ltr>壬癸、</bdi>壬癸</div></ol>
-<ol start="101"><div><bdi dir=ltr>癸甲、</bdi>癸甲</div></ol>
-<ol start="222"><div><bdi dir=ltr>乙乙乙、</bdi>乙乙乙</div></ol>
-<ol start="540"><div><bdi dir=ltr>戊丙癸、</bdi>戊丙癸</div></ol>
-<ol start="999"><div><bdi dir=ltr>壬壬壬、</bdi>壬壬壬</div></ol>
-<ol start="1000"><div><bdi dir=ltr>壬壬癸、</bdi>壬壬癸</div></ol>
-<ol start="1005"><div><bdi dir=ltr>壬癸戊、</bdi>壬癸戊</div></ol>
-<ol start="1060"><div><bdi dir=ltr>癸戊癸、</bdi>癸戊癸</div></ol>
-<ol start="1065"><div><bdi dir=ltr>癸己戊、</bdi>癸己戊</div></ol>
-<ol start="1800"><div><bdi dir=ltr>甲庚壬癸、</bdi>甲庚壬癸</div></ol>
-<ol start="1860"><div><bdi dir=ltr>甲辛戊癸、</bdi>甲辛戊癸</div></ol>
-<ol start="5865"><div><bdi dir=ltr>戊辛己戊、</bdi>戊辛己戊</div></ol>
-<ol start="7005"><div><bdi dir=ltr>己壬癸戊、</bdi>己壬癸戊</div></ol>
-<ol start="7800"><div><bdi dir=ltr>庚庚壬癸、</bdi>庚庚壬癸</div></ol>
-<ol start="7864"><div><bdi dir=ltr>庚辛己丁、</bdi>庚辛己丁</div></ol>
-<ol start="9999"><div><bdi dir=ltr>壬壬壬壬、</bdi>壬壬壬壬</div></ol>
+<ol start="11"><div><bdi dir=ltr>11、</bdi>11</div></ol>
+<ol start="12"><div><bdi dir=ltr>12、</bdi>12</div></ol>
+<ol start="43"><div><bdi dir=ltr>43、</bdi>43</div></ol>
+<ol start="77"><div><bdi dir=ltr>77、</bdi>77</div></ol>
+<ol start="80"><div><bdi dir=ltr>80、</bdi>80</div></ol>
+<ol start="99"><div><bdi dir=ltr>99、</bdi>99</div></ol>
+<ol start="100"><div><bdi dir=ltr>100、</bdi>100</div></ol>
+<ol start="101"><div><bdi dir=ltr>101、</bdi>101</div></ol>
+<ol start="222"><div><bdi dir=ltr>222、</bdi>222</div></ol>
+<ol start="540"><div><bdi dir=ltr>540、</bdi>540</div></ol>
+<ol start="999"><div><bdi dir=ltr>999、</bdi>999</div></ol>
+<ol start="1000"><div><bdi dir=ltr>1000、</bdi>1000</div></ol>
+<ol start="1005"><div><bdi dir=ltr>1005、</bdi>1005</div></ol>
+<ol start="1060"><div><bdi dir=ltr>1060、</bdi>1060</div></ol>
+<ol start="1065"><div><bdi dir=ltr>1065、</bdi>1065</div></ol>
+<ol start="1800"><div><bdi dir=ltr>1800、</bdi>1800</div></ol>
+<ol start="1860"><div><bdi dir=ltr>1860、</bdi>1860</div></ol>
+<ol start="5865"><div><bdi dir=ltr>5865、</bdi>5865</div></ol>
+<ol start="7005"><div><bdi dir=ltr>7005、</bdi>7005</div></ol>
+<ol start="7800"><div><bdi dir=ltr>7800、</bdi>7800</div></ol>
+<ol start="7864"><div><bdi dir=ltr>7864、</bdi>7864</div></ol>
+<ol start="9999"><div><bdi dir=ltr>9999、</bdi>9999</div></ol>
</div>
<!--Notes:
You will need an appropriate font to run this test.
diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html
index fdd74e837d3..4b62cfeb77a 100644
--- a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html
+++ b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html
@@ -11,34 +11,34 @@
ol li { list-style-type: cjk-heavenly-stem; }
/* the following CSS is not part of the test */
.test { font-size: 25px; }
-ol { margin: 0; padding-left: 8em; list-style-position: inside; }
+ol { margin: 0; padding-left: 8em; list-style-position: inside; line-height: 100%; }
</style>
</head>
<body>
<p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p>
<div class="test">
-<ol start="11"><li title="11">甲甲</li></ol>
-<ol start="12"><li title="12">甲乙</li></ol>
-<ol start="43"><li title="43">丁丙</li></ol>
-<ol start="77"><li title="77">庚庚</li></ol>
-<ol start="80"><li title="80">庚癸</li></ol>
-<ol start="99"><li title="99">壬壬</li></ol>
-<ol start="100"><li title="100">壬癸</li></ol>
-<ol start="101"><li title="101">癸甲</li></ol>
-<ol start="222"><li title="222">乙乙乙</li></ol>
-<ol start="540"><li title="540">戊丙癸</li></ol>
-<ol start="999"><li title="999">壬壬壬</li></ol>
-<ol start="1000"><li title="1000">壬壬癸</li></ol>
-<ol start="1005"><li title="1005">壬癸戊</li></ol>
-<ol start="1060"><li title="1060">癸戊癸</li></ol>
-<ol start="1065"><li title="1065">癸己戊</li></ol>
-<ol start="1800"><li title="1800">甲庚壬癸</li></ol>
-<ol start="1860"><li title="1860">甲辛戊癸</li></ol>
-<ol start="5865"><li title="5865">戊辛己戊</li></ol>
-<ol start="7005"><li title="7005">己壬癸戊</li></ol>
-<ol start="7800"><li title="7800">庚庚壬癸</li></ol>
-<ol start="7864"><li title="7864">庚辛己丁</li></ol>
-<ol start="9999"><li title="9999">壬壬壬壬</li></ol>
+<ol start="11"><li title="11">11</li></ol>
+<ol start="12"><li title="12">12</li></ol>
+<ol start="43"><li title="43">43</li></ol>
+<ol start="77"><li title="77">77</li></ol>
+<ol start="80"><li title="80">80</li></ol>
+<ol start="99"><li title="99">99</li></ol>
+<ol start="100"><li title="100">100</li></ol>
+<ol start="101"><li title="101">101</li></ol>
+<ol start="222"><li title="222">222</li></ol>
+<ol start="540"><li title="540">540</li></ol>
+<ol start="999"><li title="999">999</li></ol>
+<ol start="1000"><li title="1000">1000</li></ol>
+<ol start="1005"><li title="1005">1005</li></ol>
+<ol start="1060"><li title="1060">1060</li></ol>
+<ol start="1065"><li title="1065">1065</li></ol>
+<ol start="1800"><li title="1800">1800</li></ol>
+<ol start="1860"><li title="1860">1860</li></ol>
+<ol start="5865"><li title="5865">5865</li></ol>
+<ol start="7005"><li title="7005">7005</li></ol>
+<ol start="7800"><li title="7800">7800</li></ol>
+<ol start="7864"><li title="7864">7864</li></ol>
+<ol start="9999"><li title="9999">9999</li></ol>
</div>
<!--Notes:
You will need an appropriate font to run this test.
diff --git a/tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html b/tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html
index 867f1f05924..c29b5ba6348 100644
--- a/tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html
+++ b/tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html
@@ -7,5 +7,5 @@
<div id="host"><span>two</span> <span>words</span></div>
<script>
host.offsetTop;
- host.attachShadow({mode:"open"}).innerHTML = "<slot />";
+ host.attachShadow({mode:"open"}).innerHTML = "<slot></slot>";
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-005.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-005.html
new file mode 100644
index 00000000000..455439f7980
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-005.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/">
+<style>
+.item {
+ inline-size: 40px;
+ box-sizing: border-box;
+ border: solid 5px hotpink;
+ line-height: 0;
+ margin-block-start: 3px;
+ margin-block-end: 5px;
+}
+.small {
+ width: 20px;
+ height: 20px;
+ border: solid 5px cyan;
+}
+.first {
+ align-self: baseline;
+}
+.last {
+ align-self: last baseline;
+}
+span {
+ width: 20px;
+ height: 20px;
+ box-sizing: border-box;
+ border: solid 5px orange;
+ display: inline-block;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.item')">
+
+<div style="position: relative; display: grid; grid-template: 150px 150px 150px / 100px 100px 100px 100px;">
+ <div style="display: grid;
+ gap: 10px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 3;
+ grid-template: subgrid / subgrid;
+ margin-block-start: 5px; margin-block-end: 10px;
+ border: solid black 5px;
+ padding-block-start: 10px; padding-block-end: 20px;">
+ <div style="display: grid;
+ gap: 20px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 2;
+ grid-template: subgrid / subgrid;
+ margin-block-start: 3px; margin-block-end: 7px;
+ border: solid black 5px;
+ padding-block-start: 5px; padding-block-end: 10px;">
+ <div data-offset-y="36" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-y="85" class="item last">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-y="163" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-y="218" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-y="308" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-y="360" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-y="41" class="item small first"></div>
+ <div data-offset-y="110" class="item small last"></div>
+ <div data-offset-y="168" class="item small first"></div>
+ <div data-offset-y="243" class="item small last"></div>
+ <div data-offset-y="313" class="item small first"></div>
+ <div data-offset-y="385" class="item small last"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-006.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-006.html
new file mode 100644
index 00000000000..23d2b3b6062
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-006.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/">
+<style>
+.item {
+ inline-size: 40px;
+ box-sizing: border-box;
+ border: solid 5px hotpink;
+ line-height: 0;
+ margin-block-start: 3px;
+ margin-block-end: 5px;
+}
+.small {
+ width: 30px;
+ height: 30px;
+ border: solid 5px cyan;
+}
+.first {
+ align-self: baseline;
+}
+.last {
+ align-self: last baseline;
+}
+span {
+ width: 20px;
+ height: 20px;
+ box-sizing: border-box;
+ border: solid 5px orange;
+ display: inline-block;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.item')">
+
+<div style="writing-mode: vertical-rl; width: 600px; position: relative; display: grid; grid-template: 150px 150px 150px / 100px 100px 100px 100px;">
+ <div style="display: grid;
+ gap: 10px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 3;
+ grid-template: subgrid / subgrid;
+ margin-block-start: 5px; margin-block-end: 10px;
+ border: solid black 5px;
+ padding-block-start: 10px; padding-block-end: 20px;">
+ <div style="display: grid;
+ gap: 20px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 2;
+ grid-template: subgrid / subgrid;
+ margin-block-start: 3px; margin-block-end: 7px;
+ border: solid black 5px;
+ padding-block-start: 5px; padding-block-end: 10px;">
+ <div data-offset-x="514" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="465" class="item last">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="387" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="332" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-x="242" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="190" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-x="534" class="item small first"></div>
+ <div data-offset-x="465" class="item small last"></div>
+ <div data-offset-x="407" class="item small first"></div>
+ <div data-offset-x="332" class="item small last"></div>
+ <div data-offset-x="262" class="item small first"></div>
+ <div data-offset-x="190" class="item small last"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-007.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-007.html
new file mode 100644
index 00000000000..f8477bea50c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-007.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/">
+<style>
+.item {
+ inline-size: 40px;
+ box-sizing: border-box;
+ border: solid 5px hotpink;
+ line-height: 0;
+ margin-block-start: 3px;
+ margin-block-end: 5px;
+}
+.small {
+ width: 20px;
+ height: 20px;
+ border: solid 5px cyan;
+}
+.first {
+ align-self: baseline;
+}
+.last {
+ align-self: last baseline;
+}
+.item.small.first {
+ block-size: 50px;
+}
+.item.small.last {
+ block-size: 100px;
+}
+span {
+ width: 20px;
+ height: 20px;
+ box-sizing: border-box;
+ border: solid 5px orange;
+ display: inline-block;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.item')">
+
+<div style="position: relative; display: grid; grid-template: auto auto auto / 100px 100px 100px 100px;">
+ <div style="display: grid;
+ gap: 10px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 3;
+ grid-template: subgrid / subgrid;
+ margin-block-start: 5px; margin-block-end: 10px;
+ border: solid black 5px;
+ padding-block-start: 10px; padding-block-end: 20px;">
+ <div style="display: grid;
+ gap: 20px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 2;
+ grid-template: subgrid / subgrid;
+ margin-block-start: 3px; margin-block-end: 7px;
+ border: solid black 5px;
+ padding-block-start: 5px; padding-block-end: 10px;">
+ <div data-offset-y="36" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-y="58" class="item last">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-y="151" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-y="181" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-y="291" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-y="321" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-y="11" class="item small first"></div>
+ <div data-offset-y="3" class="item small last"></div>
+ <div data-offset-y="126" class="item small first"></div>
+ <div data-offset-y="126" class="item small last"></div>
+ <div data-offset-y="266" class="item small first"></div>
+ <div data-offset-y="266" class="item small last"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-008.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-008.html
new file mode 100644
index 00000000000..1ef23599f95
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-008.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/">
+<style>
+.item {
+ inline-size: 40px;
+ box-sizing: border-box;
+ border: solid 5px hotpink;
+ line-height: 0;
+ margin-block-start: 3px;
+ margin-block-end: 5px;
+}
+.small {
+ width: 20px;
+ height: 20px;
+ border: solid 5px cyan;
+}
+.first {
+ align-self: baseline;
+}
+.last {
+ align-self: last baseline;
+}
+.item.small.first {
+ block-size: 50px;
+}
+.item.small.last {
+ block-size: 100px;
+}
+span {
+ width: 20px;
+ height: 20px;
+ box-sizing: border-box;
+ border: solid 5px orange;
+ display: inline-block;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.item')">
+
+<div style="writing-mode: vertical-rl; width: 600px; position: relative; display: grid; grid-template: auto auto auto / 100px 100px 100px 100px;">
+ <div style="display: grid;
+ gap: 10px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 3;
+ grid-template: subgrid / subgrid;
+ margin-block-start: 5px; margin-block-end: 10px;
+ border: solid black 5px;
+ padding-block-start: 10px; padding-block-end: 20px;">
+ <div style="display: grid;
+ gap: 20px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 2;
+ grid-template: subgrid / subgrid;
+ margin-block-start: 3px; margin-block-end: 7px;
+ border: solid black 5px;
+ padding-block-start: 5px; padding-block-end: 10px;">
+ <div data-offset-x="514" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="428" class="item last">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="325" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="234" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-x="131" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="40" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-x="524" class="item small first"></div>
+ <div data-offset-x="393" class="item small last"></div>
+ <div data-offset-x="335" class="item small first"></div>
+ <div data-offset-x="199" class="item small last"></div>
+ <div data-offset-x="141" class="item small first"></div>
+ <div data-offset-x="5" class="item small last"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-009.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-009.html
new file mode 100644
index 00000000000..b7bf46d8745
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-009.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/">
+<style>
+.item {
+ writing-mode: vertical-rl;
+ block-size: 80px;
+ box-sizing: border-box;
+ border: solid 5px hotpink;
+ line-height: 0;
+ margin-block-start: 10px;
+ margin-block-end: 15px;
+}
+.small {
+ width: 20px;
+ height: 20px;
+ border: solid 5px cyan;
+}
+.first {
+ justify-self: baseline;
+}
+.last {
+ justify-self: last baseline;
+}
+span {
+ width: 20px;
+ height: 20px;
+ box-sizing: border-box;
+ border: solid 5px orange;
+ display: inline-block;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.item')">
+
+<div style="width: 600px; position: relative; display: grid; grid-auto-flow: column; grid-template: 100px 100px 100px 100px / auto auto auto;">
+ <div style="display: grid;
+ grid-auto-flow: column;
+ gap: 10px;
+ grid-column: 1 / span 3;
+ grid-row: 1 / span 2;
+ grid-template: subgrid / subgrid;
+ margin-inline-start: 5px; margin-inline-end: 10px;
+ border: solid black 5px;
+ padding-inline-start: 10px; padding-inline-end: 20px;">
+ <div style="display: grid;
+ direction: rtl;
+ grid-auto-flow: column;
+ gap: 20px;
+ grid-column: 1 / span 2;
+ grid-row: 1 / span 2;
+ grid-template: subgrid / subgrid;
+ margin-inline-start: 3px; margin-inline-end: 7px;
+ border: solid black 5px;
+ padding-inline-start: 5px; padding-inline-end: 10px;">
+ <div data-offset-x="292" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="237" class="item last">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="112" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="57" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-x="475" class="item first">
+ <span></span><br><span></span>
+ </div>
+ <div data-offset-x="420" class="item last">
+ <span></span><br><span></span>
+ </div>
+ </div>
+ <div data-offset-x="177" class="item small first"></div>
+ <div data-offset-x="102" class="item small last"></div>
+ <div data-offset-x="357" class="item small first"></div>
+ <div data-offset-x="282" class="item small last"></div>
+ <div data-offset-x="540" class="item small first"></div>
+ <div data-offset-x="465" class="item small last"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html b/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html
index 053ab85422f..801cb828c50 100644
--- a/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html
+++ b/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html
@@ -309,6 +309,7 @@ function test_image_set_parsing() {
test_valid_value_variants('border-image-source', 'image-set(url("example.png") 1x)', 'image-set(url("example.png") 1x)');
test_valid_value_variants('border-image-source', 'image-set(url("example.png") 1x, "example.png" 3x)', 'image-set(url("example.png") 1x, url("example.png") 3x)');
+ test_invalid_value_variants('background-image', 'image-set(url("example.png") -20x)');
test_invalid_value_variants('background-image', "image-set(none, url(example.png) 1x)");
test_invalid_value_variants('background-image', "image-set()");
test_invalid_value_variants('background-image', "image-set('example.jpeg' 92pid url(example.png) 1x)");
diff --git a/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html b/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html
index 19a251ef0fd..a24b349c5e7 100644
--- a/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html
@@ -14,6 +14,6 @@
</style>
</head>
<body>
- <div/>
+ <div></div>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html b/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html
index d98ddf8de57..12f0f600079 100644
--- a/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html
+++ b/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html
@@ -21,6 +21,6 @@
</style>
</head>
<body>
- <div class="mask-by-data-url"/>
+ <div class="mask-by-data-url"></div>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html
index f2d2c4a8d14..c70e18c47a3 100644
--- a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html
@@ -27,9 +27,13 @@ test_valid_value("mask-position", "right 40%");
test_valid_value("mask-position", "top");
test_valid_value("mask-position", "top center", "top");
test_valid_value("mask-position", "center", "center");
-
test_valid_value("mask-position", "bottom left, right 20%", "left bottom, right 20%");
test_valid_value("mask-position", "top, center, left");
+test_valid_value("mask-position", "20% 0%");
+test_valid_value("mask-position", "0% 0%");
+test_valid_value("mask-position", "0%", ["0%", "0% center"]);
+test_valid_value("mask-position", "0% center", ["0%", "0% center"]);
+test_valid_value("mask-position", "center 0%");
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html
index 4b2ebfb7c78..e0646444d48 100644
--- a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html
+++ b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html
@@ -63,7 +63,7 @@ test_valid_value('mask', 'none alpha', 'alpha');
test_shorthand_value('mask', 'none', {
'mask-image': 'none',
- 'mask-position': '0%',
+ 'mask-position': '0% 0%',
'mask-size': 'auto',
'mask-repeat': 'repeat',
'mask-origin': 'border-box',
@@ -73,7 +73,7 @@ test_shorthand_value('mask', 'none', {
})
test_shorthand_value('mask', 'none, linear-gradient(to left bottom, red, blue) padding-box', {
'mask-image': 'none, linear-gradient(to left bottom, red, blue)',
- 'mask-position': '0%, 0%',
+ 'mask-position': '0% 0%, 0% 0%',
'mask-size': 'auto, auto',
'mask-repeat': 'repeat, repeat',
'mask-origin': 'border-box, padding-box',
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html
new file mode 100644
index 00000000000..b1db1a8cb71
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Test Reference</title>
+ <style>
+ .line {
+ display: flex;
+ }
+
+ .container {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+
+ block-size: 200px;
+ inline-size: 200px;
+ margin: 10px;
+ background: deepskyblue;
+ }
+
+ .content {
+ inline-size: 100%;
+ block-size: 200%;
+ background: lightsalmon;
+ }
+ </style>
+
+ <div class="line">
+ <div id="auto-auto" class="container" style="overflow-y: auto; scrollbar-gutter: stable both-edges">
+ <div class="content"></div>
+ </div>
+
+ <div id="scroll-auto" class="container" style="overflow-y: scroll; scrollbar-gutter: stable both-edges">
+ <div class="content"></div>
+ </div>
+
+ <div id="hidden-auto" class="container" style="overflow-y: hidden; scrollbar-gutter: stable both-edges">
+ <div class="content"></div>
+ </div>
+ </div>
+
+ <div class="line">
+ <div id="auto-stable" class="container" style="overflow-y: auto; scrollbar-gutter: auto">
+ <div class="content"></div>
+ </div>
+
+ <div id="scroll-stable" class="container" style="overflow-y: scroll; scrollbar-gutter: auto">
+ <div class="content"></div>
+ </div>
+
+ <div id="hidden-stable" class="container" style="overflow-y: hidden; scrollbar-gutter: auto">
+ <div class="content"></div>
+ </div>
+ </div>
+
+ <div class="line">
+ <div id="hidden-stable-both" class="container" style="overflow-y: auto; scrollbar-gutter: stable">
+ <div class="content"></div>
+ </div>
+
+ <div id="hidden-stable-both" class="container" style="overflow-y: scroll; scrollbar-gutter: stable">
+ <div class="content"></div>
+ </div>
+
+ <div id="hidden-stable-both" class="container" style="overflow-y: hidden; scrollbar-gutter: stable">
+ <div class="content"></div>
+ </div>
+ </div>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002.html
new file mode 100644
index 00000000000..a830e6b680b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+ <meta charset="utf-8">
+ <title>CSS Overflow: test scrollbar-gutter dynamic update</title>
+ <link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev">
+ <link rel="help" href="https://drafts.csswg.org/css-overflow-4/#scrollbar-gutter-property">
+ <link rel="match" href="scrollbar-gutter-dynamic-002-ref.html">
+ <script src="/common/reftest-wait.js"></script>
+
+ <style>
+ .line {
+ display: flex;
+ }
+
+ .container {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+
+ block-size: 200px;
+ inline-size: 200px;
+ margin: 10px;
+ background: deepskyblue;
+ }
+
+ .content {
+ inline-size: 100%;
+ block-size: 200%;
+ background: lightsalmon;
+ }
+ </style>
+
+ <div class="line">
+ <div id="auto-auto" class="container" style="overflow-y: auto; scrollbar-gutter: auto">
+ <div class="content"></div>
+ </div>
+
+ <div id="scroll-auto" class="container" style="overflow-y: scroll; scrollbar-gutter: auto">
+ <div class="content"></div>
+ </div>
+
+ <div id="hidden-auto" class="container" style="overflow-y: hidden; scrollbar-gutter: auto">
+ <div class="content"></div>
+ </div>
+ </div>
+
+ <div class="line">
+ <div id="auto-stable" class="container" style="overflow-y: auto; scrollbar-gutter: stable">
+ <div class="content"></div>
+ </div>
+
+ <div id="scroll-stable" class="container" style="overflow-y: scroll; scrollbar-gutter: stable">
+ <div class="content"></div>
+ </div>
+
+ <div id="hidden-stable" class="container" style="overflow-y: hidden; scrollbar-gutter: stable">
+ <div class="content"></div>
+ </div>
+ </div>
+
+ <div class="line">
+ <div id="auto-stable-both" class="container" style="overflow-y: auto; scrollbar-gutter: stable both-edges">
+ <div class="content"></div>
+ </div>
+
+ <div id="scroll-stable-both" class="container" style="overflow-y: scroll; scrollbar-gutter: stable both-edges">
+ <div class="content"></div>
+ </div>
+
+ <div id="hidden-stable-both" class="container" style="overflow-y: hidden; scrollbar-gutter: stable both-edges">
+ <div class="content"></div>
+ </div>
+ </div>
+<script>
+ requestAnimationFrame(() => requestAnimationFrame(() => {
+ document.getElementById('auto-auto').style.scrollbarGutter = 'stable both-edges';
+ document.getElementById('scroll-auto').style.scrollbarGutter = 'stable both-edges';
+ document.getElementById('hidden-auto').style.scrollbarGutter = 'stable both-edges';
+ document.getElementById('auto-stable').style.scrollbarGutter = 'auto';
+ document.getElementById('scroll-stable').style.scrollbarGutter = 'auto';
+ document.getElementById('hidden-stable').style.scrollbarGutter = 'auto';
+ document.getElementById('auto-stable-both').style.scrollbarGutter = 'stable';
+ document.getElementById('scroll-stable-both').style.scrollbarGutter = 'stable';
+ document.getElementById('hidden-stable-both').style.scrollbarGutter = 'stable';
+ takeScreenshot();
+ }));
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop-entry.html b/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop-entry.html
new file mode 100644
index 00000000000..89299e3a8ea
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop-entry.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>CSS Position Test: overlay transition with ::backdrop during entry animation</title>
+<link rel="help" href="https://drafts.csswg.org/css-position-4/#overlay">
+<link rel="match" href="green-ref.html">
+<link rel="author" href="mailto:jarhar@chromium.org">
+<style>
+ body {
+ background-color: green;
+ }
+ [popover] {
+ display: block;
+ visibility: hidden;
+ transition-delay: 2s;
+ transition-property: overlay;
+ transition-duration: 2s;
+ }
+ [popover]::backdrop {
+ background-color: blue;
+ }
+</style>
+<div popover id="foo"></div>
+<script>
+ foo.offsetTop;
+ foo.showPopover();
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop.html b/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop.html
new file mode 100644
index 00000000000..b730e433465
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>CSS Position Test: overlay transition with ::backdrop</title>
+<link rel="help" href="https://drafts.csswg.org/css-position-4/#overlay">
+<link rel="match" href="green-ref.html">
+<link rel="author" href="mailto:jarhar@chromium.org">
+<style>
+ [popover] {
+ display: block;
+ visibility: hidden;
+ transition: overlay 60s step-end;
+ }
+ [popover]::backdrop {
+ background-color: green;
+ }
+</style>
+<div popover id="foo"></div>
+<script>
+ foo.showPopover();
+ foo.hidePopover();
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html b/tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html
index 67924fb01cd..2dee8c2e640 100644
--- a/tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html
+++ b/tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html
@@ -19,7 +19,7 @@
animation: myanim 10s infinite;
}
</style>
- <slot />
+ <slot></slot>
`;
assert_equals(document.getElementById('in-document').getAnimations().length, 1);
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html b/tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html
index c51696e4833..59b71b0ee10 100644
--- a/tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html
+++ b/tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html
@@ -22,12 +22,12 @@
// <my-list>
// <:shadow>
// <style>::slotted(my-item) { color: blue; }</style>
-// <slot/>
+// <slot></slot>
// </:shadow>
// <my-item style="color: green;">
// <:shadow>
// <style>:host { color: yellow; }</style>
-// <slot/>
+// <slot></slot>
// </:shadow>
// ITEM
// </my-item>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html b/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html
index e1a91952d70..f2b33ae4947 100644
--- a/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html
+++ b/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html
@@ -14,7 +14,7 @@
<script>
function attachShadowWithSlottedStyle(host, styleString) {
var root = host.attachShadow({mode:"open"});
- root.innerHTML = "<style>"+styleString+"</style><slot/>";
+ root.innerHTML = "<style>"+styleString+"</style><slot></slot>";
}
attachShadowWithSlottedStyle(host1, "::slotted(span)::before { content: 'PASS' }");
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html
index da48c6ce25e..9a0190506e4 100644
--- a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html
@@ -41,6 +41,10 @@
</fieldset>
<script>
let scroller = document.getElementById("scroller");
+ // fieldsets' clientHeight and scrollHeight can be affected by the presence of
+ // a scrollbar which has been anecdotally measured to be 15 on several
+ // platforms.
+ const scrollbar_width = 15;
const max_vertical_scroll_offset = scroller.scrollHeight -
scroller.clientHeight;
// The fieldset's width is set based on the size of its contents:
@@ -56,7 +60,6 @@
expectation: {
scrollTop: 100,
msg: "scroll-start: <length> sets initial scroll position",
- approx: false
}
},
{
@@ -64,7 +67,6 @@
expectation: {
scrollTop: 0.25 * max_vertical_scroll_offset,
msg: "scroll-start: <percent> sets initial scroll position",
- approx: true
}
},
{
@@ -72,7 +74,6 @@
expectation: {
scrollTop: 50,
msg: "scroll-start: <calc> sets initial scroll position",
- approx: false
}
},
{
@@ -80,7 +81,6 @@
expectation: {
scrollTop: 0,
msg: "scroll-start: start sets initial scroll position",
- approx: false
}
},
{
@@ -88,7 +88,6 @@
expectation: {
scrollTop: 0.5 * max_vertical_scroll_offset,
msg: "scroll-start: center sets initial scroll position",
- approx: true
}
},
{
@@ -96,7 +95,6 @@
expectation: {
scrollTop: max_vertical_scroll_offset,
msg: "scroll-start: end sets initial scroll position",
- approx: false
}
},
{
@@ -104,7 +102,6 @@
expectation: {
scrollTop: 0,
msg: "scroll-start: top sets initial scroll position",
- approx: false
}
},
{
@@ -112,7 +109,6 @@
expectation: {
scrollTop: max_vertical_scroll_offset,
msg: "scroll-start: bottom sets initial scroll position",
- approx: false
}
},
{
@@ -120,7 +116,6 @@
expectation: {
scrollTop: max_vertical_scroll_offset,
msg: "scroll-start is clamped",
- approx: false
}
}
];
@@ -139,13 +134,11 @@
async function test_scroll_start(scroll_start, expectation) {
await resetScroller(scroll_start);
- if (expectation.approx) {
- assert_approx_equals(scroller.scrollTop, expectation.scrollTop, 1, expectation.msg);
- } else {
- assert_equals(scroller.scrollTop, expectation.scrollTop, expectation.msg);
- }
+ assert_approx_equals(scroller.scrollTop, expectation.scrollTop,
+ scrollbar_width, expectation.msg);
}
+
promise_test(async () => {
for (let test_case of test_cases) {
await test_scroll_start(test_case.scroll_start,
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-001.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-001.html
new file mode 100644
index 00000000000..c0569909344
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-001.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-color auto on the root defers to ::-webkit-scrollbar</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ :root {
+ scrollbar-color: auto;
+ }
+
+ :root::-webkit-scrollbar {
+ display: none;
+ }
+
+ /* This is so that browsers that don't implement the WebKit prefix still pass the test */
+ @supports not selector(::-webkit-scrollbar) {
+ :root {
+ overflow: hidden;
+ }
+ }
+
+ :root,
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ #content {
+ height: 10vh;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ #expander {
+ /* force vertical scroll */
+ height: 200vh;
+ width: 300px;
+ background: gray;
+ }
+</style>
+
+<body>
+
+ <div id="content"></div>
+
+ <div id="expander"></div>
+
+ <script>
+ test(function () {
+ let root = document.documentElement;
+ let body = document.body;
+ let content = document.getElementById('content');
+
+ assert_equals(root.offsetWidth, window.innerWidth, "viewport does not show a scrollbar");
+ assert_equals(body.offsetWidth, root.offsetWidth, "body matches root");
+ assert_equals(content.offsetWidth, body.offsetWidth, "content matches body");
+ }, "scrollbar-color auto on the root defers to ::-webkit-scrollbar");
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-002.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-002.html
new file mode 100644
index 00000000000..70bfa5586d9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-002.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-color non-auto on the root overrides ::-webkit-scrollbar</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ :root {
+ scrollbar-color: yellow blue;
+ }
+
+ :root::-webkit-scrollbar {
+ display: none;
+ }
+
+ :root,
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ #content {
+ height: 10vh;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ #expander {
+ /* force vertical scroll */
+ height: 200vh;
+ width: 300px;
+ background: gray;
+ }
+</style>
+
+<body>
+
+ <div id="content"></div>
+
+ <div id="expander"></div>
+
+ <script>
+ test(function () {
+ let root = document.documentElement;
+ let body = document.body;
+ let content = document.getElementById('content');
+
+ assert_less_than(root.offsetWidth, window.innerWidth, "viewport has a scrollbar");
+ assert_equals(body.offsetWidth, root.offsetWidth, "body matches root");
+ assert_equals(content.offsetWidth, body.offsetWidth, "content matches body");
+ }, "scrollbar-color non-auto on the root overrides ::-webkit-scrollbar");
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-003.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-003.html
new file mode 100644
index 00000000000..3fb42bedeaf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-003.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-color on scrollable areas correctly interacts with ::-webkit-scrollbar on container</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ .container {
+ overflow: auto;
+ height: 200px;
+ width: 200px;
+ margin: 1px;
+ padding: 0px;
+ border: none;
+ background: deepskyblue;
+ }
+
+ .content {
+ height: 300px;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ .container.auto {
+ scrollbar-color: auto;
+ }
+
+ .container.auto::-webkit-scrollbar {
+ display: none;
+ }
+
+ /* This is so that browsers that don't implement the WebKit prefix still pass the test */
+ @supports not selector(::-webkit-scrollbar) {
+ .container.auto {
+ overflow: hidden;
+ }
+ }
+
+ .container.themed {
+ scrollbar-color: yellow blue;
+ }
+
+ .container.themed::-webkit-scrollbar {
+ display: none;
+ }
+</style>
+<script>
+ function performTest() {
+ setup({ explicit_done: true });
+
+ test(function () {
+ let container = document.getElementById('container_auto');
+ let content = document.getElementById('content_auto');
+ assert_equals(container.scrollWidth, 200, "auto scrollWidth");
+ assert_equals(container.clientWidth, 200, "auto clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "auto offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "auto clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "auto offsetWidth");
+ }, "scrollbar-color auto defers to ::-webkit-scrollbar");
+
+ test(function () {
+ let container = document.getElementById('container_themed');
+ let content = document.getElementById('content_themed');
+ assert_less_than(container.scrollWidth, container.offsetWidth, "themed scrollWidth");
+ assert_less_than(container.clientWidth, container.offsetWidth, "themed clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "themed offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "themed clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "themed offsetWidth");
+ }, "scrollbar-color yellow blue overrides ::-webkit-scrollbar");
+
+ done();
+ }
+</script>
+
+<body onload="performTest()">
+
+ Test scrollbar-color: vertical scrollbar
+
+ <div class="container auto" id="container_auto">
+ <div class="content" id="content_auto">auto</div>
+ </div>
+
+ <div class="container themed" id="container_themed">
+ <div class="content" id="content_themed">themed</div>
+ </div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-004.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-004.html
new file mode 100644
index 00000000000..5932cc5d4e1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-004.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-color on body correctly interacts with ::-webkit-scrollbar</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ .container {
+ overflow: auto;
+ height: 200px;
+ width: 200px;
+ margin: 1px;
+ padding: 0px;
+ border: none;
+ background: deepskyblue;
+ }
+
+ .content {
+ height: 300px;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ body {
+ scrollbar-color: yellow blue;
+ }
+
+ ::-webkit-scrollbar {
+ display: none;
+ }
+</style>
+<script>
+ function performTest() {
+ setup({ explicit_done: true });
+
+ test(function () {
+ let container = document.getElementById('container_themed');
+ let content = document.getElementById('content_themed');
+ assert_less_than(container.scrollWidth, container.offsetWidth, "themed scrollWidth");
+ assert_less_than(container.clientWidth, container.offsetWidth, "themed clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "themed offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "themed clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "themed offsetWidth");
+ }, "scrollbar-color yellow blue on body overrides ::-webkit-scrollbar");
+
+ done();
+ }
+</script>
+
+<body onload="performTest()">
+
+ Test scrollbar-color: vertical scrollbar
+
+ <div class="container themed" id="container_themed">
+ <div class="content" id="content_themed">themed</div>
+ </div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-005.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-005.html
new file mode 100644
index 00000000000..52d0027fba6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-005.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-color on body correctly interacts with ::-webkit-scrollbar on scrollable area</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ .container {
+ overflow: auto;
+ height: 200px;
+ width: 200px;
+ margin: 1px;
+ padding: 0px;
+ border: none;
+ background: deepskyblue;
+ }
+
+ .content {
+ height: 300px;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ body {
+ scrollbar-color: yellow blue;
+ }
+
+ .container::-webkit-scrollbar {
+ display: none;
+ }
+</style>
+<script>
+ function performTest() {
+ setup({ explicit_done: true });
+
+ test(function () {
+ let container = document.getElementById('container_themed');
+ let content = document.getElementById('content_themed');
+ assert_less_than(container.scrollWidth, container.offsetWidth, "themed scrollWidth");
+ assert_less_than(container.clientWidth, container.offsetWidth, "themed clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "themed offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "themed clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "themed offsetWidth");
+ }, "scrollbar-color yellow blue on body overrides ::-webkit-scrollbar on scrollable area");
+
+ done();
+ }
+</script>
+
+<body onload="performTest()">
+
+ Test scrollbar-color: vertical scrollbar
+
+ <div class="container themed" id="container_themed">
+ <div class="content" id="content_themed">themed</div>
+ </div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-010.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-010.html
new file mode 100644
index 00000000000..ea117030673
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-010.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-width auto on the root defers to ::-webkit-scrollbar on the root</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ :root {
+ scrollbar-width: auto;
+ }
+
+ :root::-webkit-scrollbar {
+ display: none;
+ }
+
+ /* This is so that browsers that don't implement the WebKit prefix still pass the test */
+ @supports not selector(::-webkit-scrollbar) {
+ :root {
+ overflow: hidden;
+ }
+ }
+
+ :root,
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ #content {
+ height: 10vh;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ #expander {
+ /* force vertical scroll */
+ height: 200vh;
+ width: 300px;
+ background: gray;
+ }
+</style>
+
+<body>
+
+ <div id="content"></div>
+
+ <div id="expander"></div>
+
+ <script>
+ test(function () {
+ let root = document.documentElement;
+ let body = document.body;
+ let content = document.getElementById('content');
+
+ assert_equals(root.offsetWidth, window.innerWidth, "viewport does not show a scrollbar");
+ assert_equals(body.offsetWidth, root.offsetWidth, "body matches root");
+ assert_equals(content.offsetWidth, body.offsetWidth, "content matches body");
+ }, "scrollbar-width auto on the root defers to ::-webkit-scrollbar");
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-011.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-011.html
new file mode 100644
index 00000000000..a5f60dc28b0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-011.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-width thin on the root overrides ::-webkit-scrollbar on the root</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ :root {
+ scrollbar-width: thin;
+ }
+
+ :root::-webkit-scrollbar {
+ display: none;
+ }
+
+ :root,
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ #content {
+ height: 10vh;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ #expander {
+ /* force vertical scroll */
+ height: 200vh;
+ width: 300px;
+ background: gray;
+ }
+</style>
+
+<body>
+
+ <div id="content"></div>
+
+ <div id="expander"></div>
+
+ <script>
+ test(function () {
+ let root = document.documentElement;
+ let body = document.body;
+ let content = document.getElementById('content');
+
+ assert_less_than(root.offsetWidth, window.innerWidth, "viewport has a scrollbar");
+ assert_equals(body.offsetWidth, root.offsetWidth, "body matches root");
+ assert_equals(content.offsetWidth, body.offsetWidth, "content matches body");
+ }, "scrollbar-width thin on the root overrides ::-webkit-scrollbar");
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-012.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-012.html
new file mode 100644
index 00000000000..a685d6c05b8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-012.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-width none on the root overrides ::-webkit-scrollbar on the root</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ :root {
+ scrollbar-width: none;
+ }
+
+ :root::-webkit-scrollbar {
+ width: 20px;
+ background-color: lightgray;
+ }
+
+ :root,
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ #content {
+ height: 10vh;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ #expander {
+ /* force vertical scroll */
+ height: 200vh;
+ width: 300px;
+ background: gray;
+ }
+</style>
+
+<body>
+
+ <div id="content"></div>
+
+ <div id="expander"></div>
+
+ <script>
+ test(function () {
+ let root = document.documentElement;
+ let body = document.body;
+ let content = document.getElementById('content');
+
+ assert_equals(root.offsetWidth, window.innerWidth, "viewport does not show a scrollbar");
+ assert_equals(body.offsetWidth, root.offsetWidth, "body matches root");
+ assert_equals(content.offsetWidth, body.offsetWidth, "content matches body");
+ }, "scrollbar-width none on the root overrides ::-webkit-scrollbar");
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-013.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-013.html
new file mode 100644
index 00000000000..f6460a4797a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-013.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-width thin on the root overridess ::-webkit-scrollbar</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ :root {
+ scrollbar-width: thin;
+ }
+
+ ::-webkit-scrollbar {
+ display: none;
+ }
+
+ :root,
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ #content {
+ height: 10vh;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ #expander {
+ /* force vertical scroll */
+ height: 200vh;
+ width: 300px;
+ background: gray;
+ }
+</style>
+
+<body>
+
+ <div id="content"></div>
+
+ <div id="expander"></div>
+
+ <script>
+ test(function () {
+ let root = document.documentElement;
+ let body = document.body;
+ let content = document.getElementById('content');
+
+ assert_less_than(root.offsetWidth, window.innerWidth, "viewport has a scrollbar");
+ assert_equals(body.offsetWidth, root.offsetWidth, "body matches root");
+ assert_equals(content.offsetWidth, body.offsetWidth, "content matches body");
+ }, "scrollbar-width thin on the root overridess ::-webkit-scrollbar");
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-014.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-014.html
new file mode 100644
index 00000000000..f737bc36602
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-014.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-width thin on the body doesn't override ::-webkit-scrollbar on root</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ body {
+ scrollbar-width: thin;
+ }
+
+ :root::-webkit-scrollbar {
+ display: none;
+ }
+
+ :root,
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ #content {
+ height: 10vh;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ #expander {
+ /* force vertical scroll */
+ height: 200vh;
+ width: 300px;
+ background: gray;
+ }
+</style>
+
+<body>
+
+ <div id="content"></div>
+
+ <div id="expander"></div>
+
+ <script>
+ test(function () {
+ let root = document.documentElement;
+ let body = document.body;
+ let content = document.getElementById('content');
+
+ assert_equals(root.offsetWidth, window.innerWidth, "viewport does not show a scrollbar");
+ assert_equals(body.offsetWidth, root.offsetWidth, "body matches root");
+ assert_equals(content.offsetWidth, body.offsetWidth, "content matches body");
+ }, "scrollbar-width thin on the body doesn't override ::-webkit-scrollbar on root");
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-015.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-015.html
new file mode 100644
index 00000000000..88a6af27bad
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-015.html
@@ -0,0 +1,87 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-width on scrollable areas correctly interacts with ::-webkit-scrollbar</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ .container {
+ overflow: auto;
+ height: 200px;
+ width: 200px;
+ margin: 1px;
+ padding: 0px;
+ border: none;
+ background: deepskyblue;
+ }
+
+ .content {
+ height: 300px;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ .container.auto {
+ scrollbar-width: auto;
+ }
+
+ /* This is so that browsers that don't implement the WebKit prefix still pass the test */
+ @supports not selector(::-webkit-scrollbar) {
+ .container.auto {
+ overflow: hidden;
+ }
+ }
+
+ ::-webkit-scrollbar {
+ display: none;
+ }
+
+ .container.thin {
+ scrollbar-width: thin;
+ }
+</style>
+<script>
+ function performTest() {
+ setup({ explicit_done: true });
+
+ // ltr
+
+ test(function () {
+ let container = document.getElementById('container_auto');
+ let content = document.getElementById('content_auto');
+ assert_equals(container.scrollWidth, 200, "auto scrollWidth");
+ assert_equals(container.clientWidth, 200, "auto clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "auto offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "auto clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "auto offsetWidth");
+ }, "scrollbar-width auto defers to ::-webkit-scrollbar");
+
+ test(function () {
+ let container = document.getElementById('container_thin');
+ let content = document.getElementById('content_thin');
+ assert_less_than(container.scrollWidth, container.offsetWidth, "thin scrollWidth");
+ assert_less_than(container.clientWidth, container.offsetWidth, "thin clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "thin offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "thin clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "thin offsetWidth");
+ }, "scrollbar-width thin overrides ::-webkit-scrollbar");
+
+ done();
+ }
+</script>
+
+<body onload="performTest()">
+
+ Test scrollbar-width: vertical scrollbar
+
+ <div class="container auto" id="container_auto">
+ <div class="content" id="content_auto">auto</div>
+ </div>
+
+ <div class="container thin" id="container_thin">
+ <div class="content" id="content_thin">thin</div>
+ </div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-016.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-016.html
new file mode 100644
index 00000000000..7d64131743f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-016.html
@@ -0,0 +1,114 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Scrollbars: scrollbar-width on scrollable areas correctly interacts with ::-webkit-scrollbar on container</title>
+<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
+<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<style>
+ .container {
+ overflow: auto;
+ height: 200px;
+ width: 200px;
+ margin: 1px;
+ padding: 0px;
+ border: none;
+ background: deepskyblue;
+ }
+
+ .content {
+ height: 300px;
+ width: 100%;
+ background: lightsalmon;
+ }
+
+ .container.auto {
+ scrollbar-width: auto;
+ }
+
+ .container.auto::-webkit-scrollbar {
+ display: none;
+ }
+
+ /* This is so that browsers that don't implement the WebKit prefix still pass the test */
+ @supports not selector(::-webkit-scrollbar) {
+ .container.auto {
+ overflow: hidden;
+ }
+ }
+
+ .container.thin {
+ scrollbar-width: thin;
+ }
+
+ .container.thin::-webkit-scrollbar {
+ display: none;
+ }
+
+ .container.none {
+ scrollbar-width: none;
+ }
+
+ .container.none::-webkit-scrollbar {
+ width: 20px;
+ background-color: lightgray;
+ }
+</style>
+<script>
+ function performTest() {
+ setup({ explicit_done: true });
+
+ // ltr
+
+ test(function () {
+ let container = document.getElementById('container_auto');
+ let content = document.getElementById('content_auto');
+ assert_equals(container.scrollWidth, 200, "auto scrollWidth");
+ assert_equals(container.clientWidth, 200, "auto clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "auto offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "auto clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "auto offsetWidth");
+ }, "scrollbar-width auto defers to ::-webkit-scrollbar");
+
+ test(function () {
+ let container = document.getElementById('container_thin');
+ let content = document.getElementById('content_thin');
+ assert_less_than(container.scrollWidth, container.offsetWidth, "thin scrollWidth");
+ assert_less_than(container.clientWidth, container.offsetWidth, "thin clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "thin offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "thin clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "thin offsetWidth");
+ }, "scrollbar-width thin overrides ::-webkit-scrollbar");
+
+ test(function () {
+ let container = document.getElementById('container_none');
+ let content = document.getElementById('content_none');
+ assert_equals(container.scrollWidth, 200, "none scrollWidth");
+ assert_equals(container.clientWidth, 200, "none clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "none offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "none clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "none offsetWidth");
+ }, "scrollbar-width none overrides ::-webkit-scrollbar");
+
+ done();
+ }
+</script>
+
+<body onload="performTest()">
+
+ Test scrollbar-width: vertical scrollbar
+
+ <div class="container auto" id="container_auto">
+ <div class="content" id="content_auto">auto</div>
+ </div>
+
+ <div class="container thin" id="container_thin">
+ <div class="content" id="content_thin">thin</div>
+ </div>
+
+ <div class="container none" id="container_none">
+ <div class="content" id="content_none">none</div>
+ </div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel-notref.html b/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel-notref.html
new file mode 100644
index 00000000000..ba5e8d90f3e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel-notref.html
@@ -0,0 +1,2 @@
+<!doctype html>
+<div style="font: 20px monospace; -webkit-text-stroke-width: 0.5px; -webkit-text-stroke-color: lime; color: white">A</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel.html b/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel.html
new file mode 100644
index 00000000000..97cbc3f44de
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel.html
@@ -0,0 +1,5 @@
+<!doctype html>
+<title>-webkit-text-stroke-width is not snapped to device pixels</title>
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1837692">
+<link rel="mismatch" href="text-stroke-width-subpixel-notref.html">
+<div style="font: 20px monospace; -webkit-text-stroke-width: 0.1px; -webkit-text-stroke-color: lime; color: white">A</div>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html b/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html
index 00c754552fd..d94e0b7d09b 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
- <title>CSS Transforms Test: SVG presentation attribute and scale horizontally -0.5 and vertically -1.5</title>
+ <title>CSS Transforms Test: SVG presentation attribute and scale horizontally -0.5 and vertically -1.25</title>
<link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions">
@@ -20,7 +20,7 @@
<body>
<p>The test passes if you see a green square and no red.</p>
<svg>
- <rect x="-400" y="-133.333" width="400" height="133.333" fill="green" transform="scale(-0.5, -1.5)"/>
+ <rect x="-400" y="-160" width="400" height="160" fill="green" transform="scale(-0.5, -1.25)"/>
</svg>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html b/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html
index 15662267c2e..f2acf1b0c66 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
- <title>CSS Transforms Test: SVG presentation attribute and scale horizontally -1.5 and vertically -0.5</title>
+ <title>CSS Transforms Test: SVG presentation attribute and scale horizontally -1.25 and vertically -0.5</title>
<link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions">
@@ -20,7 +20,7 @@
<body>
<p>The test passes if you see a green square and no red.</p>
<svg>
- <rect x="-133.333" y="-400" width="133.333" height="400" fill="green" transform="scale(-1.5, -0.5)"/>
+ <rect x="-160" y="-400" width="160" height="400" fill="green" transform="scale(-1.25, -0.5)"/>
</svg>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht b/tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht
index 8d9b610bf03..bcb28dbd516 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht
+++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht
@@ -5,7 +5,7 @@
<link rel="author" title="Apple Inc." href="http://www.apple.com/"/>
<link rel="help" href="http://www.w3.org/TR/css-transforms-2/#3d-transform-rendering"/>
<link rel="match" href="reference/transform-3d-rotateY-stair-above-ref-001.xht"/>
- <meta name="fuzzy" content="maxDifference=0-14;totalPixels=0-80" />
+ <meta name="fuzzy" content="maxDifference=0-20;totalPixels=0-80" />
<meta name="assert" content="A rotateY transform with perspective
should result in a trapezoid."/>
<style type="text/css"><![CDATA[
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html
index fa78ece016d..edff11c8a2c 100644
--- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html
@@ -29,4 +29,14 @@ runListValuedPropertyTests('animation-duration', [
},
]);
+test((t) => {
+ let div = document.createElement('div');
+ t.add_cleanup(() => {
+ div.remove();
+ });
+ document.body.append(div);
+ let actual = div.computedStyleMap().get('animation-duration').toString();
+ assert_equals(actual, 'auto');
+}, 'Computed value of animation-duration is auto');
+
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html
index f050da2839e..dfb6e087183 100644
--- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html
@@ -13,12 +13,35 @@
<script>
'use strict';
-runPropertyTests('white-space', [
- { syntax: 'normal'},
- { syntax: 'pre' },
+runPropertyTests('white-space-collapse', [
+ { syntax: 'collapse'},
+ { syntax: 'discard' },
+ { syntax: 'preserve' },
+ { syntax: 'preserve-breaks' },
+ { syntax: 'preserve-spaces' },
+ { syntax: 'break-spaces' },
+]);
+
+runPropertyTests('text-wrap', [
+ { syntax: 'wrap'},
{ syntax: 'nowrap' },
- { syntax: 'pre-wrap' },
- { syntax: 'pre-line' },
+ { syntax: 'balance' },
+ { syntax: 'stable' },
+ { syntax: 'pretty' },
]);
+runPropertyTests('white-space-trim', [
+ { syntax: 'none'},
+ { syntax: 'discard-before' },
+ { syntax: 'discard-after' },
+ { syntax: 'discard-inner' },
+]);
+
+runUnsupportedPropertyTests('white-space-trim', [
+ 'discard-before discard-after',
+ 'discard-before discard-inner',
+ 'discard-after discard-inner',
+ 'discard-before discard-after discard-inner'
+])
+
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html
new file mode 100644
index 00000000000..44579ac2921
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/#the-button-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Button appearance native writing mode horizontal</title>
+<meta charset="utf-8">
+<link rel="mismatch" href="button-appearance-none-horizontal.optional.html">
+<link rel="mismatch" href="button-appearance-native-vertical.optional.html">
+<link rel="mismatch" href="button-appearance-none-vertical.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The button element below should match the correct writing mode.</p>
+<button style="writing-mode: horizontal-tb"></button>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html
new file mode 100644
index 00000000000..3a0c61b4902
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/#the-button-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Button appearance native writing mode vertical</title>
+<meta charset="utf-8">
+<link rel="mismatch" href="button-appearance-none-vertical.optional.html">
+<link rel="mismatch" href="button-appearance-native-horizontal.optional.html">
+<link rel="mismatch" href="button-appearance-none-horizontal.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The button element below should match the correct writing mode.</p>
+<button style="writing-mode: vertical-rl"></button>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html
new file mode 100644
index 00000000000..2679c6f04d7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/#the-button-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Button appearance none writing mode horizontal</title>
+<meta charset="utf-8">
+<link rel="mismatch" href="button-appearance-native-horizontal.optional.html">
+<link rel="mismatch" href="button-appearance-none-vertical.optional.html">
+<link rel="mismatch" href="button-appearance-native-vertical.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The button element below should match the correct writing mode.</p>
+<button style="writing-mode: horizontal-tb; appearance: none;"></button>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html
new file mode 100644
index 00000000000..b37565a4099
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/#the-button-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Button appearance none writing mode vertical</title>
+<meta charset="utf-8">
+<link rel="mismatch" href="button-appearance-native-vertical.optional.html">
+<link rel="mismatch" href="button-appearance-none-horizontal.optional.html">
+<link rel="mismatch" href="button-appearance-native-horizontal.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The button element below should match the correct writing mode.</p>
+<button style="writing-mode: vertical-lr; appearance: none;"></button>
diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-load-event.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-load-event.html
new file mode 100644
index 00000000000..7062f154506
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-load-event.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Link element load event doesn't block the parser.</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="help" href="https://html.spec.whatwg.org/#link-type-stylesheet">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ let NUM_LOADS = 0;
+</script>
+<link rel="stylesheet" href="data:text/css,*{}" onload="++NUM_LOADS">
+<script>
+let t = async_test(document.title);
+window.addEventListener("load", t.step_func_done(() => {
+ assert_equals(NUM_LOADS, 2, "Load event should've fired for all links");
+}));
+t.step(function() {
+ assert_equals(document.styleSheets.length, 1, "Should expose the sheet to the OM before running script");
+ // We can't quite assert that NUM_LOADS is zero (even though it almost-always
+ // should be the case), in case the parser yields just before executing the
+ // script but after parsing the link load.
+ let loadsBefore = NUM_LOADS;
+ // Intentionally the same href as above, to test caching behavior.
+ document.write(`
+ <link rel="stylesheet" href="data:text/css,*{}" onload="++NUM_LOADS">
+ `);
+ assert_equals(document.styleSheets.length, 2, "Should expose both sheets to the OM before running second script");
+ assert_equals(NUM_LOADS, loadsBefore, "Shouldn't fire the load event sync");
+ assert_not_equals(document.styleSheets[0], document.styleSheets[1], "Should be different sheets");
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLStyleElement-load-event.html b/tests/wpt/web-platform-tests/css/cssom/HTMLStyleElement-load-event.html
new file mode 100644
index 00000000000..8d4062ed0d4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom/HTMLStyleElement-load-event.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>style elements fire load events properly</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="help" href="https://html.spec.whatwg.org/#update-a-style-block">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ let NUM_LOADS = 0;
+</script>
+<style onload="++NUM_LOADS"></style>
+<style onload="++NUM_LOADS">:root { background-color: lime }</style>
+<style onload="++NUM_LOADS">:root { background-color: lime }</style> <!-- Intentionally the same -->
+<script>
+async_test(function(t) {
+ assert_equals(document.styleSheets.length, 3, "Should expose the three stylesheets to the OM sync");
+ assert_equals(NUM_LOADS, 0, "Should not fire load event sync");
+ window.addEventListener("load", t.step_func_done(() => {
+ assert_equals(NUM_LOADS, 3, "Load event should've fired for all nodes");
+ }));
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/cssom/shorthand-values.html b/tests/wpt/web-platform-tests/css/cssom/shorthand-values.html
index b64f7e9a12f..f831cba2ca5 100644
--- a/tests/wpt/web-platform-tests/css/cssom/shorthand-values.html
+++ b/tests/wpt/web-platform-tests/css/cssom/shorthand-values.html
@@ -29,7 +29,7 @@
'border-top: 1px; border-right: 1px; border-bottom: 1px; border-left: 1px;': 'border-width: 1px; border-style: none; border-color: currentcolor;',
'border-top: 1px; border-right: 2px; border-bottom: 3px; border-left: 4px;': 'border-width: 1px 2px 3px 4px; border-style: none; border-color: currentcolor;',
'border: 1px; border-top: 2px;': 'border-width: 2px 1px 1px; border-style: none; border-color: currentcolor; border-image: none;',
- 'border: 1px; border-top: 1px !important;': 'border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-right-style: none; border-bottom-style: none; border-left-style: none; border-right-color: currentcolor; border-bottom-color: currentcolor; border-left-color: currentcolor; border-image: none; border-top-width: 1px !important; border-top-style: none !important; border-top-color: currentcolor !important;',
+ 'border: 1px; border-top: 1px !important;': 'border-right: 1px; border-bottom: 1px; border-left: 1px; border-image: none; border-top: 1px !important;',
'border: 1px; border-top-color: red;': 'border-width: 1px; border-style: none; border-color: red currentcolor currentcolor; border-image: none;',
'border: solid; border-style: dotted': 'border: dotted;',
'border-width: 1px;': 'border-width: 1px;',
diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html b/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html
index f311463877a..761df3ac087 100644
--- a/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html
+++ b/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html
@@ -18,8 +18,6 @@ div {
and
(min-height: -100px)
and
- (min-resolution: -1dpi)
- and
(min-color: -10)
and
(min-color-index: -10)
diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html b/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html
index 59a58a1d5c7..e905b39231d 100644
--- a/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html
+++ b/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html
@@ -18,8 +18,6 @@ div {
and
(not (max-height: -100px))
and
- (not (max-resolution: -1dpi))
- and
(not (max-color: -10))
and
(not (max-color-index: -10))
diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html
index 20fca4affd2..f9490bf051a 100644
--- a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html
+++ b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html
@@ -463,10 +463,10 @@ setup({ "explicit_done": true });
expression_should_be_known(feature + ": 1.5x");
expression_should_be_known(feature + ": 2.0dppx");
expression_should_be_known(feature + ": 0dpi");
- expression_should_be_known(feature + ": -3dpi");
expression_should_be_known(feature + ": 0dppx");
expression_should_be_known(feature + ": 0x");
expression_should_be_known(feature + ": calc(6x / 2)");
+ expression_should_be_unknown(feature + ": -3dpi");
}
// Find the resolution using max-resolution
diff --git a/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html b/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html
index 5b95501909c..27bdd3d0c0e 100644
--- a/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html
+++ b/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html
@@ -12,7 +12,7 @@
</head>
<style>
.parent {
- offset-path: ellipse(10% 10%);
+ offset-path: ellipse(10% 10% at 50% 50%);
}
.target {
offset-path: circle(10px);
@@ -62,7 +62,7 @@
to: 'ellipse(40% 50% at 25% 25%)',
}, [
{at: -0.3, expect: 'ellipse(1% 0% at 57.5% 57.5%)'},
- {at: 0, expect: 'ellipse(10% 10%)'},
+ {at: 0, expect: 'ellipse(10% 10% at 50% 50%)'},
{at: 0.3, expect: 'ellipse(19% 22% at 42.5% 42.5%)'},
{at: 0.6, expect: 'ellipse(28% 34% at 35% 35%)'},
{at: 1, expect: 'ellipse(40% 50% at 25% 25%)'},
diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html b/tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html
index 9848259133f..d5c5ecf3c7c 100644
--- a/tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html
+++ b/tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html
@@ -5,6 +5,7 @@
<link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property">
<link rel="match" href="offset-path-ray-contain-004-ref.html">
<meta name="assert" content="This tests that the element should be contained in ray() path circle.">
+ <meta name="fuzzy" content="maxDifference=0-20; totalPixels=0-10"/>
<style>
#container {
width: 300px;
diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html
index 6cb4d44117f..97a3c54131f 100644
--- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html
+++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html
@@ -15,7 +15,7 @@
test_valid_value("offset-anchor", "auto");
test_valid_value("offset-anchor", "left bottom");
-test_valid_value("offset-anchor", "center center");
+test_valid_value("offset-anchor", "center center", "center");
test_valid_value("offset-anchor", "right center");
test_valid_value("offset-anchor", "center top");
test_valid_value("offset-anchor", "center bottom");
diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html
index 7b5a8c16438..5bd857f62d2 100644
--- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html
+++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html
@@ -56,7 +56,45 @@ test_computed_value("offset-path", 'path("m 10 20 a 10 20 30 1 0 40 50 a 110 120
'path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")',
]);
-// url, shape and geometry-box paths are not yet supported by implementations.
+test_computed_value("offset-path", "inset(100%)");
+test_computed_value("offset-path", "inset(0 1px)", "inset(0px 1px)");
+test_computed_value("offset-path", "inset(0px 1px 2%)");
+test_computed_value("offset-path", "inset(0px 1px 2% 3em)", "inset(0px 1px 2% 48px)");
+test_computed_value("offset-path", "inset(0px round 100%)");
+test_computed_value("offset-path", "inset(0px round 0 1px)", "inset(0px round 0px 1px)");
+test_computed_value("offset-path", "inset(0px round 0px 1px 2%)");
+test_computed_value("offset-path", "inset(0px round 0px 1px 2% 3em)", "inset(0px round 0px 1px 2% 48px)");
+test_computed_value("offset-path", "inset(10px round 20% / 0px 1px 2% 3px)");
+
+test_computed_value("offset-path", "circle()");
+test_computed_value("offset-path", "circle(100px)");
+test_computed_value("offset-path", "circle(closest-side)", "circle()");
+test_computed_value("offset-path", "circle(at 50% 50%)");
+test_computed_value("offset-path", "circle(100px at 50% 50%)");
+test_computed_value("offset-path", "circle(farthest-side at center top)", "circle(farthest-side at 50% 0%)");
+test_computed_value("offset-path", "circle(4% at top right)", "circle(4% at 100% 0%)");
+
+test_computed_value("offset-path", "ellipse()");
+test_computed_value("offset-path", "ellipse(1px closest-side)");
+test_computed_value("offset-path", "ellipse(at 50% 50%)");
+test_computed_value("offset-path", "ellipse(closest-side closest-side at 10% 20%)", "ellipse(at 10% 20%)");
+test_computed_value("offset-path", "ellipse(farthest-side 4% at bottom left)", "ellipse(farthest-side 4% at 0% 100%)");
+
+test_computed_value("offset-path", "polygon(1% 2%)");
+test_computed_value("offset-path", "polygon(1px 2px, 3% 4%)");
+
+test_computed_value("offset-path", "content-box");
+test_computed_value("offset-path", "border-box");
+test_computed_value("offset-path", "view-box");
+
+test_computed_value("offset-path", "inset(10% 20% 30% 40%) border-box", "inset(10% 20% 30% 40%)");
+test_computed_value("offset-path", "fill-box ellipse(at 50% 60%)", "ellipse(at 50% 60%) fill-box");
+test_computed_value("offset-path", "ray(0deg) stroke-box");
+// Mentionted above above.
+test_computed_value("offset-path", 'path("m 20 0 h -100") view-box', [
+ 'path("M 20 0 H -80") view-box',
+ 'path("m 20 0 h -100") view-box'
+]);
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html
index 28b45db8469..0c8f3ea04cd 100644
--- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html
+++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html
@@ -18,6 +18,12 @@ test_invalid_value("offset-path", 'path("M 20 30 A 60 70 80")');
test_invalid_value("offset-path", 'path("")');
test_invalid_value("offset-path", 'path(" ")');
+// We ignore `<fill-rule>` from offset-path: path().
+// https://github.com/w3c/fxtf-drafts/issues/512
+// https://github.com/w3c/csswg-drafts/issues/7390
+test_invalid_value("offset-path", 'path(nonzero, "M 0 0 H 100")');
+test_invalid_value("offset-path", 'path(evenodd, "M 0 0 H 100")');
+
test_invalid_value("offset-path", "ray(0 sides)");
test_invalid_value("offset-path", "ray(closest-side)");
test_invalid_value("offset-path", "ray(closest-side 0deg closest-side)");
diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html
index 8a22b9420ee..be74ed08a40 100644
--- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html
+++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html
@@ -49,12 +49,42 @@ test_valid_value("offset-path",
test_valid_value("offset-path", 'url("http://www.example.com/index.html#polyline1")');
+// https://drafts.csswg.org/css-shapes-1/#basic-shape-serialization
+test_valid_value("offset-path", "inset(100%)");
+test_valid_value("offset-path", "inset(0 1px)", "inset(0px 1px)");
+test_valid_value("offset-path", "inset(0px 1px 2%)");
+test_valid_value("offset-path", "inset(0px 1px 2% 3em)");
+test_valid_value("offset-path", "inset(0px round 100%)");
+test_valid_value("offset-path", "inset(0px round 0 1px)", "inset(0px round 0px 1px)");
+test_valid_value("offset-path", "inset(0px round 0px 1px 2%)");
+test_valid_value("offset-path", "inset(0px round 0px 1px 2% 3em)");
+test_valid_value("offset-path", "inset(10px round 20% / 0px 1px 2% 3em)");
+
+test_valid_value("offset-path", "circle()");
test_valid_value("offset-path", "circle(100px)");
+test_valid_value("offset-path", "circle(closest-side)", "circle()");
+test_valid_value("offset-path", "circle(at 50% 50%)");
test_valid_value("offset-path", "circle(100px at 50% 50%)");
+test_valid_value("offset-path", "circle(farthest-side at 0% 0%)");
+
+test_valid_value("offset-path", "ellipse()");
+test_valid_value("offset-path", "ellipse(1px closest-side)");
+test_valid_value("offset-path", "ellipse(at 50% 50%)");
+test_valid_value("offset-path", "ellipse(closest-side closest-side at 10% 20%)", "ellipse(at 10% 20%)");
+test_valid_value("offset-path", "ellipse(farthest-side 4% at 0% 100%)");
+
+test_valid_value("offset-path", "polygon(1% 2%)");
+test_valid_value("offset-path", "polygon(1px 2px, 3em 4em)");
+
+test_valid_value("offset-path", "content-box");
test_valid_value("offset-path", "border-box");
-test_valid_value("offset-path", "inset(10% 20% 30% 40%) border-box");
+test_valid_value("offset-path", "view-box");
+
+test_valid_value("offset-path", "inset(10% 20% 30% 40%) border-box", "inset(10% 20% 30% 40%)");
test_valid_value("offset-path", "fill-box ellipse(50% 60%)", "ellipse(50% 60%) fill-box");
test_valid_value("offset-path", "content-box ellipse(50% 60% at 50% 50%)", "ellipse(50% 60% at 50% 50%) content-box");
+test_valid_value("offset-path", "ray(0deg) stroke-box");
+test_valid_value("offset-path", 'path("m 20 0 h -100") view-box');
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html
index bc0d19a460f..032a5b42b46 100644
--- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html
+++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html
@@ -16,7 +16,7 @@ test_valid_value("offset-position", "auto");
test_valid_value("offset-position", "normal");
test_valid_value("offset-position", "left bottom");
-test_valid_value("offset-position", "center center");
+test_valid_value("offset-position", "center center", "center");
test_valid_value("offset-position", "right center");
test_valid_value("offset-position", "center top");
test_valid_value("offset-position", "center bottom");
diff --git a/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print-ref.html b/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print-ref.html
new file mode 100644
index 00000000000..112b1ebdccf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print-ref.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<style>
+ body {
+ margin: 0;
+ }
+</style>
+<div style="height:200vh; background:green;"></div>
diff --git a/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print.html b/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print.html
new file mode 100644
index 00000000000..584c4943dcf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1451760">
+<link rel="match" href="monolithic-overflow-021-print-ref.html">
+<style>
+ body {
+ margin: 0;
+ }
+</style>
+<div style="break-before:page; background:red;">
+ <div style="border-bottom:50vh solid green; background:red;">
+ <div style="contain:size; height:150vh; background:green;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/crashtests/nth-child-of-attribute-crash.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/crashtests/nth-child-of-attribute-crash.html
new file mode 100644
index 00000000000..8f30fbb5e77
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/crashtests/nth-child-of-attribute-crash.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<meta charset="utf-8">
+<style>
+#elements [blue] {
+ color: blue;
+}
+#elements :nth-child(1 of :not([blue])) {
+ color: revert;
+}
+</style>
+<div id="elements">
+ <div blue>Child 1</div>
+ <div>Child 2</div>
+</div>
+<script>
+requestAnimationFrame(() =>
+ requestAnimationFrame(() => {
+ elements.children[1].setAttribute("blue", "");
+ elements.children[1].removeAttribute("blue");
+ elements.children[0].removeAttribute("blue");
+ }));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html
new file mode 100644
index 00000000000..bfa9d00e1b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<meta charset="utf-8" />
+<div>
+ <p style="color: green">Negated</p>
+ <p style="color: green">Not ignored</p>
+ <p>Not ignored</p>
+ <p style="color: green">Not ignored</p>
+ <p>Not ignored</p>
+ <p style="color: green">Negated</p>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html
new file mode 100644
index 00000000000..0d76146f19a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<meta charset="utf-8" />
+<title>CSS Selectors Invalidation: :not(:nth-child(... of class)) when ancestor changes</title>
+<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net">
+<link rel="match" href="negated-nth-child-when-ancestor-changes-ref.html">
+<link rel="help" href="https://drafts.csswg.org/selectors-4/#child-index">
+<style>
+.ancestor :not(:nth-child(even of .c)) {
+ color: green;
+}
+</style>
+<div id="toggler">
+ <p>Negated</p>
+ <p class="c">Not ignored</p>
+ <p class="c">Not ignored</p>
+ <p class="c">Not ignored</p>
+ <p class="c">Not ignored</p>
+ <p>Negated</p>
+</div>
+<script>
+ document.documentElement.offsetTop;
+ toggler.classList.toggle("ancestor");
+</script>
+
diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html
new file mode 100644
index 00000000000..27f51e6da28
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<meta charset="utf-8" />
+<div>
+ <p style="color: green">Negated</p>
+ <p>Not ignored</p>
+ <p style="color: green">Not ignored</p>
+ <p>Not ignored</p>
+ <p style="color: green">Not ignored</p>
+ <p style="color: green">Negated</p>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html
new file mode 100644
index 00000000000..27f66ee3244
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<meta charset="utf-8" />
+<title>CSS Selectors Invalidation: :not(:nth-last-child(... of class)) when ancestor changes</title>
+<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net">
+<link rel="match" href="negated-nth-last-child-when-ancestor-changes-ref.html">
+<link rel="help" href="https://drafts.csswg.org/selectors-4/#child-index">
+<style>
+.ancestor :not(:nth-last-child(even of .c)) {
+ color: green;
+}
+</style>
+<div id="toggler">
+ <p>Negated</p>
+ <p class="c">Not ignored</p>
+ <p class="c">Not ignored</p>
+ <p class="c">Not ignored</p>
+ <p class="c">Not ignored</p>
+ <p>Negated</p>
+</div>
+<script>
+ document.documentElement.offsetTop;
+ toggler.classList.toggle("ancestor");
+</script>
+
diff --git a/tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html b/tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html
index 079f4063d45..f11de65eff6 100644
--- a/tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html
+++ b/tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html
@@ -11,7 +11,7 @@
<dialog id="dialog">Just another dialog.</dialog>
<div id="container">
- <button id="btn"/>
+ <button id="btn"></button>
</div>
<script>
diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html
index 0a1d40199e6..b89f2409121 100644
--- a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html
+++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html
@@ -23,7 +23,7 @@ testReflectAttribute('tabIndex', 'tabindex', '0', '1', 'tabIndex on HTMLElement'
testReflectAttribute('accessKey', 'accesskey', 'a', 'b', 'accessKey on HTMLElement');
testReflectAttributeWithContentValues('draggable', 'draggable', true, 'true', false, 'false', 'draggable on HTMLElement');
testReflectAttributeWithContentValues('spellcheck', 'spellcheck', true, 'true', false, 'false', 'spellcheck on HTMLElement');
-testReflectAttribute('popover', 'popover', 'auto', 'manual', 'popover on HTMLElement');
+testReflectAttribute('popover', 'popover', 'auto', 'manual', 'popover on HTMLElement', undefined, undefined, () => 'popover' in HTMLElement.prototype);
testNodeDisconnector(function (customElement) {
customElement.parentNode.innerText = '';
diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js b/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js
index 5ed32a4fa48..0e4b94e02a9 100644
--- a/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js
+++ b/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js
@@ -126,8 +126,11 @@ function testCloner(testFunction, name) {
}, name + ' must enqueue an attributeChanged reaction when cloning an element only for observed attributes');
}
-function testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, contentValue1, validValue2, contentValue2, name, elementName, interfaceName) {
+function testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, contentValue1, validValue2, contentValue2, name, elementName, interfaceName, optionalSupportPredicate) {
test(function () {
+ if (optionalSupportPredicate) {
+ assert_implements_optional(optionalSupportPredicate());
+ }
if (elementName === undefined) {
var element = define_new_custom_element([contentAttributeName]);
var instance = document.createElement(element.name);
@@ -144,6 +147,9 @@ function testReflectAttributeWithContentValues(jsAttributeName, contentAttribute
}, name + ' must enqueue an attributeChanged reaction when adding ' + contentAttributeName + ' content attribute');
test(function () {
+ if (optionalSupportPredicate) {
+ assert_implements_optional(optionalSupportPredicate());
+ }
if (elementName === undefined) {
var element = define_new_custom_element([contentAttributeName]);
var instance = document.createElement(element.name);
@@ -160,8 +166,8 @@ function testReflectAttributeWithContentValues(jsAttributeName, contentAttribute
}, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute');
}
-function testReflectAttribute(jsAttributeName, contentAttributeName, validValue1, validValue2, name, elementName, interfaceName) {
- testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, validValue1, validValue2, validValue2, name, elementName, interfaceName);
+function testReflectAttribute(jsAttributeName, contentAttributeName, validValue1, validValue2, name, elementName, interfaceName, optionalSupportPredicate) {
+ testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, validValue1, validValue2, validValue2, name, elementName, interfaceName, optionalSupportPredicate);
}
function testReflectBooleanAttribute(jsAttributeName, contentAttributeName, name, elementName, interfaceName) {
diff --git a/tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html b/tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html
index 3dd2b8a6d19..35e3e2c5470 100644
--- a/tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html
+++ b/tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html
@@ -11,7 +11,7 @@
await test_driver.bless('request PiP window from top window');
const pipWindow = await documentPictureInPicture.requestWindow();
var onbeforeunloadDisabled = true;
- pipWindow.window.onbeforeunload = () => {
+ pipWindow.onbeforeunload = () => {
onbeforeunloadDisabled = false;
return "This is a test";
}
diff --git a/tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html b/tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html
index 175f5d555b9..6e52576b0b4 100644
--- a/tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html
+++ b/tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html
@@ -6,9 +6,9 @@
<div id=target style="display:none">
Imperative test element
- <span></span> A
- <span></span> B
- <span></span> C
+ <span>A</span>
+ <span>B</span>
+ <span>C</span>
</div>
<div style="display:none">
@@ -18,19 +18,60 @@
</div>
<script>
-test(() => {
- const target = document.getElementById('target');
- assert_true(target.children.length >= 3);
- const documentPart = document.getDocumentPart();
- assert_true(documentPart instanceof DocumentPart,'document should have a DocumentPart');
- const parts = documentPart.getParts();
- assert_true(!!parts,'getParts should return something');
- const nodePart = new NodePart(target);
- assert_true(!!nodePart);
+const target = document.getElementById('target');
+assert_true(target.children.length >= 3);
+
+function addCleanup(t, part) {
+ t.add_cleanup(() => part.disconnect());
+ return part;
+}
+
+test((t) => {
+ const root = document.getPartRoot();
+ assert_true(root instanceof DocumentPartRoot);
+ assert_true(root instanceof PartRoot);
+ const parts = root.getParts();
+ assert_equals(parts.length,0,'getParts() should start out empty');
+
+ const nodePart = addCleanup(t,new NodePart(root,target));
+ assert_true(nodePart instanceof NodePart);
assert_equals(nodePart.node,target);
- const childNodePart = new ChildNodePart(target.children[0], target.children[1]);
- assert_true(!!childNodePart);
+ assert_equals(nodePart.root,root);
+ assert_equals(root.getParts().length,1,'getParts() for the root should now have this nodePart');
+ assert_equals(root.getParts()[0],nodePart);
+ assert_equals(parts.length,0,'Return value of getParts() is not live');
+
+ assert_throws_dom("NotSupportedError",() => new NodePart(nodePart,target.children[0]),'Constructing a Part with a NodePart as the PartRoot should throw');
+
+ const childNodePart = addCleanup(t,new ChildNodePart(root,target.children[0], target.children[2]));
+ assert_true(childNodePart instanceof ChildNodePart);
+ assert_true(childNodePart instanceof Part);
+ assert_equals(childNodePart.root,root);
assert_equals(childNodePart.previousSibling,target.children[0]);
- assert_equals(childNodePart.nextSibling,target.children[1]);
+ assert_equals(childNodePart.nextSibling,target.children[2]);
+ assert_equals(childNodePart.getParts().length,0,'childNodePart.getParts() should start out empty');
+ assert_equals(root.getParts().length,2);
+ assert_equals(root.getParts()[1],childNodePart);
+
+ const nodeBefore = target.previousSibling || target.parentNode;
+ const nodePartBefore = addCleanup(t,new NodePart(root,nodeBefore));
+ assert_equals(root.getParts().length,3,'getParts() for the root should now have this nodePart');
+ assert_array_equals(root.getParts(),[nodePartBefore,nodePart,childNodePart],'getParts() should return nodes in tree order');
+
+ const nodePart2 = addCleanup(t,new NodePart(childNodePart,target.children[2]));
+ assert_equals(nodePart2.root,childNodePart);
+ assert_equals(root.getParts().length,3,'getParts() for the root DocumentPartRoot shouldn\'t change');
+ assert_array_equals(childNodePart.getParts(),[nodePart2]);
+
+ nodePart2.disconnect();
+ assert_equals(nodePart2.root,null);
+ assert_equals(nodePart2.node,target.children[2],'node should still be connected');
+ assert_equals(childNodePart.getParts().length,0,'calling disconnect() should remove the part from root.getParts()');
+ assert_equals(root.getParts().length,3,'getParts() for the root DocumentPartRoot still shouldn\'t change');
+ nodePart2.disconnect(); // Calling twice should be ok.
+
+ childNodePart.disconnect();
+ assert_equals(childNodePart.root,null);
+ assert_array_equals(root.getParts(),[nodePartBefore,nodePart]);
}, 'Basic imperative DOM Parts object construction');
</script>
diff --git a/tests/wpt/web-platform-tests/editing/crashtests/delete-after-empty-script-element.html b/tests/wpt/web-platform-tests/editing/crashtests/delete-after-empty-script-element.html
new file mode 100644
index 00000000000..c06a4af8026
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/crashtests/delete-after-empty-script-element.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+</head>
+<body>
+A
+<script>
+addEventListener("load", () => {
+ document.documentElement.contentEditable = true;
+ getSelection().collapse(document.body.lastChild, document.body.lastChild.length);
+ document.execCommand("delete");
+});
+</script>
+<li>
+<form readonly contenteditable>
+</form>
+<script>
+</script></li></body></html>
diff --git a/tests/wpt/web-platform-tests/editing/crashtests/designMode-off-during-inserthorizontalrule.html b/tests/wpt/web-platform-tests/editing/crashtests/designMode-off-during-inserthorizontalrule.html
new file mode 100644
index 00000000000..21a61998986
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/crashtests/designMode-off-during-inserthorizontalrule.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+document.addEventListener("DOMContentLoaded", () => {
+ document.designMode = "on";
+ document.addEventListener("DOMNodeRemoved", () => {
+ document.documentElement.normalize();
+ document.designMode = "off";
+ });
+ getSelection().collapse(document.querySelector("address").firstChild, 1);
+ document.execCommand("insertHorizontalRule");
+});
+</script>
+</head>
+<body>
+<address>
+A
+</address>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/editing/crashtests/forwarddelete-after-editable-slot-element-outside-body.html b/tests/wpt/web-platform-tests/editing/crashtests/forwarddelete-after-editable-slot-element-outside-body.html
new file mode 100644
index 00000000000..480f02ded96
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/crashtests/forwarddelete-after-editable-slot-element-outside-body.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+document.addEventListener("DOMContentLoaded", () => {
+ const slot = document.createElement("slot");
+ document.documentElement.appendChild(slot);
+ const anchor = document.querySelector("a[contenteditable]");
+ const selection = document.getSelection()
+ getSelection().collapse(anchor, 0);
+ getSelection().setBaseAndExtent(
+ document, 0,
+ document.documentElement, document.documentElement.childNodes.length
+ );
+ const range = selection.getRangeAt(0);
+ document.documentElement.contentEditable = true;
+ document.documentElement.contentEditable = false;
+ range.collapse(false);
+ getSelection().removeAllRanges();
+ getSelection().addRange(range);
+ document.documentElement.contentEditable = true;
+ document.execCommand("forwardDelete");
+});
+</script>
+</head><body>
+<a contenteditable></a>
+</body></html>
diff --git a/tests/wpt/web-platform-tests/editing/crashtests/indent-in-inline-editing-host-outside-body.html b/tests/wpt/web-platform-tests/editing/crashtests/indent-in-inline-editing-host-outside-body.html
new file mode 100644
index 00000000000..d56a0fd248b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/crashtests/indent-in-inline-editing-host-outside-body.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+addEventListener("load", () => {
+ const samp = document.createElement("samp");
+ samp.innerText = "ABC";
+ samp.contentEditable = true;
+ document.documentElement.appendChild(samp);
+ getSelection().selectAllChildren(samp);
+ document.execCommand("indent");
+});
+</script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/editing/crashtests/indent-in-textarea-in-designMode-during-outdent.html b/tests/wpt/web-platform-tests/editing/crashtests/indent-in-textarea-in-designMode-during-outdent.html
new file mode 100644
index 00000000000..313c51bb5a0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/crashtests/indent-in-textarea-in-designMode-during-outdent.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+</head>
+<body>
+A
+<script>
+addEventListener("load", () => {
+ const textarea = document.querySelector("textarea");
+ textarea.addEventListener("focusin", onFocusIn);
+ textarea.select();
+ document.execCommand("outdent");
+});
+
+function onFocusIn() {
+ document.querySelector("marquee").onstart = () => {
+ document.designMode = "off";
+ window.find("AA");
+ };
+ document.designMode = "on";
+ document.execCommand("selectAll");
+ document.execCommand("indent");
+ document.designMode = "on";
+}
+</script>
+<fieldset>
+<textarea></textarea>
+AA
+</fieldset>
+<marquee id="b"></marquee>
+<blockquote contenteditable="true"></blockquote>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/editing/crashtests/insertText-nested-by-DOMSubtreeModified.html b/tests/wpt/web-platform-tests/editing/crashtests/insertText-nested-by-DOMSubtreeModified.html
new file mode 100644
index 00000000000..45b0e67ed46
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/crashtests/insertText-nested-by-DOMSubtreeModified.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+document.addEventListener("DOMContentLoaded", () => {
+ const output = document.querySelector("output");
+ const table = document.querySelector("table");
+ table.addEventListener("DOMSubtreeModified", () => {
+ document.execCommand("bold");
+ document.execCommand("hiliteColor", false, "white");
+ output.appendChild(table);
+ document.execCommand("forwardDelete");
+ table.setAttribute("onwebkitsourceclose", "foo()");
+ document.execCommand("insertText", false, "a");
+ });
+ document.execCommand("selectAll");
+ table.insertRow();
+});
+</script>
+</head>
+<body>
+<canvas contenteditable>
+<output>
+<table tabindex="0" autofocus></table>
+</output>
+</canvas>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/editing/crashtests/inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html b/tests/wpt/web-platform-tests/editing/crashtests/inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html
new file mode 100644
index 00000000000..d7224c3095d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/crashtests/inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+document.addEventListener("DOMContentLoaded", () => {
+ getSelection().setBaseAndExtent(
+ document.querySelector("b"), 0,
+ document.querySelector("i").firstChild, 2
+ );
+ document.documentElement.contentEditable = true;
+ document.execCommand("insertHorizontalRule");
+});
+</script>
+</head>
+<body>
+<div>
+<b>
+</b>
+<i>X
+</i>
+<!-- COMMENT -->
+</div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/editing/crashtests/removeformat-in-number-input-immediately-after-type-change-and-stepUp.html b/tests/wpt/web-platform-tests/editing/crashtests/removeformat-in-number-input-immediately-after-type-change-and-stepUp.html
new file mode 100644
index 00000000000..d83c2e00790
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/crashtests/removeformat-in-number-input-immediately-after-type-change-and-stepUp.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+document.addEventListener("DOMContentLoaded", () => {
+ const input = document.querySelector("input");
+ input.select();
+ input.type = "number";
+ document.querySelector("switch").scrollIntoView(true);
+ input.stepUp(1);
+ document.execCommand("removeFormat");
+});
+</script>
+</head>
+<body>
+<input>
+<switch>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/editing/edit-context/edit-context-property.tentative.html b/tests/wpt/web-platform-tests/editing/edit-context/edit-context-property.tentative.html
new file mode 100644
index 00000000000..b6f46dc517b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/editing/edit-context/edit-context-property.tentative.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>EditContext: The HTMLElement.editContext property</title>
+<meta name="author" title="Dan Clark" href="mailto:daniec@microsoft.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src='../../html/resources/common.js'></script>
+</head>
+<body>
+<script>
+
+test(function () {
+ assert_true('editContext' in HTMLElement.prototype, 'Element.prototype.editContext must exist');
+ assert_equals(typeof(document.createElement('div').editContext), 'object', 'An instance of div must have editContext which is an object');
+}, 'Check the existence of HTMLElement.editContext');
+
+test(function () {
+ assert_false('editContext' in Node.prototype, 'Node.prototype.editContext must not exist');
+ assert_false('editContext' in Element.prototype, 'Element.prototype.editContext must not exist');
+ assert_false('editContext' in CharacterData.prototype, 'CharacterData.prototype.editContext must not exist');
+ assert_false('editContext' in Comment.prototype, 'Comment.prototype.editContext must not exist');
+ assert_equals(typeof(document.createComment('').editContext), 'undefined', 'An instance of comment must not have editContext');
+ assert_false('editContext' in Document.prototype, 'Document.prototype.editContext must not exist');
+ assert_equals(typeof(document.editContext), 'undefined', 'An instance of document must not have editContext which is a function');
+ assert_false('editContext' in DocumentFragment.prototype, 'DocumentFragment.prototype.editContext must not exist');
+ assert_equals(typeof((new DOMParser()).parseFromString('', 'text/html').editContext), 'undefined', 'An instance of document must not have editContext which is a function');
+ assert_false('editContext' in Text.prototype, 'Text.prototype.editContext must not exist');
+ assert_equals(typeof(document.createTextNode('').editContext), 'undefined', 'An instance of text node must not have editContext');
+}, 'Nodes other than Element should not have editContext');
+
+test(function () {
+ assert_throws_js(TypeError, function () {
+ document.createElement('div').editContext = "hello";
+ }, 'editContext must throw a TypeError when set to a string');
+
+ assert_throws_js(TypeError, function () {
+ document.createElement('div').editContext = 42;
+ }, 'editContext must throw a TypeError when set to a number');
+
+ assert_throws_js(TypeError, function () {
+ document.createElement('div').editContext = document.createElement('span');
+ }, 'editContext must throw a TypeError when set to a node');
+}, 'HTMLElement.editContext must throw a TypeError if set to something other than an EditContext');
+
+test(function () {
+ const EDIT_CONTEXT_ALLOWED_ELEMENTS = HTML5_SHADOW_ALLOWED_ELEMENTS.concat(['canvas']);
+ for (const elementName of EDIT_CONTEXT_ALLOWED_ELEMENTS) {
+ const element = document.createElement(elementName);
+ const ec = new EditContext();
+ element.editContext = ec;
+ assert_equals(element.editContext, ec, 'Getting HTMLElement.editContext should yield the same EditContext instance');
+ }
+}, 'HTMLElement.editContext can be set on the shadow root elements plus canvas.');
+
+test(function () {
+ // EditContext shares all of the shadow root disallowed elements except for canvas.
+ const EDIT_CONTEXT_DISALLOWED_ELEMENTS = HTML5_SHADOW_DISALLOWED_ELEMENTS.toSpliced(HTML5_SHADOW_DISALLOWED_ELEMENTS.indexOf('canvas'), 1);
+ for (const elementName of EDIT_CONTEXT_DISALLOWED_ELEMENTS) {
+ const element = document.createElement(elementName);
+ const ec = new EditContext();
+ assert_throws_dom('NotSupportedError', () => {
+ element.editContext = ec;
+ }, `Setting editContext on <${elementName}> must throw.`);
+ assert_equals(element.editContext, null);
+ }
+}, 'Setting HTMLElement.editContext must throw a NotSupportedError for disallowed elements');
+
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html b/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html
index 11f8c05f966..d4998b47ff1 100644
--- a/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html
+++ b/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html
@@ -82,7 +82,7 @@ body {
<div width=200 height=100 id="div2" class="my_div" elementtiming="et2">
Sample text inside div.
</div>
-<div id="div3"/>
+<div id="div3">
I am a div that should not be observed!
</div>
</body>
diff --git a/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html b/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html
index 00986366e61..3342f5688e7 100644
--- a/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html
+++ b/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html
@@ -29,5 +29,5 @@ body {
});
}, 'Element Timing entry in iframe has coordinates relative to the iframe.');
</script>
-<iframe src="resources/iframe-with-square-sends-entry.html"/>
+<iframe src="resources/iframe-with-square-sends-entry.html"></iframe>
</body>
diff --git a/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html b/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html
index 56077335296..ba1ddc7151c 100644
--- a/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html
+++ b/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html
@@ -29,4 +29,4 @@ body {
margin: 0;
}
</style>
-<video elementtiming='my_poster' id='the_poster' src='/media/test.mp4' poster='resources/circle.svg'/>
+<video elementtiming='my_poster' id='the_poster' src='/media/test.mp4' poster='resources/circle.svg'></video>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html
index fd91a09d732..991f35af0dd 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html
@@ -21,34 +21,36 @@ _addTest(function(canvas, ctx) {
_assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "Normal";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
- ctx.fontKerning = "Auto";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "normal";
_assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
ctx.fontKerning = "Auto";
- ctx.fontKerning = "noRmal";
_assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
- ctx.fontKerning = "Auto";
+ ctx.fontKerning = "auto";
+ ctx.fontKerning = "noRmal";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
+ ctx.fontKerning = "auto";
ctx.fontKerning = "NoRMal";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
- ctx.fontKerning = "Auto";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
+ ctx.fontKerning = "auto";
ctx.fontKerning = "NORMAL";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "None";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
- ctx.fontKerning = "Auto";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "none";
_assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
ctx.fontKerning = "Auto";
- ctx.fontKerning = "nOne";
_assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
- ctx.fontKerning = "Auto";
+ ctx.fontKerning = "auto";
+ ctx.fontKerning = "nOne";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
+ ctx.fontKerning = "auto";
ctx.fontKerning = "nonE";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
- ctx.fontKerning = "Auto";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
+ ctx.fontKerning = "auto";
ctx.fontKerning = "NONE";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html
index cf0a32305d0..cff5ad183a0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html
@@ -8,7 +8,7 @@
<body class="show_output">
<h1>2d.text.drawing.style.fontVariant.settings</h1>
-<p class="desc">Testing basic functionalities of fontKerning for canvas</p>
+<p class="desc">Testing basic functionalities of fontVariant for canvas</p>
<p class="output">Actual output:</p>
@@ -16,7 +16,7 @@
<ul id="d"></ul>
<script>
-var t = async_test("Testing basic functionalities of fontKerning for canvas");
+var t = async_test("Testing basic functionalities of fontVariant for canvas");
_addTest(function(canvas, ctx) {
// Setting fontVariantCaps with lower cases
@@ -43,29 +43,33 @@ _addTest(function(canvas, ctx) {
ctx.fontVariantCaps = "titling-caps";
_assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
- // Setting fontVariantCaps with lower cases and upper cases word.
+ // Setting fontVariantCaps with mixed-case values is not valid
ctx.fontVariantCaps = "nORmal";
+ _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
+
+ ctx.fontVariantCaps = "normal";
_assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "smaLL-caps";
- _assertSame(ctx.fontVariantCaps, "small-caps", "ctx.fontVariantCaps", "\"small-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "all-small-CAPS";
- _assertSame(ctx.fontVariantCaps, "all-small-caps", "ctx.fontVariantCaps", "\"all-small-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "pEtitE-caps";
- _assertSame(ctx.fontVariantCaps, "petite-caps", "ctx.fontVariantCaps", "\"petite-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "All-Petite-Caps";
- _assertSame(ctx.fontVariantCaps, "all-petite-caps", "ctx.fontVariantCaps", "\"all-petite-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "uNIcase";
- _assertSame(ctx.fontVariantCaps, "unicase", "ctx.fontVariantCaps", "\"unicase\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "titling-CAPS";
- _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
// Setting fontVariantCaps with non-existing font variant.
+ ctx.fontVariantCaps = "titling-caps";
ctx.fontVariantCaps = "abcd";
_assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html
new file mode 100644
index 00000000000..c394ecdfe39
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.cross-layer-paths</title>
+<h1>2d.layer.cross-layer-paths</h1>
+<p class="desc">Checks that path defined in a layer is usable outside.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+
+ ctx.moveTo(50, 0); ctx.lineTo(50, 100); ctx.stroke();
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths.html
new file mode 100644
index 00000000000..7feebfdce6d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<link rel="match" href="2d.layer.cross-layer-paths-expected.html">
+<title>Canvas test: 2d.layer.cross-layer-paths</title>
+<h1>2d.layer.cross-layer-paths</h1>
+<p class="desc">Checks that path defined in a layer is usable outside.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+
+ ctx.beginLayer();
+ ctx.translate(50, 0);
+ ctx.moveTo(0, 0);
+ ctx.endLayer();
+ ctx.lineTo(50, 100);
+ ctx.stroke();
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html
deleted file mode 100644
index 607526e4376..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
-<title>Canvas test: 2d.layer.endlayer.alone</title>
-<h1>2d.layer.endlayer.alone</h1>
-<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p>
-<canvas id="canvas" width="200" height="200">
- <p class="fallback">FAIL (fallback content)</p>
-</canvas>
-<script>
- const canvas = document.getElementById("canvas");
- const ctx = canvas.getContext('2d');
-
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
- ctx.globalAlpha = 0.5;
-
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
-</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone.html
deleted file mode 100644
index a7a5933b33d..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
-<link rel="match" href="2d.layer.endlayer.alone-expected.html">
-<title>Canvas test: 2d.layer.endlayer.alone</title>
-<h1>2d.layer.endlayer.alone</h1>
-<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p>
-<canvas id="canvas" width="200" height="200">
- <p class="fallback">FAIL (fallback content)</p>
-</canvas>
-<script>
- const canvas = document.getElementById("canvas");
- const ctx = canvas.getContext('2d');
-
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
- ctx.globalAlpha = 0.5;
-
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
-
- ctx.endLayer();
-</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched.html
deleted file mode 100644
index 5f539832326..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
-<link rel="match" href="2d.layer.endlayer.unmatched-expected.html">
-<title>Canvas test: 2d.layer.endlayer.unmatched</title>
-<h1>2d.layer.endlayer.unmatched</h1>
-<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p>
-<canvas id="canvas" width="200" height="200">
- <p class="fallback">FAIL (fallback content)</p>
-</canvas>
-<script>
- const canvas = document.getElementById("canvas");
- const ctx = canvas.getContext('2d');
-
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
-
- ctx.globalAlpha = 0.5;
-
- // This endlayer call should no-op.
- ctx.endLayer();
-
- ctx.beginLayer();
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
- ctx.endLayer();
-</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html
new file mode 100644
index 00000000000..74e05e1e48e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.invalid-calls.beginLayer-reset-endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.invalid-calls.beginLayer-reset-endLayer</h1>
+<p class="desc">Raises exception on beginLayer() + reset() + endLayer().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("Raises exception on beginLayer() + reset() + endLayer().");
+_addTest(function(canvas, ctx) {
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.reset();
+ ctx.endLayer();
+ });
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html
new file mode 100644
index 00000000000..1979cb6c73a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.invalid-calls.beginLayer-restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.invalid-calls.beginLayer-restore</h1>
+<p class="desc">Raises exception on beginLayer() + restore().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("Raises exception on beginLayer() + restore().");
+_addTest(function(canvas, ctx) {
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.restore();
+ });
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html
new file mode 100644
index 00000000000..c635ac75b99
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.invalid-calls.beginLayer-save-endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.invalid-calls.beginLayer-save-endLayer</h1>
+<p class="desc">Raises exception on beginLayer() + save() + endLayer().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("Raises exception on beginLayer() + save() + endLayer().");
+_addTest(function(canvas, ctx) {
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.save();
+ ctx.endLayer();
+ });
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html
new file mode 100644
index 00000000000..c39a352d65f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.invalid-calls.endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.invalid-calls.endLayer</h1>
+<p class="desc">Raises exception on lone endLayer calls.</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("Raises exception on lone endLayer calls.");
+_addTest(function(canvas, ctx) {
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.endLayer();
+ });
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html
new file mode 100644
index 00000000000..e2d4d565890
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.invalid-calls.save-beginLayer-restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.invalid-calls.save-beginLayer-restore</h1>
+<p class="desc">Raises exception on save() + beginLayer() + restore().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("Raises exception on save() + beginLayer() + restore().");
+_addTest(function(canvas, ctx) {
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.save();
+ ctx.beginLayer();
+ ctx.restore();
+ });
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html
new file mode 100644
index 00000000000..f4308e1191d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.invalid-calls.save-endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.invalid-calls.save-endLayer</h1>
+<p class="desc">Raises exception on save() + endLayer().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("Raises exception on save() + endLayer().");
+_addTest(function(canvas, ctx) {
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.save();
+ ctx.endLayer();
+ });
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset-expected.html
new file mode 100644
index 00000000000..93131dca9cf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset-expected.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.reset</title>
+<h1>2d.layer.reset</h1>
+<p class="desc">Checks that reset discards any pending layers.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+
+ ctx.fillRect(10, 10, 75, 50);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset.html
new file mode 100644
index 00000000000..aabf74cc4d1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<link rel="match" href="2d.layer.reset-expected.html">
+<title>Canvas test: 2d.layer.reset</title>
+<h1>2d.layer.reset</h1>
+<p class="desc">Checks that reset discards any pending layers.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+
+ // Global states:
+ ctx.globalAlpha = 0.3;
+ ctx.globalCompositeOperation = 'source-in';
+ ctx.shadowOffsetX = -3;
+ ctx.shadowOffsetY = 3;
+ ctx.shadowColor = 'rgba(0, 30, 0, 0.3)';
+
+ ctx.beginLayer({filter: 'dropShadow', dx: -3, dy: 3});
+
+ // Layer states:
+ ctx.globalAlpha = 0.6;
+ ctx.globalCompositeOperation = 'source-in';
+ ctx.shadowOffsetX = -6;
+ ctx.shadowOffsetY = 6;
+ ctx.shadowColor = 'rgba(0, 60, 0, 0.6)';
+
+ ctx.reset();
+
+ ctx.fillRect(10, 10, 75, 50);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html
new file mode 100644
index 00000000000..5e90134a250
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.unclosed-nested</title>
+<h1>2d.layer.unclosed-nested</h1>
+<p class="desc">Check that layers are rendered even if not closed.</p>
+<canvas id="canvas" width="200" height="200">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+
+ const canvas1 = document.createElement('canvas');
+ const ctx1 = canvas1.getContext('2d');
+ ctx1.fillStyle = 'rgba(0,255,0,1)';
+ ctx1.fillRect(70,70,75,50);
+
+ const canvas2 = document.createElement('canvas');
+ const ctx2 = canvas2.getContext('2d');
+ ctx2.fillStyle = 'rgba(225,0,0,1)';
+ ctx2.fillRect(50,50,75,50);
+ ctx2.drawImage(canvas1, 0, 0);
+
+ ctx.fillStyle = 'rgba(0,0,255,1)';
+ ctx.fillRect(60,60,75,50);
+ ctx.globalAlpha = 0.5;
+ ctx.drawImage(canvas2, 0, 0);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested.html
index e6dd85b7e26..c02aae4af11 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched-expected.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested.html
@@ -1,8 +1,9 @@
<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
-<title>Canvas test: 2d.layer.endlayer.unmatched</title>
-<h1>2d.layer.endlayer.unmatched</h1>
-<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p>
+<link rel="match" href="2d.layer.unclosed-nested-expected.html">
+<title>Canvas test: 2d.layer.unclosed-nested</title>
+<h1>2d.layer.unclosed-nested</h1>
+<p class="desc">Check that layers are rendered even if not closed.</p>
<canvas id="canvas" width="200" height="200">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
@@ -12,13 +13,16 @@
ctx.fillStyle = 'rgba(0, 0, 255, 1)';
ctx.fillRect(60, 60, 75, 50);
-
ctx.globalAlpha = 0.5;
ctx.beginLayer();
ctx.fillStyle = 'rgba(225, 0, 0, 1)';
ctx.fillRect(50, 50, 75, 50);
+
+ ctx.beginLayer();
ctx.fillStyle = 'rgba(0, 255, 0, 1)';
ctx.fillRect(70, 70, 75, 50);
+
ctx.endLayer();
+ // Missing ctx.endLayer() here.
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html
new file mode 100644
index 00000000000..609cb19a7d8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.valid-calls.beginLayer-endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.valid-calls.beginLayer-endLayer</h1>
+<p class="desc">No exception raised on beginLayer() + endLayer().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("No exception raised on beginLayer() + endLayer().");
+_addTest(function(canvas, ctx) {
+
+ ctx.beginLayer();
+ ctx.save();
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html
new file mode 100644
index 00000000000..96580402960
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.valid-calls.beginLayer-save</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.valid-calls.beginLayer-save</h1>
+<p class="desc">No exception raised on beginLayer() + save().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("No exception raised on beginLayer() + save().");
+_addTest(function(canvas, ctx) {
+
+ ctx.beginLayer();
+ ctx.save();
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html
new file mode 100644
index 00000000000..05566833317
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.valid-calls.beginLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.valid-calls.beginLayer</h1>
+<p class="desc">No exception raised on lone beginLayer() calls.</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("No exception raised on lone beginLayer() calls.");
+_addTest(function(canvas, ctx) {
+
+ ctx.beginLayer();
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.restore.html
new file mode 100644
index 00000000000..b7a370306fd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.restore.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.valid-calls.restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.valid-calls.restore</h1>
+<p class="desc">No exception raised on lone restore() calls.</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("No exception raised on lone restore() calls.");
+_addTest(function(canvas, ctx) {
+
+ ctx.restore();
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html
new file mode 100644
index 00000000000..816398c7fc6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.valid-calls.save-beginLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.valid-calls.save-beginLayer</h1>
+<p class="desc">No exception raised on save() + beginLayer().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("No exception raised on save() + beginLayer().");
+_addTest(function(canvas, ctx) {
+
+ ctx.save();
+ ctx.beginLayer();
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save.html
new file mode 100644
index 00000000000..d8df8cedcec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.valid-calls.save</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.valid-calls.save</h1>
+<p class="desc">No exception raised on lone save() calls.</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("No exception raised on lone save() calls.");
+_addTest(function(canvas, ctx) {
+
+ ctx.save();
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html
new file mode 100644
index 00000000000..4c733263a63
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.valid-calls.save_reset_restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.valid-calls.save_reset_restore</h1>
+<p class="desc">No exception raised on save() + reset() + restore().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("No exception raised on save() + reset() + restore().");
+_addTest(function(canvas, ctx) {
+
+ ctx.save();
+ ctx.reset();
+ ctx.restore();
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_restore.html
new file mode 100644
index 00000000000..27ae70278e8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_restore.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.valid-calls.save_restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.layer.valid-calls.save_restore</h1>
+<p class="desc">No exception raised on save() + restore().</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("No exception raised on save() + restore().");
+_addTest(function(canvas, ctx) {
+
+ ctx.save();
+ ctx.restore();
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/line-styles/2d.line.fill.noop.html b/tests/wpt/web-platform-tests/html/canvas/element/line-styles/2d.line.fill.noop.html
new file mode 100644
index 00000000000..6dd8804ab03
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/line-styles/2d.line.fill.noop.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.line.fill.noop</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.line.fill.noop</h1>
+<p class="desc">Filling a line draws nothing</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("Filling a line draws nothing");
+_addTest(function(canvas, ctx) {
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = '#f00';
+ ctx.lineWidth = 20;
+ ctx.beginPath();
+ ctx.moveTo(10, 20);
+ ctx.lineTo(90, 30);
+ ctx.fill();
+ _assertPixel(canvas, 50,24, 0,255,0,255);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ _assertPixel(canvas, 50,26, 0,255,0,255);
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html
index 222199e6463..18818fa7265 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html
@@ -36,5 +36,4 @@ _addTest(function(canvas, ctx) {
});
</script>
-<img src="/images/transparent50.png" id="transparent50.png" class="resource">
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html
index 8d9022d61da..f00e1752dfc 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html
@@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#00f';
- ctx.drawImage(document.getElementById('transparent50.png'), 0, -50);
+ var img = document.getElementById('transparent50.png');
+ ctx.drawImage(img, 0, -50);
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html
index 351e7515221..d106e223db7 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html
@@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#0f0';
ctx.shadowOffsetY = 50;
- ctx.drawImage(document.getElementById('red.png'), 0, -50);
+ var img = document.getElementById('red.png');
+ ctx.drawImage(img, 0, -50);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html
index cbec7ccce16..7e07fff3783 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html
@@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- ctx.drawImage(document.getElementById('redtransparent.png'), 0, 0, 100, 50, -10, -50, 240, 50);
+ var img = document.getElementById('redtransparent.png');
+ ctx.drawImage(img, 0, 0, 100, 50, -10, -50, 240, 50);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html
index 472559b736d..a1b3e7032fb 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html
@@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#f00';
- ctx.drawImage(document.getElementById('redtransparent.png'), 50, 0, 50, 50, 0, -50, 50, 50);
+ var img = document.getElementById('redtransparent.png');
+ ctx.drawImage(img, 50, 0, 50, 50, 0, -50, 50, 50);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html
index 768e961df0e..74d8b229510 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html
@@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#f00';
ctx.shadowOffsetY = 50;
- ctx.drawImage(document.getElementById('transparent.png'), 0, -50);
+ var img = document.getElementById('transparent.png');
+ ctx.drawImage(img, 0, -50);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html
index a445b7aebe8..1a52a52c3fe 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html
@@ -25,9 +25,10 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(50, 0, 50, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- ctx.drawImage(document.getElementById('redtransparent.png'), 50, -50);
+ var img = document.getElementById('redtransparent.png');
+ ctx.drawImage(img, 50, -50);
ctx.shadowColor = '#f00';
- ctx.drawImage(document.getElementById('redtransparent.png'), -50, -50);
+ ctx.drawImage(img, -50, -50);
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html
index 8e602d6c2b2..10b5414b123 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html
@@ -19,7 +19,8 @@
var t = async_test("Shadows are drawn correctly for partially-transparent fill patterns");
_addTest(function(canvas, ctx) {
- var pattern = ctx.createPattern(document.getElementById('transparent50.png'), 'repeat');
+ var img = document.getElementById('transparent50.png');
+ var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html
index c776d6bc3bc..47d2149a57e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html
@@ -19,7 +19,8 @@
var t = async_test("Shadows are drawn for fill patterns");
_addTest(function(canvas, ctx) {
- var pattern = ctx.createPattern(document.getElementById('red.png'), 'repeat');
+ var img = document.getElementById('red.png');
+ var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#0f0';
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html
index c3dca30138b..c41dd837787 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html
@@ -19,7 +19,8 @@
var t = async_test("Shadows are not drawn for transparent fill patterns");
_addTest(function(canvas, ctx) {
- var pattern = ctx.createPattern(document.getElementById('transparent.png'), 'repeat');
+ var img = document.getElementById('transparent.png');
+ var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#f00';
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html
index ecb82412be2..ddaf21fe908 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html
@@ -19,7 +19,8 @@
var t = async_test("Shadows are not drawn for transparent parts of fill patterns");
_addTest(function(canvas, ctx) {
- var pattern = ctx.createPattern(document.getElementById('redtransparent.png'), 'repeat');
+ var img = document.getElementById('redtransparent.png');
+ var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#0f0';
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html
index 7b3a0a9373b..3ad15f31501 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html
@@ -33,7 +33,7 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'hanging';
- ctx.fillText('CC', 0, 12.5);
+ ctx.fillText('CC', 0, -30);
_assertPixelApprox(canvas, 5,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 95,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html
index 8da9aabb942..8d402223a4f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html
@@ -33,7 +33,7 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'ideographic';
- ctx.fillText('CC', 0, 31.25);
+ ctx.fillText('CC', 0, 81.25);
_assertPixelApprox(canvas, 5,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 95,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html
index 15b802f1c48..ab49fcb4f60 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html
@@ -14,7 +14,7 @@
<body class="show_output">
<h1>2d.text.draw.space.collapse.end</h1>
-<p class="desc">Space characters at the end of a line are collapsed (per CSS)</p>
+<p class="desc">Space characters at the end of a line are NOT collapsed</p>
<span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span>
@@ -23,7 +23,7 @@
<p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt="">
<ul id="d"></ul>
<script>
-var t = async_test("Space characters at the end of a line are collapsed (per CSS)");
+var t = async_test("Space characters at the end of a line are NOT collapsed");
_addTest(function(canvas, ctx) {
ctx.font = '50px CanvasTest';
@@ -33,7 +33,7 @@ _addTest(function(canvas, ctx) {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textAlign = 'right';
- ctx.fillText('EE ', 100, 37.5);
+ ctx.fillText('EE ', 150, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}), 500);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html
index 3454cfb6fba..30727c858e4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html
@@ -14,7 +14,7 @@
<body class="show_output">
<h1>2d.text.draw.space.collapse.other</h1>
-<p class="desc">Space characters are converted to U+0020, and collapsed (per CSS)</p>
+<p class="desc">Space characters are converted to U+0020, and are NOT collapsed</p>
<span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span>
@@ -23,7 +23,7 @@
<p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt="">
<ul id="d"></ul>
<script>
-var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)");
+var t = async_test("Space characters are converted to U+0020, and are NOT collapsed");
_addTest(function(canvas, ctx) {
ctx.font = '50px CanvasTest';
@@ -32,7 +32,7 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5);
+ ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}), 500);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html
index 20c5f70569d..23405071725 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html
@@ -14,7 +14,7 @@
<body class="show_output">
<h1>2d.text.draw.space.collapse.space</h1>
-<p class="desc">Space characters are converted to U+0020, and collapsed (per CSS)</p>
+<p class="desc">Space characters are converted to U+0020, and are NOT collapsed</p>
<span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span>
@@ -23,7 +23,7 @@
<p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt="">
<ul id="d"></ul>
<script>
-var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)");
+var t = async_test("Space characters are converted to U+0020, and are NOT collapsed");
_addTest(function(canvas, ctx) {
ctx.font = '50px CanvasTest';
@@ -32,7 +32,7 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E EE', -100, 37.5);
+ ctx.fillText('E EE', -150, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}), 500);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html
index c06efba5c85..cee64201eed 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html
@@ -14,7 +14,7 @@
<body class="show_output">
<h1>2d.text.draw.space.collapse.start</h1>
-<p class="desc">Space characters at the start of a line are collapsed (per CSS)</p>
+<p class="desc">Space characters at the start of a line are NOT collapsed</p>
<span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span>
@@ -23,7 +23,7 @@
<p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt="">
<ul id="d"></ul>
<script>
-var t = async_test("Space characters at the start of a line are collapsed (per CSS)");
+var t = async_test("Space characters at the start of a line are NOT collapsed");
_addTest(function(canvas, ctx) {
ctx.font = '50px CanvasTest';
@@ -32,7 +32,7 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText(' EE', 0, 37.5);
+ ctx.fillText(' EE', -50, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}), 500);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html
index 7f11506b382..12e1d60e568 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html
@@ -20,7 +20,7 @@ var t = async_test("");
_addTest(function(canvas, ctx) {
ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif';
- _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font\", sans-serif'");
+ _assert(['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font), "['italic small-caps 12px \"Unknown Font\", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font)");
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex2.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex2.html
new file mode 100644
index 00000000000..d85765fcd3a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex2.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.text.font.parse.complex2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
+<body class="show_output">
+
+<h1>2d.text.font.parse.complex2</h1>
+<p class="desc"></p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("");
+_addTest(function(canvas, ctx) {
+
+ ctx.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif';
+ _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font #2", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font #2\", sans-serif'");
+
+});
+</script>
+
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html
index b6f2ef50f76..1cf93c032d4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html
@@ -14,7 +14,7 @@
<body class="show_output">
<h1>2d.text.measure.width.space</h1>
-<p class="desc">Space characters are converted to U+0020 and collapsed (per CSS)</p>
+<p class="desc">Space characters are converted to U+0020 and NOT collapsed</p>
<span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span>
@@ -23,7 +23,7 @@
<ul id="d"></ul>
<script>
-var t = async_test("Space characters are converted to U+0020 and collapsed (per CSS)");
+var t = async_test("Space characters are converted to U+0020 and NOT collapsed");
_addTest(function(canvas, ctx) {
deferTest();
@@ -34,11 +34,11 @@ _addTest(function(canvas, ctx) {
ctx.font = '50px CanvasTest';
_assertSame(ctx.measureText('A B').width, 150, "ctx.measureText('A B').width", "150");
_assertSame(ctx.measureText('A B').width, 200, "ctx.measureText('A B').width", "200");
- _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 150, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "150");
+ _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 650, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "650");
_assert(ctx.measureText('A \x0b B').width >= 200, "ctx.measureText('A \\x0b B').width >= 200");
- _assertSame(ctx.measureText(' AB').width, 100, "ctx.measureText(' AB').width", "100");
- _assertSame(ctx.measureText('AB ').width, 100, "ctx.measureText('AB ').width", "100");
+ _assertSame(ctx.measureText(' AB').width, 150, "ctx.measureText(' AB').width", "150");
+ _assertSame(ctx.measureText('AB ').width, 150, "ctx.measureText('AB ').width", "150");
}), 500);
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html
new file mode 100644
index 00000000000..1670d642951
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.CSSRGB</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.CSSRGB</h1>
+<p class="desc">CSSRGB works as color input</p>
+
+
+<script>
+var t = async_test("CSSRGB works as color input");
+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.fillStyle = new CSSRGB(1, 0, 1);
+ _assertSame(ctx.fillStyle, '#ff00ff', "ctx.fillStyle", "'#ff00ff'");
+ ctx.fillRect(0, 0, 100, 50);
+ _assertPixel(canvas, 50,25, 255,0,255,255);
+
+ const color = new CSSRGB(0, CSS.percent(50), 0);
+ ctx.fillStyle = color;
+ _assertSame(ctx.fillStyle, '#008000', "ctx.fillStyle", "'#008000'");
+ ctx.fillRect(0, 0, 100, 50);
+ _assertPixel(canvas, 50,25, 0,128,0,255);
+ color.g = 0;
+ ctx.fillStyle = color;
+ _assertSame(ctx.fillStyle, '#000000', "ctx.fillStyle", "'#000000'");
+ ctx.fillRect(0, 0, 100, 50);
+ _assertPixel(canvas, 50,25, 0,0,0,255);
+
+ color.alpha = 0;
+ ctx.fillStyle = color;
+ _assertSame(ctx.fillStyle, 'rgba(0, 0, 0, 0)', "ctx.fillStyle", "'rgba(0, 0, 0, 0)'");
+ ctx.reset();
+ color.alpha = 0.5;
+ ctx.fillStyle = color;
+ ctx.fillRect(0, 0, 100, 50);
+ _assertPixel(canvas, 50,25, 0,0,0,128);
+
+ ctx.fillStyle = new CSSHSL(CSS.deg(0), 1, 1).toRGB();
+ _assertSame(ctx.fillStyle, '#ffffff', "ctx.fillStyle", "'#ffffff'");
+ ctx.fillRect(0, 0, 100, 50);
+ _assertPixel(canvas, 50,25, 255,255,255,255);
+
+ color.alpha = 1;
+ color.g = 1;
+ ctx.fillStyle = color;
+ ctx.fillRect(0, 0, 100, 50);
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.alpha.png
new file mode 100644
index 00000000000..af5ac0f07d6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.alpha.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.color.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.color.png
new file mode 100644
index 00000000000..af5ac0f07d6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.color.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.png
new file mode 100644
index 00000000000..552e6ee44b1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.multiple.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.multiple.png
new file mode 100644
index 00000000000..86122450d3a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.multiple.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html
index 0dda6c0c235..02ca008518f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html
@@ -22,9 +22,11 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(25, 0, 75, 0);
g.addColorStop(0.4, '#0f0');
g.addColorStop(0.6, '#0f0');
+
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
_assertPixelApprox(canvas, 20,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js
index 66fc180e7e9..d6c89616613 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js
@@ -18,9 +18,11 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(25, 0, 75, 0);
g.addColorStop(0.4, '#0f0');
g.addColorStop(0.6, '#0f0');
+
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
_assertPixelApprox(canvas, 20,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.overlap.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.overlap.png
new file mode 100644
index 00000000000..5c2bb964e0f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.overlap.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.vertical.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.vertical.png
new file mode 100644
index 00000000000..37d6a00c627
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.vertical.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html
index 71d5cb85dd6..27579fc829b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html
@@ -22,6 +22,7 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js
index 3b86cec3afc..916b1cb9779 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js
@@ -18,6 +18,7 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html
index 1b3851cd99a..9cf2c7350fe 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html
@@ -22,6 +22,7 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js
index f6ab1d93487..607ad85ae74 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js
@@ -18,6 +18,7 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html
new file mode 100644
index 00000000000..59f09644619
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.zerosize.fillText</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.zerosize.fillText</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+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.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+
+ var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+ g.addColorStop(0, '#f00');
+ g.addColorStop(1, '#f00');
+ ctx.fillStyle = g;
+ ctx.font = '100px sans-serif';
+ ctx.fillText("AA", 0, 50);
+ _assertGreen(ctx, 100, 50);
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js
new file mode 100644
index 00000000000..417b564e6d9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.zerosize.fillText
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("");
+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.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+
+ var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+ g.addColorStop(0, '#f00');
+ g.addColorStop(1, '#f00');
+ ctx.fillStyle = g;
+ ctx.font = '100px sans-serif';
+ ctx.fillText("AA", 0, 50);
+ _assertGreen(ctx, 100, 50);
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html
index 3b66f6c12ad..562f46796c4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html
@@ -22,6 +22,7 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js
index 7e215017485..b969be6f850 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js
@@ -18,6 +18,7 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html
index e7fd7e7858b..de1e57bbcca 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html
@@ -22,6 +22,7 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js
index d7344fb4e61..b9884d4adf6 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js
@@ -18,6 +18,7 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html
new file mode 100644
index 00000000000..153ec102ac6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.zerosize.strokeText</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.zerosize.strokeText</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+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.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+
+ var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+ g.addColorStop(0, '#f00');
+ g.addColorStop(1, '#f00');
+ ctx.strokeStyle = g;
+ ctx.font = '100px sans-serif';
+ ctx.strokeText("AA", 0, 50);
+ _assertGreen(ctx, 100, 50);
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js
new file mode 100644
index 00000000000..f0d71926276
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.zerosize.strokeText
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("");
+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.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+
+ var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+ g.addColorStop(0, '#f00');
+ g.addColorStop(1, '#f00');
+ ctx.strokeStyle = g;
+ ctx.font = '100px sans-serif';
+ ctx.strokeText("AA", 0, 50);
+ _assertGreen(ctx, 100, 50);
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html
index bc10ecee537..6c8f8ec38a8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html
@@ -8,7 +8,7 @@
<h1>2d.gradient.linear.nonfinite</h1>
<p class="desc">createLinearGradient() throws TypeError if arguments are not finite</p>
-
+<p class="notes">Defined in "Web IDL" (draft)
<script>
var t = async_test("createLinearGradient() throws TypeError if arguments are not finite");
var t_pass = t.done.bind(t);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js
index 87f689186bb..9fd4949d7db 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js
@@ -1,7 +1,7 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.gradient.linear.nonfinite
// Description:createLinearGradient() throws TypeError if arguments are not finite
-// Note:
+// Note:<p class="notes">Defined in "Web IDL" (draft)
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html
index 7ea9d84a4c0..6d229ea3d5a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html
@@ -22,8 +22,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var g = offscreenCanvas2.getContext('2d').createLinearGradient(0, 0, 100, 0);
+ var g = new OffscreenCanvas(100, 50).getContext('2d').createLinearGradient(0, 0, 100, 0);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js
index f877d596ddf..1afebdea1b0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js
@@ -18,8 +18,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var g = offscreenCanvas2.getContext('2d').createLinearGradient(0, 0, 100, 0);
+ var g = new OffscreenCanvas(100, 50).getContext('2d').createLinearGradient(0, 0, 100, 0);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html
index 51160c586f2..3db5afeeb54 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html
@@ -22,6 +22,15 @@ t.step(function() {
var g = ctx.createLinearGradient(0, 0, 100, 0);
assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, ""); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'rgb(NaN%, NaN%, NaN%)'); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, null); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, undefined); });
+
+ var g = ctx.createRadialGradient(0, 0, 0, 100, 0, 0);
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, ""); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'rgb(NaN%, NaN%, NaN%)'); });
assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); });
assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); });
assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, null); });
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js
index 40e84ba42be..33b524fbed2 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js
@@ -18,6 +18,15 @@ t.step(function() {
var g = ctx.createLinearGradient(0, 0, 100, 0);
assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, ""); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'rgb(NaN%, NaN%, NaN%)'); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, null); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, undefined); });
+
+ var g = ctx.createRadialGradient(0, 0, 0, 100, 0, 0);
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, ""); });
+ assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'rgb(NaN%, NaN%, NaN%)'); });
assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); });
assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); });
assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, null); });
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.html
new file mode 100644
index 00000000000..779b941d20b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.object.return</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.gradient.object.return</h1>
+<p class="desc">createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient</p>
+
+
+<script>
+var t = async_test("createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient");
+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');
+
+ window.CanvasGradient.prototype.thisImplementsCanvasGradient = true;
+
+ var g1 = ctx.createLinearGradient(0, 0, 100, 0);
+ _assertDifferent(g1.addColorStop, undefined, "g1.addColorStop", "undefined");
+ _assertSame(g1.thisImplementsCanvasGradient, true, "g1.thisImplementsCanvasGradient", "true");
+
+ var g2 = ctx.createRadialGradient(0, 0, 10, 0, 0, 20);
+ _assertDifferent(g2.addColorStop, undefined, "g2.addColorStop", "undefined");
+ _assertSame(g2.thisImplementsCanvasGradient, true, "g2.thisImplementsCanvasGradient", "true");
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.js
new file mode 100644
index 00000000000..a279eed4f3e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.object.return
+// Description:createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient");
+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');
+
+ self.CanvasGradient.prototype.thisImplementsCanvasGradient = true;
+
+ var g1 = ctx.createLinearGradient(0, 0, 100, 0);
+ _assertDifferent(g1.addColorStop, undefined, "g1.addColorStop", "undefined");
+ _assertSame(g1.thisImplementsCanvasGradient, true, "g1.thisImplementsCanvasGradient", "true");
+
+ var g2 = ctx.createRadialGradient(0, 0, 10, 0, 0, 20);
+ _assertDifferent(g2.addColorStop, undefined, "g2.addColorStop", "undefined");
+ _assertSame(g2.thisImplementsCanvasGradient, true, "g2.thisImplementsCanvasGradient", "true");
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.html
new file mode 100644
index 00000000000..aa72183ca5d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.object.type</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.gradient.object.type</h1>
+<p class="desc">window.CanvasGradient exists and has the right properties</p>
+
+<p class="notes">Defined in "Web IDL" (draft)
+<script>
+var t = async_test("window.CanvasGradient exists and has the right properties");
+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');
+
+ _assertDifferent(window.CanvasGradient, undefined, "window.CanvasGradient", "undefined");
+ _assertDifferent(window.CanvasGradient.prototype.addColorStop, undefined, "window.CanvasGradient.prototype.addColorStop", "undefined");
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.js
new file mode 100644
index 00000000000..e0101dfca41
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.object.type
+// Description:window.CanvasGradient exists and has the right properties
+// Note:<p class="notes">Defined in "Web IDL" (draft)
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("window.CanvasGradient exists and has the right properties");
+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');
+
+ _assertDifferent(self.CanvasGradient, undefined, "self.CanvasGradient", "undefined");
+ _assertDifferent(self.CanvasGradient.prototype.addColorStop, undefined, "self.CanvasGradient.prototype.addColorStop", "undefined");
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html
index 9a07ec4dc2f..4a639778ccd 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js
index 806a83f7a53..114dab0a219 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html
index 1ab27b46c41..94fe289b1a4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js
index 2bb0860a6d2..e6f53fb9992 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html
index 87cac451d64..7cf9867dba8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js
index a9c859e7cea..132d131bcae 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html
index 649b83cc8f8..27f75a8a743 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js
index 8223f526554..9534174757b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html
index 6ad51c17955..b46155701c9 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js
index a1eb55f2ecc..fffce0f9f2f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html
index 7de944a5209..5c4d8125265 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html
@@ -21,19 +21,23 @@ t.step(function() {
var ctx = canvas.getContext('2d');
var tol = 1; // tolerance to avoid antialiasing artifacts
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = '#f00';
ctx.beginPath();
ctx.moveTo(30+tol, 40);
ctx.lineTo(110, -20+tol);
ctx.lineTo(110, 100-tol);
ctx.fill();
+
var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js
index 0d211a0c67a..5bd3f5eafa9 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js
@@ -17,19 +17,23 @@ t.step(function() {
var ctx = canvas.getContext('2d');
var tol = 1; // tolerance to avoid antialiasing artifacts
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = '#f00';
ctx.beginPath();
ctx.moveTo(30+tol, 40);
ctx.lineTo(110, -20+tol);
ctx.lineTo(110, 100-tol);
ctx.fill();
+
var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html
index a748546c1a8..1dec145e58a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html
@@ -21,19 +21,23 @@ t.step(function() {
var ctx = canvas.getContext('2d');
var tol = 1; // tolerance to avoid antialiasing artifacts
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = '#0f0';
ctx.beginPath();
ctx.moveTo(30-tol, 40);
ctx.lineTo(110, -20-tol);
ctx.lineTo(110, 100+tol);
ctx.fill();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js
index 2f561598b9f..31638cff3d5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js
@@ -17,19 +17,23 @@ t.step(function() {
var ctx = canvas.getContext('2d');
var tol = 1; // tolerance to avoid antialiasing artifacts
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = '#0f0';
ctx.beginPath();
ctx.moveTo(30-tol, 40);
ctx.lineTo(110, -20-tol);
ctx.lineTo(110, 100+tol);
ctx.fill();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html
index 802006beecd..6cffa28175a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js
index 731ee8f807c..85a9eae4054 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html
index 3786e180f3b..52319ef6126 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js
index d046809a314..7f5ad50ff39 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html
index db269a9b926..f0da2c2742a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js
index bc48654ece5..37ed851ab31 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html
index 23de3b00f86..3f255027a16 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js
index ffc1040d0b0..0f36051e6a1 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html
index bbb2ecbcdca..1ef80a568ee 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html
@@ -22,12 +22,14 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(0.993, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js
index 792d9e7852b..3c9131dbb3f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js
@@ -18,12 +18,14 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(0.993, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html
index 8ba0476938d..4f068bbda57 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html
@@ -8,7 +8,7 @@
<h1>2d.gradient.radial.nonfinite</h1>
<p class="desc">createRadialGradient() throws TypeError if arguments are not finite</p>
-
+<p class="notes">Defined in "Web IDL" (draft)
<script>
var t = async_test("createRadialGradient() throws TypeError if arguments are not finite");
var t_pass = t.done.bind(t);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js
index dd25e607b2c..641a341ecc0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js
@@ -1,7 +1,7 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.gradient.radial.nonfinite
// Description:createRadialGradient() throws TypeError if arguments are not finite
-// Note:
+// Note:<p class="notes">Defined in "Web IDL" (draft)
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html
index 6c65f23960a..61fed27df87 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js
index d7beb71d2f2..b23eb81d148 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html
index 8f4c48ebc12..814beccf510 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js
index 6c753e38b10..44eb4f4b2ce 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html
index 5cfd30876d6..632ada6b9ce 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html
@@ -22,12 +22,14 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
g.addColorStop(0, '#0f0');
g.addColorStop(0.001, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js
index 70593ceb292..16d0c1a8ee0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js
@@ -18,12 +18,14 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
g.addColorStop(0, '#0f0');
g.addColorStop(0.001, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html
index 983071ec653..38235188133 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js
index 21bbce1e741..853ad165a3f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html
index bd239249882..af5bbd78971 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html
@@ -22,6 +22,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150);
g.addColorStop(0, '#f00');
g.addColorStop(0.01, '#0f0');
@@ -29,6 +30,7 @@ t.step(function() {
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js
index 75abd38d5d7..434c27b0b1f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js
@@ -18,6 +18,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150);
g.addColorStop(0, '#f00');
g.addColorStop(0.01, '#0f0');
@@ -25,6 +26,7 @@ t.step(function() {
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html
index bdaed6f7daa..1cf578bc80d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html
@@ -22,11 +22,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js
index b2f3b0b4102..34fb0caa448 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js
@@ -18,11 +18,13 @@ t.step(function() {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
+
var g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50);
g.addColorStop(0, '#f00');
g.addColorStop(1, '#f00');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html
index 6f66f500e37..f82a259e439 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html
@@ -22,13 +22,16 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js
index 6f6b882416a..510723f009d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js
@@ -18,13 +18,16 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 50,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html
index 9efa9d6363c..ab7b7bbeb56 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html
@@ -10,38 +10,24 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
-});
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js
index 776f1dbabd8..14cfcbc9939 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js
@@ -6,37 +6,24 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html
index 9fa124277ea..66e301a002f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html
@@ -20,13 +20,15 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#f00';
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
_assertPixel(canvas, 1,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js
index 11c307653d5..f6c24c82ca2 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js
@@ -16,13 +16,15 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#f00';
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
_assertPixel(canvas, 1,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html
new file mode 100644
index 00000000000..1edb4fd2278
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.basic.type</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.pattern.basic.type</h1>
+<p class="desc"></p>
+
+
+<script>
+promise_test(async t => {
+
+ var canvas = new OffscreenCanvas(100, 50);
+ var ctx = canvas.getContext('2d');
+
+ _assertDifferent(window.CanvasPattern, undefined, "window.CanvasPattern", "undefined");
+
+ window.CanvasPattern.prototype.thisImplementsCanvasPattern = true;
+
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ _assert(pattern.thisImplementsCanvasPattern, "pattern.thisImplementsCanvasPattern");
+
+}, "");
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js
new file mode 100644
index 00000000000..56a8a7d23cd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.basic.type
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+promise_test(async t => {
+
+ var canvas = new OffscreenCanvas(100, 50);
+ var ctx = canvas.getContext('2d');
+
+ _assertDifferent(self.CanvasPattern, undefined, "self.CanvasPattern", "undefined");
+
+ self.CanvasPattern.prototype.thisImplementsCanvasPattern = true;
+
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ _assert(pattern.thisImplementsCanvasPattern, "pattern.thisImplementsCanvasPattern");
+ t.done();
+}, "");
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html
index c7f61889ad5..7100c8313fc 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html
@@ -25,11 +25,13 @@ t.step(function() {
_assertSame(canvas.width, 0, "canvas.width", "0");
_assertSame(canvas.height, 10, "canvas.height", "10");
assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(canvas, 'repeat'); });
+
canvas.width = 10;
canvas.height = 0;
_assertSame(canvas.width, 10, "canvas.width", "10");
_assertSame(canvas.height, 0, "canvas.height", "0");
assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(canvas, 'repeat'); });
+
canvas.width = 0;
canvas.height = 0;
_assertSame(canvas.width, 0, "canvas.width", "0");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js
index caeff7cdfab..9bf487cf747 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js
@@ -21,11 +21,13 @@ t.step(function() {
_assertSame(canvas.width, 0, "canvas.width", "0");
_assertSame(canvas.height, 10, "canvas.height", "10");
assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(canvas, 'repeat'); });
+
canvas.width = 10;
canvas.height = 0;
_assertSame(canvas.width, 10, "canvas.width", "10");
_assertSame(canvas.height, 0, "canvas.height", "0");
assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(canvas, 'repeat'); });
+
canvas.width = 0;
canvas.height = 0;
_assertSame(canvas.width, 0, "canvas.width", "0");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html
index fbb7e5266e8..bdf89021bb1 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html
@@ -10,36 +10,22 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var pattern = offscreenCanvas2.getContext('2d').createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+
+ var pattern = new OffscreenCanvas(100, 50).getContext('2d').createPattern(img, 'no-repeat');
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js
index bd24b44b0c9..d9004fc028b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js
@@ -6,35 +6,22 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var pattern = offscreenCanvas2.getContext('2d').createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+
+ var pattern = new OffscreenCanvas(100, 50).getContext('2d').createPattern(img, 'no-repeat');
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html
index 4297814be97..fbec25862d1 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html
@@ -8,7 +8,7 @@
<h1>2d.pattern.image.null</h1>
<p class="desc"></p>
-
+<p class="notes">Defined in "Web IDL" (draft)
<script>
var t = async_test("");
var t_pass = t.done.bind(t);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js
index c7d9969619b..a68ddfdbd72 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js
@@ -1,7 +1,7 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.pattern.image.null
// Description:
-// Note:
+// Note:<p class="notes">Defined in "Web IDL" (draft)
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html
index 469f2236fed..ff7355d2a46 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html
@@ -8,7 +8,7 @@
<h1>2d.pattern.image.string</h1>
<p class="desc"></p>
-
+<p class="notes">Defined in "Web IDL" (draft)
<script>
var t = async_test("");
var t_pass = t.done.bind(t);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js
index f8525e4a494..dc53d82292c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js
@@ -1,7 +1,7 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.pattern.image.string
// Description:
-// Note:
+// Note:<p class="notes">Defined in "Web IDL" (draft)
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html
index 475d8ddafac..845f823e7fb 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html
@@ -8,7 +8,7 @@
<h1>2d.pattern.image.undefined</h1>
<p class="desc"></p>
-
+<p class="notes">Defined in "Web IDL" (draft)
<script>
var t = async_test("");
var t_pass = t.done.bind(t);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js
index dbfdbe9a1e1..32f57494930 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js
@@ -1,7 +1,7 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.pattern.image.undefined
// Description:
-// Note:
+// Note:<p class="notes">Defined in "Web IDL" (draft)
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html
index 11586f5aa72..ebeb92c7f5a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html
@@ -20,15 +20,19 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
_assertPixel(canvas, 1,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js
index 3dde0ef9a07..8e4f9ed4473 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js
@@ -16,15 +16,19 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
_assertPixel(canvas, 1,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html
index 568140a8db3..042ebba3b76 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html
@@ -20,19 +20,23 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
_assertPixel(canvas, 1,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js
index fd70a2fcbb9..ed17db8127b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js
@@ -16,19 +16,23 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
+
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
_assertPixel(canvas, 1,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html
index a60a61efc26..8ab1c8eb402 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html
@@ -10,38 +10,25 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js
index 13c5dd28156..9ac4e1605c7 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js
@@ -6,37 +6,25 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html
index 4a254b3afcf..4bdd356df7a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -24,27 +19,19 @@ t.step(function() {
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(50, 0, 50, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 0);
- ctx.fillRect(-50, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.translate(50, 0);
+ ctx.fillRect(-50, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js
index 948da3a132a..6c4a1409b7d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -20,26 +15,19 @@ t.step(function() {
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(50, 0, 50, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 0);
- ctx.fillRect(-50, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.translate(50, 0);
+ ctx.fillRect(-50, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html
index 306428a6162..b9164ec6a94 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html
@@ -10,41 +10,29 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(50, 0, 50, 50);
- ctx.fillStyle = pattern;
- ctx.translate(50, 0);
- ctx.fillRect(-50, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 50, 50);
+
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(50, 0, 50, 50);
+
+ ctx.fillStyle = pattern;
+ ctx.translate(50, 0);
+ ctx.fillRect(-50, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js
index fa90ff652a2..d2fdd86022a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js
@@ -6,40 +6,29 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(50, 0, 50, 50);
- ctx.fillStyle = pattern;
- ctx.translate(50, 0);
- ctx.fillRect(-50, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/green.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 50, 50);
+
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(50, 0, 50, 50);
+
+ ctx.fillStyle = pattern;
+ ctx.translate(50, 0);
+ ctx.fillRect(-50, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html
index 556fca6beff..e2983948c2d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html
@@ -10,41 +10,29 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 25);
- ctx.fillRect(-50, -25, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 50, 25);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/red.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.translate(50, 25);
+ ctx.fillRect(-50, -25, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 50, 25);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js
index 834516e96a4..584a5d6cfdd 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js
@@ -6,40 +6,29 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 25);
- ctx.fillRect(-50, -25, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 50, 25);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/red.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.translate(50, 25);
+ ctx.fillRect(-50, -25, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 50, 25);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html
index c049b79aeb9..43a718d44aa 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html
@@ -10,43 +10,31 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- ctx.fillRect(-100, 0, 100, 50);
- ctx.fillRect(0, 50, 100, 50);
- ctx.fillRect(100, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/red.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
+ ctx.fillRect(-100, 0, 100, 50);
+ ctx.fillRect(0, 50, 100, 50);
+ ctx.fillRect(100, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js
index 93e7a312fb5..0b5fef95ce0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js
@@ -6,42 +6,31 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- ctx.fillRect(-100, 0, 100, 50);
- ctx.fillRect(0, 50, 100, 50);
- ctx.fillRect(100, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/red.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
+ ctx.fillRect(-100, 0, 100, 50);
+ ctx.fillRect(0, 50, 100, 50);
+ ctx.fillRect(100, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html
index f7305573c46..b63535c7065 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html
@@ -22,17 +22,20 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 25);
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 25, 100, 25);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 25);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
_assertPixel(canvas, 1,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js
index 7896c70def2..2fbe52af736 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js
@@ -18,17 +18,20 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 25);
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 25, 100, 25);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 25);
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 98,1, 0,255,0,255);
_assertPixel(canvas, 1,48, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html
index c5dc174416a..0b3645981e3 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html
@@ -10,43 +10,31 @@
<script>
-var t = async_test("Image patterns do not get flipped when painted");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rrgg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.save();
- ctx.translate(0, -103);
- ctx.fillRect(0, 103, 100, 50);
- ctx.restore();
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 25);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/rrgg-256x256.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.save();
+ ctx.translate(0, -103);
+ ctx.fillRect(0, 103, 100, 50);
+ ctx.restore();
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 25);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "Image patterns do not get flipped when painted");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js
index 56b072be4dd..b303b2d813b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js
@@ -6,42 +6,31 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Image patterns do not get flipped when painted");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rrgg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.save();
- ctx.translate(0, -103);
- ctx.fillRect(0, 103, 100, 50);
- ctx.restore();
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 25);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/rrgg-256x256.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'no-repeat');
+ ctx.fillStyle = pattern;
+ ctx.save();
+ ctx.translate(0, -103);
+ ctx.fillRect(0, 103, 100, 50);
+ ctx.restore();
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 25);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "Image patterns do not get flipped when painted");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html
index 9327111eb7a..b6647f776ed 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html
@@ -10,38 +10,25 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/green-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js
index 6e77679552a..37f4c04228c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js
@@ -6,37 +6,25 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/green-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html
index 098abc71651..54b24ac705b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html
@@ -10,39 +10,26 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rgrg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(-128, -78);
- ctx.fillRect(128, 78, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/rgrg-256x256.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.translate(-128, -78);
+ ctx.fillRect(128, 78, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js
index 28c8d07b6a4..efbd1c58469 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js
@@ -6,38 +6,26 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rgrg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(-128, -78);
- ctx.fillRect(128, 78, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/rgrg-256x256.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.translate(-128, -78);
+ ctx.fillRect(128, 78, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html
index 4ee7aac5fa8..a77ce2c6964 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html
@@ -10,36 +10,22 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/grgr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/ggrr-256x256.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
-});
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js
index 6b2228e558c..db707ecb0a6 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js
@@ -6,35 +6,22 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/grgr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/ggrr-256x256.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html
index ed1bb4243d4..10f380fed35 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html
@@ -10,38 +10,25 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rgrg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.translate(-128, -78);
- ctx.fillRect(128, 78, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+ var response = await fetch('/images/rgrg-256x256.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ ctx.translate(-128, -78);
+ ctx.fillRect(128, 78, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js
index fc3911fbb13..e58cddccfeb 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js
@@ -6,37 +6,25 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rgrg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.translate(-128, -78);
- ctx.fillRect(128, 78, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/rgrg-256x256.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ ctx.translate(-128, -78);
+ ctx.fillRect(128, 78, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html
index 420562c5efd..6558e07c5b6 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html
@@ -10,39 +10,26 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 25);
- ctx.fillRect(-50, -25, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/green-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.translate(50, 25);
+ ctx.fillRect(-50, -25, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js
index b4d6774ec73..4a173af0b40 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js
@@ -6,38 +6,26 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 25);
- ctx.fillRect(-50, -25, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/green-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = pattern;
+ ctx.translate(50, 25);
+ ctx.fillRect(-50, -25, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html
index ee2c477c936..494b72cfb94 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -24,26 +19,18 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 16);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/green-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-x');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js
index 157207a7c54..e776f7a008a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -20,25 +15,18 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 16);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/green-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-x');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html
index 0e9a92e51cb..6caef0cb1fa 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html
@@ -10,43 +10,31 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.translate(0, 16);
- ctx.fillRect(0, -16, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 16);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,25, 0,255,0,255);
- _assertPixel(canvas, 98,25, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/red-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-x');
+ ctx.fillStyle = pattern;
+ ctx.translate(0, 16);
+ ctx.fillRect(0, -16, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 16);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,25, 0,255,0,255);
+ _assertPixel(canvas, 98,25, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js
index 684d2b7b4cb..57c2102cc83 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js
@@ -6,42 +6,31 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.translate(0, 16);
- ctx.fillRect(0, -16, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 16);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,25, 0,255,0,255);
- _assertPixel(canvas, 98,25, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/red-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-x');
+ ctx.fillStyle = pattern;
+ ctx.translate(0, 16);
+ ctx.fillRect(0, -16, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 16);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,25, 0,255,0,255);
+ _assertPixel(canvas, 98,25, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html
index 83e8ef37dc8..b3229c8d875 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html
@@ -10,40 +10,28 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 16);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/red-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-x');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 16);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js
index bbb7b9055dd..e40f6aa2075 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js
@@ -6,39 +6,28 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 16);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/red-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-x');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 16);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html
index 48948452af0..d88f3a0ab65 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -24,26 +19,18 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 16, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/green-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-y');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js
index 0eec87ca75f..6a53b5dc4d2 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -20,25 +15,18 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 16, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/green-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-y');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html
index 79ca84193e8..59bfeb2abf1 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html
@@ -10,43 +10,31 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.translate(48, 0);
- ctx.fillRect(-48, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 16, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 50,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 50,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/red-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-y');
+ ctx.fillStyle = pattern;
+ ctx.translate(48, 0);
+ ctx.fillRect(-48, 0, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 16, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 50,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 50,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js
index c5f0f4bcc24..d59abb6e075 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js
@@ -6,42 +6,31 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.translate(48, 0);
- ctx.fillRect(-48, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 16, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 50,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 50,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/red-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-y');
+ ctx.fillStyle = pattern;
+ ctx.translate(48, 0);
+ ctx.fillRect(-48, 0, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 16, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 50,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 50,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html
index f7fcc3e45a6..ad2bd3383f3 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html
@@ -10,40 +10,28 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 16, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-
-});
+
+ var response = await fetch('/images/red-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-y');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 16, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js
index 7201c3f133c..c4feba10ca2 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js
@@ -6,39 +6,28 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 16, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+
+ var response = await fetch('/images/red-16x16.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat-y');
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 16, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html
index 550edecf1e1..c2197893d78 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html
@@ -10,38 +10,24 @@
<script>
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-1x1.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, "");
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 200, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/green-1x1.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, "");
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 200, 50);
-});
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+
+}, "");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js
index 9777e188fad..5aefc0dab3e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js
@@ -6,37 +6,24 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-1x1.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, "");
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 200, 50);
- _assertPixel(canvas, 1,1, 0,255,0,255);
- _assertPixel(canvas, 98,1, 0,255,0,255);
- _assertPixel(canvas, 1,48, 0,255,0,255);
- _assertPixel(canvas, 98,48, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/green-1x1.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, "");
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 200, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+}, "");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html
new file mode 100644
index 00000000000..2d73296395d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.transform.identity</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.pattern.transform.identity</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+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');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+ pattern.setTransform(new DOMMatrix());
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = '#f00';
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js
new file mode 100644
index 00000000000..a33c771346e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.transform.identity
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("");
+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');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+ pattern.setTransform(new DOMMatrix());
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = '#f00';
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html
new file mode 100644
index 00000000000..aa58ad119f4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.transform.infinity</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.pattern.transform.infinity</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+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');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+ pattern.setTransform({a: Infinity});
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = '#f00';
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js
new file mode 100644
index 00000000000..999739b8488
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.transform.infinity
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("");
+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');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+ pattern.setTransform({a: Infinity});
+
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = '#f00';
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, 0, 100, 50);
+
+ _assertPixel(canvas, 1,1, 0,255,0,255);
+ _assertPixel(canvas, 98,1, 0,255,0,255);
+ _assertPixel(canvas, 1,48, 0,255,0,255);
+ _assertPixel(canvas, 98,48, 0,255,0,255);
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.html
new file mode 100644
index 00000000000..f2420d4a2ba
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.transform.invalid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.pattern.transform.invalid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+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');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+ assert_throws_js(TypeError, function() { pattern.setTransform({a: 1, m11: 2}); });
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.js
new file mode 100644
index 00000000000..163951807fa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.transform.invalid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("");
+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');
+
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var pattern = ctx.createPattern(canvas2, 'no-repeat');
+ assert_throws_js(TypeError, function() { pattern.setTransform({a: 1, m11: 2}); });
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html
new file mode 100644
index 00000000000..c394ecdfe39
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.cross-layer-paths</title>
+<h1>2d.layer.cross-layer-paths</h1>
+<p class="desc">Checks that path defined in a layer is usable outside.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+
+ ctx.moveTo(50, 0); ctx.lineTo(50, 100); ctx.stroke();
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html
new file mode 100644
index 00000000000..f167ae00bdf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<link rel="match" href="2d.layer.cross-layer-paths-expected.html">
+<title>Canvas test: 2d.layer.cross-layer-paths</title>
+<h1>2d.layer.cross-layer-paths</h1>
+<p class="desc">Checks that path defined in a layer is usable outside.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ ctx.beginLayer();
+ ctx.translate(50, 0);
+ ctx.moveTo(0, 0);
+ ctx.endLayer();
+ ctx.lineTo(50, 100);
+ ctx.stroke();
+
+ const outputCanvas = document.getElementById("canvas");
+ outputCanvas.getContext('2d').drawImage(canvas, 0, 0);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html
index 2e1cb62c32a..5b1f7f949cc 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html
@@ -1,32 +1,24 @@
<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<html class="reftest-wait">
-<link rel="match" href="2d.layer.endlayer.unmatched-expected.html">
-<title>Canvas test: 2d.layer.endlayer.unmatched</title>
-<h1>2d.layer.endlayer.unmatched</h1>
-<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p>
-<canvas id="canvas" width="200" height="200">
+<link rel="match" href="2d.layer.cross-layer-paths-expected.html">
+<title>Canvas test: 2d.layer.cross-layer-paths</title>
+<h1>2d.layer.cross-layer-paths</h1>
+<p class="desc">Checks that path defined in a layer is usable outside.</p>
+<canvas id="canvas" width="100" height="50">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
<script id='myWorker' type='text/worker'>
self.onmessage = function(e) {
- const canvas = new OffscreenCanvas(200, 200);
+ const canvas = new OffscreenCanvas(100, 50);
const ctx = canvas.getContext('2d');
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
-
- ctx.globalAlpha = 0.5;
-
- // This endlayer call should no-op.
- ctx.endLayer();
-
ctx.beginLayer();
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
+ ctx.translate(50, 0);
+ ctx.moveTo(0, 0);
ctx.endLayer();
+ ctx.lineTo(50, 100);
+ ctx.stroke();
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html
deleted file mode 100644
index 607526e4376..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
-<title>Canvas test: 2d.layer.endlayer.alone</title>
-<h1>2d.layer.endlayer.alone</h1>
-<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p>
-<canvas id="canvas" width="200" height="200">
- <p class="fallback">FAIL (fallback content)</p>
-</canvas>
-<script>
- const canvas = document.getElementById("canvas");
- const ctx = canvas.getContext('2d');
-
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
- ctx.globalAlpha = 0.5;
-
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
-</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html
deleted file mode 100644
index e6dd85b7e26..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
-<title>Canvas test: 2d.layer.endlayer.unmatched</title>
-<h1>2d.layer.endlayer.unmatched</h1>
-<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p>
-<canvas id="canvas" width="200" height="200">
- <p class="fallback">FAIL (fallback content)</p>
-</canvas>
-<script>
- const canvas = document.getElementById("canvas");
- const ctx = canvas.getContext('2d');
-
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
-
- ctx.globalAlpha = 0.5;
-
- ctx.beginLayer();
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
- ctx.endLayer();
-</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html
deleted file mode 100644
index b204c49e5eb..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
-<link rel="match" href="2d.layer.endlayer.unmatched-expected.html">
-<title>Canvas test: 2d.layer.endlayer.unmatched</title>
-<h1>2d.layer.endlayer.unmatched</h1>
-<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p>
-<canvas id="canvas" width="200" height="200">
- <p class="fallback">FAIL (fallback content)</p>
-</canvas>
-<script>
- const canvas = new OffscreenCanvas(200, 200);
- const ctx = canvas.getContext('2d');
-
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
-
- ctx.globalAlpha = 0.5;
-
- // This endlayer call should no-op.
- ctx.endLayer();
-
- ctx.beginLayer();
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
- ctx.endLayer();
-
- const outputCanvas = document.getElementById("canvas");
- outputCanvas.getContext('2d').drawImage(canvas, 0, 0);
-</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html
new file mode 100644
index 00000000000..c0b11aa6115
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.invalid-calls.beginLayer-reset-endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.invalid-calls.beginLayer-reset-endLayer</h1>
+<p class="desc">Raises exception on beginLayer() + reset() + endLayer().</p>
+
+
+<script>
+var t = async_test("Raises exception on beginLayer() + reset() + endLayer().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.reset();
+ ctx.endLayer();
+ });
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js
new file mode 100644
index 00000000000..1c147d6f349
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.invalid-calls.beginLayer-reset-endLayer
+// Description:Raises exception on beginLayer() + reset() + endLayer().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Raises exception on beginLayer() + reset() + endLayer().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.reset();
+ ctx.endLayer();
+ });
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html
new file mode 100644
index 00000000000..022532b329d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.invalid-calls.beginLayer-restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.invalid-calls.beginLayer-restore</h1>
+<p class="desc">Raises exception on beginLayer() + restore().</p>
+
+
+<script>
+var t = async_test("Raises exception on beginLayer() + restore().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.restore();
+ });
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js
new file mode 100644
index 00000000000..1aa86635e65
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.invalid-calls.beginLayer-restore
+// Description:Raises exception on beginLayer() + restore().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Raises exception on beginLayer() + restore().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.restore();
+ });
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html
new file mode 100644
index 00000000000..26dd0eee4bc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.invalid-calls.beginLayer-save-endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.invalid-calls.beginLayer-save-endLayer</h1>
+<p class="desc">Raises exception on beginLayer() + save() + endLayer().</p>
+
+
+<script>
+var t = async_test("Raises exception on beginLayer() + save() + endLayer().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.save();
+ ctx.endLayer();
+ });
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js
new file mode 100644
index 00000000000..613921c67c2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.invalid-calls.beginLayer-save-endLayer
+// Description:Raises exception on beginLayer() + save() + endLayer().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Raises exception on beginLayer() + save() + endLayer().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.beginLayer();
+ ctx.save();
+ ctx.endLayer();
+ });
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html
new file mode 100644
index 00000000000..440249980ad
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.invalid-calls.endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.invalid-calls.endLayer</h1>
+<p class="desc">Raises exception on lone endLayer calls.</p>
+
+
+<script>
+var t = async_test("Raises exception on lone endLayer calls.");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.endLayer();
+ });
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js
new file mode 100644
index 00000000000..b2ba231b9c7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.invalid-calls.endLayer
+// Description:Raises exception on lone endLayer calls.
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Raises exception on lone endLayer calls.");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.endLayer();
+ });
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html
new file mode 100644
index 00000000000..c2b09961acf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.invalid-calls.save-beginLayer-restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.invalid-calls.save-beginLayer-restore</h1>
+<p class="desc">Raises exception on save() + beginLayer() + restore().</p>
+
+
+<script>
+var t = async_test("Raises exception on save() + beginLayer() + restore().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.save();
+ ctx.beginLayer();
+ ctx.restore();
+ });
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js
new file mode 100644
index 00000000000..d155379fcb3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.invalid-calls.save-beginLayer-restore
+// Description:Raises exception on save() + beginLayer() + restore().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Raises exception on save() + beginLayer() + restore().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.save();
+ ctx.beginLayer();
+ ctx.restore();
+ });
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html
new file mode 100644
index 00000000000..01b62d1e859
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.invalid-calls.save-endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.invalid-calls.save-endLayer</h1>
+<p class="desc">Raises exception on save() + endLayer().</p>
+
+
+<script>
+var t = async_test("Raises exception on save() + endLayer().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.save();
+ ctx.endLayer();
+ });
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js
new file mode 100644
index 00000000000..353c1b00cdc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.invalid-calls.save-endLayer
+// Description:Raises exception on save() + endLayer().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Raises exception on save() + endLayer().");
+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');
+
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ ctx.save();
+ ctx.endLayer();
+ });
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset-expected.html
new file mode 100644
index 00000000000..93131dca9cf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset-expected.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.reset</title>
+<h1>2d.layer.reset</h1>
+<p class="desc">Checks that reset discards any pending layers.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+
+ ctx.fillRect(10, 10, 75, 50);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.html
new file mode 100644
index 00000000000..6fae595a84b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<link rel="match" href="2d.layer.reset-expected.html">
+<title>Canvas test: 2d.layer.reset</title>
+<h1>2d.layer.reset</h1>
+<p class="desc">Checks that reset discards any pending layers.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ // Global states:
+ ctx.globalAlpha = 0.3;
+ ctx.globalCompositeOperation = 'source-in';
+ ctx.shadowOffsetX = -3;
+ ctx.shadowOffsetY = 3;
+ ctx.shadowColor = 'rgba(0, 30, 0, 0.3)';
+
+ ctx.beginLayer({filter: 'dropShadow', dx: -3, dy: 3});
+
+ // Layer states:
+ ctx.globalAlpha = 0.6;
+ ctx.globalCompositeOperation = 'source-in';
+ ctx.shadowOffsetX = -6;
+ ctx.shadowOffsetY = 6;
+ ctx.shadowColor = 'rgba(0, 60, 0, 0.6)';
+
+ ctx.reset();
+
+ ctx.fillRect(10, 10, 75, 50);
+
+ const outputCanvas = document.getElementById("canvas");
+ outputCanvas.getContext('2d').drawImage(canvas, 0, 0);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.w.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.w.html
new file mode 100644
index 00000000000..d050b90841a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.w.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<html class="reftest-wait">
+<link rel="match" href="2d.layer.reset-expected.html">
+<title>Canvas test: 2d.layer.reset</title>
+<h1>2d.layer.reset</h1>
+<p class="desc">Checks that reset discards any pending layers.</p>
+<canvas id="canvas" width="100" height="50">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script id='myWorker' type='text/worker'>
+ self.onmessage = function(e) {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ // Global states:
+ ctx.globalAlpha = 0.3;
+ ctx.globalCompositeOperation = 'source-in';
+ ctx.shadowOffsetX = -3;
+ ctx.shadowOffsetY = 3;
+ ctx.shadowColor = 'rgba(0, 30, 0, 0.3)';
+
+ ctx.beginLayer({filter: 'dropShadow', dx: -3, dy: 3});
+
+ // Layer states:
+ ctx.globalAlpha = 0.6;
+ ctx.globalCompositeOperation = 'source-in';
+ ctx.shadowOffsetX = -6;
+ ctx.shadowOffsetY = 6;
+ ctx.shadowColor = 'rgba(0, 60, 0, 0.6)';
+
+ ctx.reset();
+
+ ctx.fillRect(10, 10, 75, 50);
+
+ const bitmap = canvas.transferToImageBitmap();
+ self.postMessage(bitmap, bitmap);
+ };
+</script>
+<script>
+ const blob = new Blob([document.getElementById('myWorker').textContent]);
+ const worker = new Worker(URL.createObjectURL(blob));
+ worker.addEventListener('message', msg => {
+ const outputCtx = document.getElementById("canvas").getContext('2d');
+ outputCtx.drawImage(msg.data, 0, 0);
+ document.documentElement.classList.remove("reftest-wait");
+ });
+ worker.postMessage(null);
+</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html
new file mode 100644
index 00000000000..5e90134a250
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.layer.unclosed-nested</title>
+<h1>2d.layer.unclosed-nested</h1>
+<p class="desc">Check that layers are rendered even if not closed.</p>
+<canvas id="canvas" width="200" height="200">
+ <p class="fallback">FAIL (fallback content)</p>
+</canvas>
+<script>
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext('2d');
+
+ const canvas1 = document.createElement('canvas');
+ const ctx1 = canvas1.getContext('2d');
+ ctx1.fillStyle = 'rgba(0,255,0,1)';
+ ctx1.fillRect(70,70,75,50);
+
+ const canvas2 = document.createElement('canvas');
+ const ctx2 = canvas2.getContext('2d');
+ ctx2.fillStyle = 'rgba(225,0,0,1)';
+ ctx2.fillRect(50,50,75,50);
+ ctx2.drawImage(canvas1, 0, 0);
+
+ ctx.fillStyle = 'rgba(0,0,255,1)';
+ ctx.fillRect(60,60,75,50);
+ ctx.globalAlpha = 0.5;
+ ctx.drawImage(canvas2, 0, 0);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html
index 6a0e5cce717..b7be6d82423 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html
@@ -1,9 +1,9 @@
<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
-<link rel="match" href="2d.layer.endlayer.alone-expected.html">
-<title>Canvas test: 2d.layer.endlayer.alone</title>
-<h1>2d.layer.endlayer.alone</h1>
-<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p>
+<link rel="match" href="2d.layer.unclosed-nested-expected.html">
+<title>Canvas test: 2d.layer.unclosed-nested</title>
+<h1>2d.layer.unclosed-nested</h1>
+<p class="desc">Check that layers are rendered even if not closed.</p>
<canvas id="canvas" width="200" height="200">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
@@ -15,12 +15,16 @@
ctx.fillRect(60, 60, 75, 50);
ctx.globalAlpha = 0.5;
+ ctx.beginLayer();
ctx.fillStyle = 'rgba(225, 0, 0, 1)';
ctx.fillRect(50, 50, 75, 50);
+
+ ctx.beginLayer();
ctx.fillStyle = 'rgba(0, 255, 0, 1)';
ctx.fillRect(70, 70, 75, 50);
ctx.endLayer();
+ // Missing ctx.endLayer() here.
const outputCanvas = document.getElementById("canvas");
outputCanvas.getContext('2d').drawImage(canvas, 0, 0);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html
index ddb2671aaab..dd1c36ea471 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html
@@ -1,10 +1,10 @@
<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<html class="reftest-wait">
-<link rel="match" href="2d.layer.endlayer.alone-expected.html">
-<title>Canvas test: 2d.layer.endlayer.alone</title>
-<h1>2d.layer.endlayer.alone</h1>
-<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p>
+<link rel="match" href="2d.layer.unclosed-nested-expected.html">
+<title>Canvas test: 2d.layer.unclosed-nested</title>
+<h1>2d.layer.unclosed-nested</h1>
+<p class="desc">Check that layers are rendered even if not closed.</p>
<canvas id="canvas" width="200" height="200">
<p class="fallback">FAIL (fallback content)</p>
</canvas>
@@ -17,12 +17,16 @@
ctx.fillRect(60, 60, 75, 50);
ctx.globalAlpha = 0.5;
+ ctx.beginLayer();
ctx.fillStyle = 'rgba(225, 0, 0, 1)';
ctx.fillRect(50, 50, 75, 50);
+
+ ctx.beginLayer();
ctx.fillStyle = 'rgba(0, 255, 0, 1)';
ctx.fillRect(70, 70, 75, 50);
ctx.endLayer();
+ // Missing ctx.endLayer() here.
const bitmap = canvas.transferToImageBitmap();
self.postMessage(bitmap, bitmap);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html
new file mode 100644
index 00000000000..0a6e195ca86
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.valid-calls.beginLayer-endLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.valid-calls.beginLayer-endLayer</h1>
+<p class="desc">No exception raised on beginLayer() + endLayer().</p>
+
+
+<script>
+var t = async_test("No exception raised on beginLayer() + endLayer().");
+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.beginLayer();
+ ctx.save();
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js
new file mode 100644
index 00000000000..a10bcd98b75
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.valid-calls.beginLayer-endLayer
+// Description:No exception raised on beginLayer() + endLayer().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("No exception raised on beginLayer() + endLayer().");
+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.beginLayer();
+ ctx.save();
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html
new file mode 100644
index 00000000000..12abcc5270c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.valid-calls.beginLayer-save</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.valid-calls.beginLayer-save</h1>
+<p class="desc">No exception raised on beginLayer() + save().</p>
+
+
+<script>
+var t = async_test("No exception raised on beginLayer() + save().");
+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.beginLayer();
+ ctx.save();
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js
new file mode 100644
index 00000000000..03fbeeb4f48
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.valid-calls.beginLayer-save
+// Description:No exception raised on beginLayer() + save().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("No exception raised on beginLayer() + save().");
+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.beginLayer();
+ ctx.save();
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html
new file mode 100644
index 00000000000..2178138e8d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.valid-calls.beginLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.valid-calls.beginLayer</h1>
+<p class="desc">No exception raised on lone beginLayer() calls.</p>
+
+
+<script>
+var t = async_test("No exception raised on lone beginLayer() calls.");
+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.beginLayer();
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js
new file mode 100644
index 00000000000..e64be136d78
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js
@@ -0,0 +1,22 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.valid-calls.beginLayer
+// Description:No exception raised on lone beginLayer() calls.
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("No exception raised on lone beginLayer() calls.");
+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.beginLayer();
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.html
new file mode 100644
index 00000000000..156dd5abbdc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.valid-calls.restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.valid-calls.restore</h1>
+<p class="desc">No exception raised on lone restore() calls.</p>
+
+
+<script>
+var t = async_test("No exception raised on lone restore() calls.");
+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.restore();
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.js
new file mode 100644
index 00000000000..7417d12abe8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.js
@@ -0,0 +1,22 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.valid-calls.restore
+// Description:No exception raised on lone restore() calls.
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("No exception raised on lone restore() calls.");
+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.restore();
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html
new file mode 100644
index 00000000000..afe735764ec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.valid-calls.save-beginLayer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.valid-calls.save-beginLayer</h1>
+<p class="desc">No exception raised on save() + beginLayer().</p>
+
+
+<script>
+var t = async_test("No exception raised on save() + beginLayer().");
+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.save();
+ ctx.beginLayer();
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js
new file mode 100644
index 00000000000..773ba77a157
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.valid-calls.save-beginLayer
+// Description:No exception raised on save() + beginLayer().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("No exception raised on save() + beginLayer().");
+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.save();
+ ctx.beginLayer();
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.html
new file mode 100644
index 00000000000..2b2de23bb88
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.valid-calls.save</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.valid-calls.save</h1>
+<p class="desc">No exception raised on lone save() calls.</p>
+
+
+<script>
+var t = async_test("No exception raised on lone save() calls.");
+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.save();
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.js
new file mode 100644
index 00000000000..5bbf0386fe9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.js
@@ -0,0 +1,22 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.valid-calls.save
+// Description:No exception raised on lone save() calls.
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("No exception raised on lone save() calls.");
+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.save();
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html
new file mode 100644
index 00000000000..ec5aa6455e3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.valid-calls.save_reset_restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.valid-calls.save_reset_restore</h1>
+<p class="desc">No exception raised on save() + reset() + restore().</p>
+
+
+<script>
+var t = async_test("No exception raised on save() + reset() + restore().");
+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.save();
+ ctx.reset();
+ ctx.restore();
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js
new file mode 100644
index 00000000000..3636c94357d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.valid-calls.save_reset_restore
+// Description:No exception raised on save() + reset() + restore().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("No exception raised on save() + reset() + restore().");
+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.save();
+ ctx.reset();
+ ctx.restore();
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.html
new file mode 100644
index 00000000000..1682bca91c8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.layer.valid-calls.save_restore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.layer.valid-calls.save_restore</h1>
+<p class="desc">No exception raised on save() + restore().</p>
+
+
+<script>
+var t = async_test("No exception raised on save() + restore().");
+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.save();
+ ctx.restore();
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.js
new file mode 100644
index 00000000000..8607722df73
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.layer.valid-calls.save_restore
+// Description:No exception raised on save() + restore().
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("No exception raised on save() + restore().");
+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.save();
+ ctx.restore();
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.html
new file mode 100644
index 00000000000..0d1aa4be30e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.fill.noop</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.line.fill.noop</h1>
+<p class="desc">Filling a line draws nothing</p>
+
+
+<script>
+var t = async_test("Filling a line draws nothing");
+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.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = '#f00';
+ ctx.lineWidth = 20;
+ ctx.beginPath();
+ ctx.moveTo(10, 20);
+ ctx.lineTo(90, 30);
+ ctx.fill();
+ _assertPixel(canvas, 50,24, 0,255,0,255);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ _assertPixel(canvas, 50,26, 0,255,0,255);
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.js
new file mode 100644
index 00000000000..e3e8c14b3fb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.fill.noop
+// Description:Filling a line draws nothing
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Filling a line draws nothing");
+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.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = '#f00';
+ ctx.lineWidth = 20;
+ ctx.beginPath();
+ ctx.moveTo(10, 20);
+ ctx.lineTo(90, 30);
+ ctx.fill();
+ _assertPixel(canvas, 50,24, 0,255,0,255);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ _assertPixel(canvas, 50,26, 0,255,0,255);
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html
index d321c324fa0..76796034e9a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html
@@ -39,6 +39,7 @@ async_test(function(t) {
assert_equals(offscreenCanvas.height, 0);
}, "Test that offscreenCanvas's size is correct after being transferred to a worker.");
+
test(function() {
function testException(contextType) {
var worker = makeWorker(document.getElementById("myWorker").textContent);
@@ -49,14 +50,13 @@ test(function() {
});
}
testException('2d');
- testException('webgl');
-}, "Test that transfer an OffscreenCanvas that has a context throws exception.");
+}, "Test that transfer an OffscreenCanvas that already have a 2d context throws exception.");
test(function() {
var worker = makeWorker(document.getElementById("myWorker").textContent);
var offscreenCanvas = new OffscreenCanvas(10, 10);
worker.postMessage({offscreenCanvas}, [offscreenCanvas]);
- assert_throws_dom("InvalidStateError", function() {
+ assert_throws_dom("DataCloneError", function() {
worker.postMessage({offscreenCanvas}, [offscreenCanvas]);
});
}, "Test that transfer an OffscreenCanvas twice throws exception.");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html
index 603d5e5da42..765cf41b213 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html
@@ -25,6 +25,7 @@ t.step(function() {
ctx.shadowColor = 'rgba(255, 0, 0, 0.01)';
ctx.shadowOffsetY = 50;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 4);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js
index 0bc92ac4141..869aa017e7e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js
@@ -21,6 +21,7 @@ t.step(function() {
ctx.shadowColor = 'rgba(255, 0, 0, 0.01)';
ctx.shadowOffsetY = 50;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 4);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html
index 254d214c4cd..be2209608fc 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html
@@ -25,6 +25,7 @@ t.step(function() {
ctx.shadowColor = 'rgba(0, 0, 255, 0.5)';
ctx.shadowOffsetY = 50;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.png
new file mode 100644
index 00000000000..8764e89b371
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js
index ff543b3c800..dce91f2e4d3 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js
@@ -21,6 +21,7 @@ t.step(function() {
ctx.shadowColor = 'rgba(0, 0, 255, 0.5)';
ctx.shadowOffsetY = 50;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html
index 2c50c0d748a..7239b3cea7b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html
@@ -27,6 +27,7 @@ t.step(function() {
ctx.shadowOffsetY = 50;
ctx.globalAlpha = 0.5;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.png
new file mode 100644
index 00000000000..8764e89b371
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js
index d8bc071c85d..93fc665cedc 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js
@@ -23,6 +23,7 @@ t.step(function() {
ctx.shadowOffsetY = 50;
ctx.globalAlpha = 0.5;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html
index d86ee4c4bff..468db2a7166 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html
@@ -27,6 +27,7 @@ t.step(function() {
ctx.shadowOffsetY = 50;
ctx.globalAlpha = 0.707;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.png
new file mode 100644
index 00000000000..8764e89b371
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js
index 4fdb8ca7dc5..2be63d3effa 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js
@@ -23,6 +23,7 @@ t.step(function() {
ctx.shadowOffsetY = 50;
ctx.globalAlpha = 0.707;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html
index 4c1a9b08cb0..92ac9717f2a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html
@@ -26,6 +26,7 @@ t.step(function() {
ctx.shadowColor = '#00f';
ctx.shadowOffsetY = 50;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.png
new file mode 100644
index 00000000000..8764e89b371
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js
index be4b78d87c5..016616ac8c3 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js
@@ -22,6 +22,7 @@ t.step(function() {
ctx.shadowColor = '#00f';
ctx.shadowOffsetY = 50;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html
index 8f199766fe2..51d1a4a804d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html
@@ -23,15 +23,30 @@ t.step(function() {
ctx.shadowBlur = 1;
ctx.shadowBlur = -2;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
ctx.shadowBlur = 1;
ctx.shadowBlur = Infinity;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
ctx.shadowBlur = 1;
ctx.shadowBlur = -Infinity;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
ctx.shadowBlur = 1;
ctx.shadowBlur = NaN;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
+ ctx.shadowBlur = 1;
+ ctx.shadowBlur = 'string';
+ _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
+ ctx.shadowBlur = 1;
+ ctx.shadowBlur = true;
+ _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
+ ctx.shadowBlur = 1;
+ ctx.shadowBlur = false;
+ _assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0");
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js
index 303b43e8193..2e3a28b789e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js
@@ -19,15 +19,30 @@ t.step(function() {
ctx.shadowBlur = 1;
ctx.shadowBlur = -2;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
ctx.shadowBlur = 1;
ctx.shadowBlur = Infinity;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
ctx.shadowBlur = 1;
ctx.shadowBlur = -Infinity;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
ctx.shadowBlur = 1;
ctx.shadowBlur = NaN;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
+ ctx.shadowBlur = 1;
+ ctx.shadowBlur = 'string';
+ _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
+ ctx.shadowBlur = 1;
+ ctx.shadowBlur = true;
+ _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
+ ctx.shadowBlur = 1;
+ ctx.shadowBlur = false;
+ _assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0");
t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html
index 299826a5a2e..06495f6c317 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html
@@ -22,10 +22,13 @@ t.step(function() {
ctx.shadowBlur = 1;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
ctx.shadowBlur = 0.5;
_assertSame(ctx.shadowBlur, 0.5, "ctx.shadowBlur", "0.5");
+
ctx.shadowBlur = 1e6;
_assertSame(ctx.shadowBlur, 1e6, "ctx.shadowBlur", "1e6");
+
ctx.shadowBlur = 0;
_assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js
index c41588b50ed..d0292edaecd 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js
@@ -18,10 +18,13 @@ t.step(function() {
ctx.shadowBlur = 1;
_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
ctx.shadowBlur = 0.5;
_assertSame(ctx.shadowBlur, 0.5, "ctx.shadowBlur", "0.5");
+
ctx.shadowBlur = 1e6;
_assertSame(ctx.shadowBlur, 1e6, "ctx.shadowBlur", "1e6");
+
ctx.shadowBlur = 0;
_assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html
index 93a480b307b..ac1d9e73330 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html
@@ -23,12 +23,15 @@ t.step(function() {
ctx.shadowColor = '#00ff00';
ctx.shadowColor = 'bogus';
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
ctx.shadowColor = '#00ff00';
ctx.shadowColor = 'red bogus';
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
ctx.shadowColor = '#00ff00';
ctx.shadowColor = ctx;
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
ctx.shadowColor = '#00ff00';
ctx.shadowColor = undefined;
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js
index 67e0fa80bc0..c962f2508dd 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js
@@ -19,12 +19,15 @@ t.step(function() {
ctx.shadowColor = '#00ff00';
ctx.shadowColor = 'bogus';
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
ctx.shadowColor = '#00ff00';
ctx.shadowColor = 'red bogus';
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
ctx.shadowColor = '#00ff00';
ctx.shadowColor = ctx;
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
ctx.shadowColor = '#00ff00';
ctx.shadowColor = undefined;
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html
index acd36360a8f..340f11f54f3 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html
@@ -22,6 +22,7 @@ t.step(function() {
ctx.shadowColor = 'lime';
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
ctx.shadowColor = 'RGBA(0,255, 0,0)';
_assertSame(ctx.shadowColor, 'rgba(0, 255, 0, 0)', "ctx.shadowColor", "'rgba(0, 255, 0, 0)'");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js
index 02444723b4e..6d7eb0504d4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js
@@ -18,6 +18,7 @@ t.step(function() {
ctx.shadowColor = 'lime';
_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
ctx.shadowColor = 'RGBA(0,255, 0,0)';
_assertSame(ctx.shadowColor, 'rgba(0, 255, 0, 0)', "ctx.shadowColor", "'rgba(0, 255, 0, 0)'");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html
index be055aa37ce..d789284b0a5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html
@@ -26,18 +26,41 @@ t.step(function() {
ctx.shadowOffsetY = Infinity;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = -Infinity;
ctx.shadowOffsetY = -Infinity;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = NaN;
ctx.shadowOffsetY = NaN;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
+ ctx.shadowOffsetX = 1;
+ ctx.shadowOffsetY = 2;
+ ctx.shadowOffsetX = 'string';
+ ctx.shadowOffsetY = 'string';
+ _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+ _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
+ ctx.shadowOffsetX = 1;
+ ctx.shadowOffsetY = 2;
+ ctx.shadowOffsetX = true;
+ ctx.shadowOffsetY = true;
+ _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+ _assertSame(ctx.shadowOffsetY, 1, "ctx.shadowOffsetY", "1");
+
+ ctx.shadowOffsetX = 1;
+ ctx.shadowOffsetY = 2;
+ ctx.shadowOffsetX = false;
+ ctx.shadowOffsetY = false;
+ _assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
+ _assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js
index 37ae2e6b785..9eb89cd5814 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js
@@ -22,18 +22,41 @@ t.step(function() {
ctx.shadowOffsetY = Infinity;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = -Infinity;
ctx.shadowOffsetY = -Infinity;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = NaN;
ctx.shadowOffsetY = NaN;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
+ ctx.shadowOffsetX = 1;
+ ctx.shadowOffsetY = 2;
+ ctx.shadowOffsetX = 'string';
+ ctx.shadowOffsetY = 'string';
+ _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+ _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
+ ctx.shadowOffsetX = 1;
+ ctx.shadowOffsetY = 2;
+ ctx.shadowOffsetX = true;
+ ctx.shadowOffsetY = true;
+ _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+ _assertSame(ctx.shadowOffsetY, 1, "ctx.shadowOffsetY", "1");
+
+ ctx.shadowOffsetX = 1;
+ ctx.shadowOffsetY = 2;
+ ctx.shadowOffsetX = false;
+ ctx.shadowOffsetY = false;
+ _assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
+ _assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html
index 785966cb38e..82f5f0118d0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html
@@ -24,18 +24,22 @@ t.step(function() {
ctx.shadowOffsetY = 2;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
ctx.shadowOffsetX = 0.5;
ctx.shadowOffsetY = 0.25;
_assertSame(ctx.shadowOffsetX, 0.5, "ctx.shadowOffsetX", "0.5");
_assertSame(ctx.shadowOffsetY, 0.25, "ctx.shadowOffsetY", "0.25");
+
ctx.shadowOffsetX = -0.5;
ctx.shadowOffsetY = -0.25;
_assertSame(ctx.shadowOffsetX, -0.5, "ctx.shadowOffsetX", "-0.5");
_assertSame(ctx.shadowOffsetY, -0.25, "ctx.shadowOffsetY", "-0.25");
+
ctx.shadowOffsetX = 0;
ctx.shadowOffsetY = 0;
_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
+
ctx.shadowOffsetX = 1e6;
ctx.shadowOffsetY = 1e6;
_assertSame(ctx.shadowOffsetX, 1e6, "ctx.shadowOffsetX", "1e6");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js
index a6e047ee2b7..5881c5bca51 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js
@@ -20,18 +20,22 @@ t.step(function() {
ctx.shadowOffsetY = 2;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
ctx.shadowOffsetX = 0.5;
ctx.shadowOffsetY = 0.25;
_assertSame(ctx.shadowOffsetX, 0.5, "ctx.shadowOffsetX", "0.5");
_assertSame(ctx.shadowOffsetY, 0.25, "ctx.shadowOffsetY", "0.25");
+
ctx.shadowOffsetX = -0.5;
ctx.shadowOffsetY = -0.25;
_assertSame(ctx.shadowOffsetX, -0.5, "ctx.shadowOffsetX", "-0.5");
_assertSame(ctx.shadowOffsetY, -0.25, "ctx.shadowOffsetY", "-0.25");
+
ctx.shadowOffsetX = 0;
ctx.shadowOffsetY = 0;
_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
+
ctx.shadowOffsetX = 1e6;
ctx.shadowOffsetY = 1e6;
_assertSame(ctx.shadowOffsetX, 1e6, "ctx.shadowOffsetX", "1e6");
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.html
new file mode 100644
index 00000000000..46c50324488
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.blur.high</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.shadow.blur.high</h1>
+<p class="desc">Shadows look correct for large blurs</p>
+
+
+<script>
+var t = async_test("Shadows look correct for large blurs");
+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.fillStyle = '#ff0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowColor = '#00f';
+ ctx.shadowOffsetY = 0;
+ ctx.shadowBlur = 100;
+ ctx.fillRect(-200, -200, 200, 400);
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.worker.js
new file mode 100644
index 00000000000..8bd06da381b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.blur.high
+// Description:Shadows look correct for large blurs
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Shadows look correct for large blurs");
+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.fillStyle = '#ff0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowColor = '#00f';
+ ctx.shadowOffsetY = 0;
+ ctx.shadowBlur = 100;
+ ctx.fillRect(-200, -200, 200, 400);
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high.png
new file mode 100644
index 00000000000..743640b79f8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.html
new file mode 100644
index 00000000000..19a42a683cc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.blur.low</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.shadow.blur.low</h1>
+<p class="desc">Shadows look correct for small blurs</p>
+
+
+<script>
+var t = async_test("Shadows look correct for small blurs");
+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.fillStyle = '#ff0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowColor = '#00f';
+ ctx.shadowOffsetY = 25;
+ for (var x = 0; x < 100; ++x) {
+ ctx.save();
+ ctx.beginPath();
+ ctx.rect(x, 0, 1, 50);
+ ctx.clip();
+ ctx.shadowBlur = x;
+ ctx.fillRect(-200, -200, 500, 200);
+ ctx.restore();
+ }
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.worker.js
new file mode 100644
index 00000000000..67bc8c424e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.blur.low
+// Description:Shadows look correct for small blurs
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("Shadows look correct for small blurs");
+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.fillStyle = '#ff0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowColor = '#00f';
+ ctx.shadowOffsetY = 25;
+ for (var x = 0; x < 100; ++x) {
+ ctx.save();
+ ctx.beginPath();
+ ctx.rect(x, 0, 1, 50);
+ ctx.clip();
+ ctx.shadowBlur = x;
+ ctx.fillRect(-200, -200, 500, 200);
+ ctx.restore();
+ }
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low.png
new file mode 100644
index 00000000000..99fb651c21b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html
index ae046cfe19d..cae4235e8cf 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html
@@ -20,15 +20,17 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)';
ctx2.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#00f';
- ctx.drawImage(offscreenCanvas2, 0, -50);
+ ctx.drawImage(canvas2, 0, -50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.png
new file mode 100644
index 00000000000..8764e89b371
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js
index 21d6309c183..0fa74a20706 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js
@@ -16,15 +16,17 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)';
ctx2.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#00f';
- ctx.drawImage(offscreenCanvas2, 0, -50);
+ ctx.drawImage(canvas2, 0, -50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html
index 3ba1cf1fb06..f5784e914f5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html
@@ -20,15 +20,17 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#0f0';
ctx.shadowOffsetY = 50;
- ctx.drawImage(offscreenCanvas2, 0, -50);
+ ctx.drawImage(canvas2, 0, -50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js
index 8ec3f4acb3c..6a2d916a754 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js
@@ -16,15 +16,17 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 50);
+
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#0f0';
ctx.shadowOffsetY = 50;
- ctx.drawImage(offscreenCanvas2, 0, -50);
+ ctx.drawImage(canvas2, 0, -50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html
index 960d870923d..62b3f83272a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html
@@ -20,13 +20,15 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#f00';
ctx.shadowOffsetY = 50;
- ctx.drawImage(offscreenCanvas2, 0, -50);
+ ctx.drawImage(canvas2, 0, -50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js
index 7fd807bda4e..1b02897d62e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js
@@ -16,13 +16,15 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#f00';
ctx.shadowOffsetY = 50;
- ctx.drawImage(offscreenCanvas2, 0, -50);
+ ctx.drawImage(canvas2, 0, -50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html
index 2f1d31d7066..0f804535235 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html
@@ -20,19 +20,21 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 50, 50);
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(50, 0, 50, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- ctx.drawImage(offscreenCanvas2, 50, -50);
+ ctx.drawImage(canvas2, 50, -50);
ctx.shadowColor = '#f00';
- ctx.drawImage(offscreenCanvas2, -50, -50);
+ ctx.drawImage(canvas2, -50, -50);
+
_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/shadows/2d.shadow.canvas.transparent.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.js
index 1347eb095fe..6e468e28e00 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.js
@@ -16,19 +16,21 @@ t.step(function() {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
+ var canvas2 = new OffscreenCanvas(100, 50);
+ var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 50, 50);
+
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(50, 0, 50, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- ctx.drawImage(offscreenCanvas2, 50, -50);
+ ctx.drawImage(canvas2, 50, -50);
ctx.shadowColor = '#f00';
- ctx.drawImage(offscreenCanvas2, -50, -50);
+ ctx.drawImage(canvas2, -50, -50);
+
_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/shadows/2d.shadow.clip.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.html
index a762ab5f9f1..4df101d513c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.html
@@ -24,6 +24,7 @@ t.step(function() {
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(50, 0, 50, 50);
+
ctx.save();
ctx.beginPath();
ctx.rect(50, 0, 50, 50);
@@ -32,6 +33,7 @@ t.step(function() {
ctx.shadowOffsetX = 50;
ctx.fillRect(0, 0, 50, 50);
ctx.restore();
+
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 75,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js
index 2a6423a8b29..6b05ceb226f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js
@@ -20,6 +20,7 @@ t.step(function() {
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#f00';
ctx.fillRect(50, 0, 50, 50);
+
ctx.save();
ctx.beginPath();
ctx.rect(50, 0, 50, 50);
@@ -28,6 +29,7 @@ t.step(function() {
ctx.shadowOffsetX = 50;
ctx.fillRect(0, 0, 50, 50);
ctx.restore();
+
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 75,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html
index 31055d7200d..6a09ea53f36 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html
@@ -24,6 +24,7 @@ t.step(function() {
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(50, 0, 50, 50);
+
ctx.save();
ctx.beginPath();
ctx.rect(0, 0, 50, 50);
@@ -32,6 +33,7 @@ t.step(function() {
ctx.shadowOffsetX = 50;
ctx.fillRect(0, 0, 50, 50);
ctx.restore();
+
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 75,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js
index 2c6b8deacd4..4cdfcfdcfcd 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js
@@ -20,6 +20,7 @@ t.step(function() {
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(50, 0, 50, 50);
+
ctx.save();
ctx.beginPath();
ctx.rect(0, 0, 50, 50);
@@ -28,6 +29,7 @@ t.step(function() {
ctx.shadowOffsetX = 50;
ctx.fillRect(0, 0, 50, 50);
ctx.restore();
+
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 75,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html
index 3b62b233d14..d1732e9f5b7 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html
@@ -24,6 +24,7 @@ t.step(function() {
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(50, 0, 50, 50);
+
ctx.save();
ctx.beginPath();
ctx.rect(0, 0, 50, 50);
@@ -33,6 +34,7 @@ t.step(function() {
ctx.shadowOffsetX = 50;
ctx.fillRect(-50, 0, 50, 50);
ctx.restore();
+
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 75,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js
index c97f9e5c63a..6f8b79d1fea 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js
@@ -20,6 +20,7 @@ t.step(function() {
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(50, 0, 50, 50);
+
ctx.save();
ctx.beginPath();
ctx.rect(0, 0, 50, 50);
@@ -29,6 +30,7 @@ t.step(function() {
ctx.shadowOffsetX = 50;
ctx.fillRect(-50, 0, 50, 50);
ctx.restore();
+
_assertPixel(canvas, 25,25, 0,255,0,255);
_assertPixel(canvas, 75,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html
index e9a400f1e10..d6014fbd457 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html
@@ -27,6 +27,7 @@ t.step(function() {
ctx.shadowOffsetX = 100;
ctx.fillStyle = '#0f0';
ctx.fillRect(-100, 0, 200, 50);
+
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js
index 10baafad47e..28637706e15 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js
@@ -23,6 +23,7 @@ t.step(function() {
ctx.shadowOffsetX = 100;
ctx.fillStyle = '#0f0';
ctx.fillRect(-100, 0, 200, 50);
+
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html
index 0a4c515bac2..87f2e3ba0f7 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html
@@ -27,6 +27,7 @@ t.step(function() {
ctx.shadowBlur = 1;
ctx.fillStyle = '#0f0';
ctx.fillRect(-10, -10, 120, 70);
+
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js
index 20c89c1390c..a144446ec55 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js
@@ -23,6 +23,7 @@ t.step(function() {
ctx.shadowBlur = 1;
ctx.fillStyle = '#0f0';
ctx.fillRect(-10, -10, 120, 70);
+
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html
index 56218430ef4..f3cafa983ab 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html
@@ -27,6 +27,7 @@ t.step(function() {
ctx.shadowBlur = 10;
ctx.fillStyle = '#f00';
ctx.fillRect(200, 0, 100, 50);
+
_assertPixelApprox(canvas, 5,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js
index 1257b3f5749..ba29487eea0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js
@@ -23,6 +23,7 @@ t.step(function() {
ctx.shadowBlur = 10;
ctx.fillStyle = '#f00';
ctx.fillRect(200, 0, 100, 50);
+
_assertPixelApprox(canvas, 5,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html
index 384838584e0..199dd6c3fab 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html
@@ -29,6 +29,7 @@ t.step(function() {
ctx.shadowColor = '#00f';
ctx.fillStyle = gradient;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.png
new file mode 100644
index 00000000000..8764e89b371
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js
index 65d582dd790..0f9a6449c4b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js
@@ -25,6 +25,7 @@ t.step(function() {
ctx.shadowColor = '#00f';
ctx.fillStyle = gradient;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html
index c411b64e843..6746f03f3d8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html
@@ -29,6 +29,7 @@ t.step(function() {
ctx.shadowOffsetY = 50;
ctx.fillStyle = gradient;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js
index 2630acc1a4c..068b48bb6f8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js
@@ -25,6 +25,7 @@ t.step(function() {
ctx.shadowOffsetY = 50;
ctx.fillStyle = gradient;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html
index 852d4268fd5..7e7309e976e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html
@@ -29,6 +29,7 @@ t.step(function() {
ctx.shadowOffsetY = 50;
ctx.fillStyle = gradient;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js
index b08401426af..1102848ecbd 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js
@@ -25,6 +25,7 @@ t.step(function() {
ctx.shadowOffsetY = 50;
ctx.fillStyle = gradient;
ctx.fillRect(0, -50, 100, 50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html
index b2c7967d1a7..8259eb9ae5d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html
@@ -33,6 +33,7 @@ t.step(function() {
ctx.shadowColor = '#0f0';
ctx.fillStyle = gradient;
ctx.fillRect(0, -50, 100, 50);
+
_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/shadows/2d.shadow.gradient.transparent.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.js
index bc651c594ea..5fcf4ee93d0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.js
@@ -29,6 +29,7 @@ t.step(function() {
ctx.shadowColor = '#0f0';
ctx.fillStyle = gradient;
ctx.fillRect(0, -50, 100, 50);
+
_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/shadows/2d.shadow.image.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html
index 9d14a7233aa..f7f797fd0b5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("Shadows are drawn correctly for partially-transparent images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -24,21 +19,12 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#00f';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent50.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/transparent50.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 0, -50);
-});
+ _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
+
+}, "Shadows are drawn correctly for partially-transparent images");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.png
new file mode 100644
index 00000000000..8764e89b371
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js
index 5c290b06cb2..827bd2ce652 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are drawn correctly for partially-transparent images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -20,20 +15,12 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#00f';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent50.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/transparent50.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 0, -50);
+
+ _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
+ t.done();
+}, "Shadows are drawn correctly for partially-transparent images");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html
index b1066aa084f..5b959fdd92d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("Shadows are drawn for images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -24,21 +19,12 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#0f0';
ctx.shadowOffsetY = 50;
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/red.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 0, -50);
-});
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+
+}, "Shadows are drawn for images");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js
index 750326c8944..2d02232c683 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are drawn for images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -20,20 +15,12 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#0f0';
ctx.shadowOffsetY = 50;
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/red.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 0, -50);
+
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ t.done();
+}, "Shadows are drawn for images");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html
index a6710d727b0..7e2536c0522 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("Shadows are drawn correctly for scaled images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -24,23 +19,14 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0, 100, 50, -10, -50, 240, 50);
- _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
- _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/redtransparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 0, 0, 100, 50, -10, -50, 240, 50);
-});
+ _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+
+}, "Shadows are drawn correctly for scaled images");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js
index 14e4334f0e0..2c10381f98a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are drawn correctly for scaled images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -20,22 +15,14 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0, 100, 50, -10, -50, 240, 50);
- _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
- _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/redtransparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 0, 0, 100, 50, -10, -50, 240, 50);
+
+ _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+ t.done();
+}, "Shadows are drawn correctly for scaled images");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html
index be2e6ed5e69..7744ee153bc 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("Shadows are not drawn for areas outside image source rectangles");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -24,23 +19,14 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#f00';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 50, 0, 50, 50, 0, -50, 50, 50);
- _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
- _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/redtransparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 50, 0, 50, 50, 0, -50, 50, 50);
-});
+ _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+
+}, "Shadows are not drawn for areas outside image source rectangles");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js
index c63121c8022..94affdfb6ab 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are not drawn for areas outside image source rectangles");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -20,22 +15,14 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#f00';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 50, 0, 50, 50, 0, -50, 50, 50);
- _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
- _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/redtransparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 50, 0, 50, 50, 0, -50, 50, 50);
+
+ _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+ t.done();
+}, "Shadows are not drawn for areas outside image source rectangles");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html
index 23cafc60750..30db23ce76c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("Shadows are not drawn for transparent images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -24,21 +19,12 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#f00';
ctx.shadowOffsetY = 50;
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/transparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 0, -50);
-});
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+
+}, "Shadows are not drawn for transparent images");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js
index dbae8a5061e..c5421d70426 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are not drawn for transparent images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -20,20 +15,12 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#f00';
ctx.shadowOffsetY = 50;
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/transparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 0, -50);
+
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ t.done();
+}, "Shadows are not drawn for transparent images");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html
index 6567dacf523..9b3b206a264 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html
@@ -10,12 +10,7 @@
<script>
-var t = async_test("Shadows are not drawn for transparent parts of images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -26,25 +21,16 @@ t.step(function() {
ctx.fillRect(50, 0, 50, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 50, -50);
- ctx.shadowColor = '#f00';
- ctx.drawImage(bitmap, -50, -50);
- _assertPixel(canvas, 25,25, 0,255,0,255);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- _assertPixel(canvas, 75,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/redtransparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 50, -50);
+ ctx.shadowColor = '#f00';
+ ctx.drawImage(img, -50, -50);
-});
+ _assertPixel(canvas, 25,25, 0,255,0,255);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ _assertPixel(canvas, 75,25, 0,255,0,255);
+
+}, "Shadows are not drawn for transparent parts of images");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js
index c424274bb51..071c584fa84 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js
@@ -6,12 +6,7 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are not drawn for transparent parts of images");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
@@ -22,24 +17,16 @@ t.step(function() {
ctx.fillRect(50, 0, 50, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 50, -50);
- ctx.shadowColor = '#f00';
- ctx.drawImage(bitmap, -50, -50);
- _assertPixel(canvas, 25,25, 0,255,0,255);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- _assertPixel(canvas, 75,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/redtransparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ ctx.drawImage(img, 50, -50);
+ ctx.shadowColor = '#f00';
+ ctx.drawImage(img, -50, -50);
+
+ _assertPixel(canvas, 25,25, 0,255,0,255);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ _assertPixel(canvas, 75,25, 0,255,0,255);
+ t.done();
+}, "Shadows are not drawn for transparent parts of images");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html
index 04f6ee2e81a..c45654f9991 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html
@@ -10,36 +10,23 @@
<script>
-var t = async_test("Shadows are drawn correctly for partially-transparent fill patterns");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent50.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#00f';
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/transparent50.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowOffsetY = 50;
+ ctx.shadowColor = '#00f';
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
-});
+ _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
+
+}, "Shadows are drawn correctly for partially-transparent fill patterns");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.png
new file mode 100644
index 00000000000..8764e89b371
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js
index 8b29bfb064a..41a826a158f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js
@@ -6,35 +6,23 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are drawn correctly for partially-transparent fill patterns");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent50.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#00f';
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/transparent50.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowOffsetY = 50;
+ ctx.shadowColor = '#00f';
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
+
+ _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2);
+ t.done();
+}, "Shadows are drawn correctly for partially-transparent fill patterns");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html
index 64d6b59308b..4e372c0932d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html
@@ -10,36 +10,23 @@
<script>
-var t = async_test("Shadows are drawn for fill patterns");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 50;
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/red.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowColor = '#0f0';
+ ctx.shadowOffsetY = 50;
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
-});
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+
+}, "Shadows are drawn for fill patterns");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js
index db9aefeaf4d..7a8f7e84796 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js
@@ -6,35 +6,23 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are drawn for fill patterns");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 50;
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/red.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowColor = '#0f0';
+ ctx.shadowOffsetY = 50;
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
+
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ t.done();
+}, "Shadows are drawn for fill patterns");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html
index fe06c3afde1..72fa7b29f8e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html
@@ -10,36 +10,23 @@
<script>
-var t = async_test("Shadows are not drawn for transparent fill patterns");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetY = 50;
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/transparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowColor = '#f00';
+ ctx.shadowOffsetY = 50;
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
-});
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+
+}, "Shadows are not drawn for transparent fill patterns");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js
index b2ebc0ae2cf..8414db6d08c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js
@@ -6,35 +6,23 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are not drawn for transparent fill patterns");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetY = 50;
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/transparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.shadowColor = '#f00';
+ ctx.shadowOffsetY = 50;
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
+
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ t.done();
+}, "Shadows are not drawn for transparent fill patterns");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html
index 358113f07cd..6ad8ece009a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html
@@ -10,41 +10,27 @@
<script>
-var t = async_test("Shadows are not drawn for transparent parts of fill patterns");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(50, 0, 50, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- _assertPixel(canvas, 25,25, 0,255,0,255);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- _assertPixel(canvas, 75,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
+ var response = await fetch('/images/redtransparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(0, 0, 50, 50);
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(50, 0, 50, 50);
+ ctx.shadowOffsetY = 50;
+ ctx.shadowColor = '#0f0';
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
-});
+ _assertPixel(canvas, 25,25, 0,255,0,255);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ _assertPixel(canvas, 75,25, 0,255,0,255);
+
+}, "Shadows are not drawn for transparent parts of fill patterns");
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js
index cb963008f94..726a42d6cd4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js
@@ -6,40 +6,27 @@
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Shadows are not drawn for transparent parts of fill patterns");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+promise_test(async t => {
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(50, 0, 50, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- _assertPixel(canvas, 25,25, 0,255,0,255);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- _assertPixel(canvas, 75,25, 0,255,0,255);
- });
- }).then(t_pass, t_fail);
-});
+ var response = await fetch('/images/redtransparent.png')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ var pattern = ctx.createPattern(img, 'repeat');
+ ctx.fillStyle = '#f00';
+ ctx.fillRect(0, 0, 50, 50);
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(50, 0, 50, 50);
+ ctx.shadowOffsetY = 50;
+ ctx.shadowColor = '#0f0';
+ ctx.fillStyle = pattern;
+ ctx.fillRect(0, -50, 100, 50);
+
+ _assertPixel(canvas, 25,25, 0,255,0,255);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ _assertPixel(canvas, 75,25, 0,255,0,255);
+ t.done();
+}, "Shadows are not drawn for transparent parts of fill patterns");
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html
index 27edc8750ba..c569865a60c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html
@@ -30,6 +30,7 @@ t.step(function() {
ctx.moveTo(0, -25);
ctx.lineTo(100, -25);
ctx.stroke();
+
_assertPixel(canvas, 1,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
_assertPixel(canvas, 98,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js
index b62e6c75e56..9d7d0ec3210 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js
@@ -26,6 +26,7 @@ t.step(function() {
ctx.moveTo(0, -25);
ctx.lineTo(100, -25);
ctx.stroke();
+
_assertPixel(canvas, 1,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
_assertPixel(canvas, 98,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html
index 46f915b73e7..b170f88cf65 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html
@@ -33,6 +33,7 @@ t.step(function() {
ctx.moveTo(100, -25);
ctx.lineTo(150, -25);
ctx.stroke();
+
_assertPixel(canvas, 1,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
_assertPixel(canvas, 98,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js
index 21c588ac299..582915d28bf 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js
@@ -29,6 +29,7 @@ t.step(function() {
ctx.moveTo(100, -25);
ctx.lineTo(150, -25);
ctx.stroke();
+
_assertPixel(canvas, 1,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
_assertPixel(canvas, 98,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html
index 91bfd80d2b1..8bbb016bd5e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html
@@ -31,6 +31,7 @@ t.step(function() {
ctx.moveTo(25, -25);
ctx.lineTo(75, -25);
ctx.stroke();
+
_assertPixel(canvas, 1,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
_assertPixel(canvas, 98,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js
index aa607cd6efc..13108bec9e4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js
@@ -27,6 +27,7 @@ t.step(function() {
ctx.moveTo(25, -25);
ctx.lineTo(75, -25);
ctx.stroke();
+
_assertPixel(canvas, 1,25, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
_assertPixel(canvas, 98,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html
index 1a57acb5f37..f0ef2d250ea 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html
@@ -32,6 +32,7 @@ t.step(function() {
ctx.lineTo(-150, -50);
ctx.lineTo(-151, -100);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js
index 8628fd993bd..0cc1b5f1963 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js
@@ -28,6 +28,7 @@ t.step(function() {
ctx.lineTo(-150, -50);
ctx.lineTo(-151, -100);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html
index 394226c0ed5..f2800aa19a9 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html
@@ -34,6 +34,7 @@ t.step(function() {
ctx.lineTo(-150, -50);
ctx.lineTo(-151, -100);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js
index 06bcbd2c48a..925f65a28ee 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js
@@ -30,6 +30,7 @@ t.step(function() {
ctx.lineTo(-150, -50);
ctx.lineTo(-151, -100);
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html
index 2bf7d3dbc1b..390e6a80486 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html
@@ -33,6 +33,7 @@ t.step(function() {
ctx.lineTo(-150, -50);
ctx.lineTo(-151, -100); // (not an exact right angle, to avoid some other bug in Firefox 3)
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js
index 5c52537a31e..827a6d66623 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js
@@ -29,6 +29,7 @@ t.step(function() {
ctx.lineTo(-150, -50);
ctx.lineTo(-151, -100); // (not an exact right angle, to avoid some other bug in Firefox 3)
ctx.stroke();
+
_assertPixel(canvas, 1,1, 0,255,0,255);
_assertPixel(canvas, 48,48, 0,255,0,255);
_assertPixel(canvas, 50,25, 0,255,0,255);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html
index 3fefcfc087a..23946b20a56 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html
@@ -26,6 +26,7 @@ t.step(function() {
ctx.shadowColor = '#0f0';
ctx.translate(100, 100);
ctx.fillRect(-100, -150, 100, 50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js
index 6227d8487f6..6ac8da4c97d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js
@@ -22,6 +22,7 @@ t.step(function() {
ctx.shadowColor = '#0f0';
ctx.translate(100, 100);
ctx.fillRect(-100, -150, 100, 50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html
index a4ba056c759..edcd20bdcab 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html
@@ -26,6 +26,7 @@ t.step(function() {
ctx.shadowColor = '#0f0';
ctx.rotate(Math.PI)
ctx.fillRect(-100, 0, 100, 50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js
index 32c322af916..e9e745a2ab8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js
@@ -22,6 +22,7 @@ t.step(function() {
ctx.shadowColor = '#0f0';
ctx.rotate(Math.PI)
ctx.fillRect(-100, 0, 100, 50);
+
_assertPixel(canvas, 50,25, 0,255,0,255);
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html
index 0b822834328..0bd15ff0068 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html
@@ -30,7 +30,7 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'hanging';
- ctx.fillText('CC', 0, 12.5);
+ ctx.fillText('CC', 0, -30);
_assertPixelApprox(canvas, 5,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 95,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js
index fca74d69381..4a5ced7b38f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js
@@ -26,7 +26,7 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'hanging';
- ctx.fillText('CC', 0, 12.5);
+ ctx.fillText('CC', 0, -30);
_assertPixelApprox(canvas, 5,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 95,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html
index c996444b860..3a1d6e5159c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html
@@ -30,7 +30,7 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'ideographic';
- ctx.fillText('CC', 0, 31.25);
+ ctx.fillText('CC', 0, 81.25);
_assertPixelApprox(canvas, 5,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 95,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js
index 0ffa6fe299a..b39c10b74f0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js
@@ -26,7 +26,7 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'ideographic';
- ctx.fillText('CC', 0, 31.25);
+ ctx.fillText('CC', 0, 81.25);
_assertPixelApprox(canvas, 5,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 95,5, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html
index 9215203eaa7..a9dcfb11c42 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html
@@ -6,11 +6,11 @@
<script src="/html/canvas/resources/canvas-tests.js"></script>
<h1>2d.text.draw.space.collapse.end</h1>
-<p class="desc">Space characters at the end of a line are collapsed (per CSS)</p>
+<p class="desc">Space characters at the end of a line are NOT collapsed</p>
<script>
-var t = async_test("Space characters at the end of a line are collapsed (per CSS)");
+var t = async_test("Space characters at the end of a line are NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -30,7 +30,7 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textAlign = 'right';
- ctx.fillText('EE ', 100, 37.5);
+ ctx.fillText('EE ', 150, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}).then(t_pass, t_fail);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js
index f910b274bd4..87ae8b8d58b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js
@@ -1,12 +1,12 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.text.draw.space.collapse.end
-// Description:Space characters at the end of a line are collapsed (per CSS)
+// Description:Space characters at the end of a line are NOT collapsed
// Note:
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Space characters at the end of a line are collapsed (per CSS)");
+var t = async_test("Space characters at the end of a line are NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -26,7 +26,7 @@ t.step(function() {
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textAlign = 'right';
- ctx.fillText('EE ', 100, 37.5);
+ ctx.fillText('EE ', 150, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}).then(t_pass, t_fail);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html
index a0cc560f507..c9808a4c716 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html
@@ -6,11 +6,11 @@
<script src="/html/canvas/resources/canvas-tests.js"></script>
<h1>2d.text.draw.space.collapse.other</h1>
-<p class="desc">Space characters are converted to U+0020, and collapsed (per CSS)</p>
+<p class="desc">Space characters are converted to U+0020, and are NOT collapsed</p>
<script>
-var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)");
+var t = async_test("Space characters are converted to U+0020, and are NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -29,7 +29,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5);
+ ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}).then(t_pass, t_fail);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js
index 12edf7f7e7f..f072b76dd81 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js
@@ -1,12 +1,12 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.text.draw.space.collapse.other
-// Description:Space characters are converted to U+0020, and collapsed (per CSS)
+// Description:Space characters are converted to U+0020, and are NOT collapsed
// Note:
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)");
+var t = async_test("Space characters are converted to U+0020, and are NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -25,7 +25,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5);
+ ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}).then(t_pass, t_fail);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html
index 240ba7460c4..1ed09048961 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html
@@ -6,11 +6,11 @@
<script src="/html/canvas/resources/canvas-tests.js"></script>
<h1>2d.text.draw.space.collapse.space</h1>
-<p class="desc">Space characters are converted to U+0020, and collapsed (per CSS)</p>
+<p class="desc">Space characters are converted to U+0020, and are NOT collapsed</p>
<script>
-var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)");
+var t = async_test("Space characters are converted to U+0020, and are NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -29,7 +29,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E EE', -100, 37.5);
+ ctx.fillText('E EE', -150, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}).then(t_pass, t_fail);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js
index 3ce5ef88f73..979a8a0f1cc 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js
@@ -1,12 +1,12 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.text.draw.space.collapse.space
-// Description:Space characters are converted to U+0020, and collapsed (per CSS)
+// Description:Space characters are converted to U+0020, and are NOT collapsed
// Note:
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)");
+var t = async_test("Space characters are converted to U+0020, and are NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -25,7 +25,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E EE', -100, 37.5);
+ ctx.fillText('E EE', -150, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}).then(t_pass, t_fail);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html
index 43fa32f8aeb..1581ce111ce 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html
@@ -6,11 +6,11 @@
<script src="/html/canvas/resources/canvas-tests.js"></script>
<h1>2d.text.draw.space.collapse.start</h1>
-<p class="desc">Space characters at the start of a line are collapsed (per CSS)</p>
+<p class="desc">Space characters at the start of a line are NOT collapsed</p>
<script>
-var t = async_test("Space characters at the start of a line are collapsed (per CSS)");
+var t = async_test("Space characters at the start of a line are NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -29,7 +29,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText(' EE', 0, 37.5);
+ ctx.fillText(' EE', -50, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}).then(t_pass, t_fail);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js
index 2f742ac2b67..79f8326561c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js
@@ -1,12 +1,12 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.text.draw.space.collapse.start
-// Description:Space characters at the start of a line are collapsed (per CSS)
+// Description:Space characters at the start of a line are NOT collapsed
// Note:
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Space characters at the start of a line are collapsed (per CSS)");
+var t = async_test("Space characters at the start of a line are NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -25,7 +25,7 @@ t.step(function() {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText(' EE', 0, 37.5);
+ ctx.fillText(' EE', -50, 37.5);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
}).then(t_pass, t_fail);
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html
index 380d8e7212f..7f6b57921e4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html
@@ -22,34 +22,36 @@ t.step(function() {
_assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "Normal";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
- ctx.fontKerning = "auto";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "normal";
_assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ ctx.fontKerning = "Auto";
+ _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "noRmal";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "NoRMal";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "NORMAL";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "None";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
- ctx.fontKerning = "auto";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "none";
_assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ ctx.fontKerning = "Auto";
+ _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "nOne";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "nonE";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "NONE";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js
index afce6c3955c..4e0f32c6927 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js
@@ -18,34 +18,36 @@ t.step(function() {
_assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "Normal";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
- ctx.fontKerning = "auto";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "normal";
_assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ ctx.fontKerning = "Auto";
+ _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "noRmal";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "NoRMal";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "NORMAL";
- _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "None";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
- ctx.fontKerning = "auto";
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "none";
_assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ ctx.fontKerning = "Auto";
+ _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "nOne";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "nonE";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
ctx.fontKerning = "auto";
ctx.fontKerning = "NONE";
- _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\"");
+ _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\"");
t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html
index 5ed17baf956..9756d095ba7 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html
@@ -6,11 +6,11 @@
<script src="/html/canvas/resources/canvas-tests.js"></script>
<h1>2d.text.drawing.style.fontVariant.settings</h1>
-<p class="desc">Testing basic functionalities of fontKerning for canvas</p>
+<p class="desc">Testing basic functionalities of fontVariant for canvas</p>
<script>
-var t = async_test("Testing basic functionalities of fontKerning for canvas");
+var t = async_test("Testing basic functionalities of fontVariant for canvas");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -44,29 +44,33 @@ t.step(function() {
ctx.fontVariantCaps = "titling-caps";
_assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
- // Setting fontVariantCaps with lower cases and upper cases word.
+ // Setting fontVariantCaps with mixed-case values is not valid
ctx.fontVariantCaps = "nORmal";
+ _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
+
+ ctx.fontVariantCaps = "normal";
_assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "smaLL-caps";
- _assertSame(ctx.fontVariantCaps, "small-caps", "ctx.fontVariantCaps", "\"small-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "all-small-CAPS";
- _assertSame(ctx.fontVariantCaps, "all-small-caps", "ctx.fontVariantCaps", "\"all-small-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "pEtitE-caps";
- _assertSame(ctx.fontVariantCaps, "petite-caps", "ctx.fontVariantCaps", "\"petite-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "All-Petite-Caps";
- _assertSame(ctx.fontVariantCaps, "all-petite-caps", "ctx.fontVariantCaps", "\"all-petite-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "uNIcase";
- _assertSame(ctx.fontVariantCaps, "unicase", "ctx.fontVariantCaps", "\"unicase\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "titling-CAPS";
- _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
// Setting fontVariantCaps with non-existing font variant.
+ ctx.fontVariantCaps = "titling-caps";
ctx.fontVariantCaps = "abcd";
_assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js
index 9486b8ae1a4..30c78388ae4 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js
@@ -1,12 +1,12 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.text.drawing.style.fontVariant.settings
-// Description:Testing basic functionalities of fontKerning for canvas
+// Description:Testing basic functionalities of fontVariant for canvas
// Note:
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Testing basic functionalities of fontKerning for canvas");
+var t = async_test("Testing basic functionalities of fontVariant for canvas");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -40,29 +40,33 @@ t.step(function() {
ctx.fontVariantCaps = "titling-caps";
_assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
- // Setting fontVariantCaps with lower cases and upper cases word.
+ // Setting fontVariantCaps with mixed-case values is not valid
ctx.fontVariantCaps = "nORmal";
+ _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
+
+ ctx.fontVariantCaps = "normal";
_assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "smaLL-caps";
- _assertSame(ctx.fontVariantCaps, "small-caps", "ctx.fontVariantCaps", "\"small-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "all-small-CAPS";
- _assertSame(ctx.fontVariantCaps, "all-small-caps", "ctx.fontVariantCaps", "\"all-small-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "pEtitE-caps";
- _assertSame(ctx.fontVariantCaps, "petite-caps", "ctx.fontVariantCaps", "\"petite-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "All-Petite-Caps";
- _assertSame(ctx.fontVariantCaps, "all-petite-caps", "ctx.fontVariantCaps", "\"all-petite-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "uNIcase";
- _assertSame(ctx.fontVariantCaps, "unicase", "ctx.fontVariantCaps", "\"unicase\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
ctx.fontVariantCaps = "titling-CAPS";
- _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
+ _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\"");
// Setting fontVariantCaps with non-existing font variant.
+ ctx.fontVariantCaps = "titling-caps";
ctx.fontVariantCaps = "abcd";
_assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\"");
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html
index 30e937804f2..69453437fe2 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html
@@ -21,7 +21,7 @@ t.step(function() {
var ctx = canvas.getContext('2d');
ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif';
- _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font\", sans-serif'");
+ _assert(['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font), "['italic small-caps 12px \"Unknown Font\", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font)");
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js
index 28cb41c572a..71d039cfaca 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js
@@ -17,7 +17,7 @@ t.step(function() {
var ctx = canvas.getContext('2d');
ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif';
- _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font\", sans-serif'");
+ _assert(['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font), "['italic small-caps 12px \"Unknown Font\", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font)");
t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.html
new file mode 100644
index 00000000000..af94ac720a6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.text.font.parse.complex2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/html/canvas/resources/canvas-tests.js"></script>
+
+<h1>2d.text.font.parse.complex2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+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.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif';
+ _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font #2", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font #2\", sans-serif'");
+ t.done();
+
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js
new file mode 100644
index 00000000000..45575f88140
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.text.font.parse.complex2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/html/canvas/resources/canvas-tests.js");
+
+var t = async_test("");
+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.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif';
+ _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font #2", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font #2\", sans-serif'");
+ t.done();
+});
+done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html
index bff53f4f0e4..6ef4255b834 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html
@@ -6,11 +6,11 @@
<script src="/html/canvas/resources/canvas-tests.js"></script>
<h1>2d.text.measure.width.space</h1>
-<p class="desc">Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas</p>
+<p class="desc">Space characters are converted to U+0020 and NOT collapsed</p>
<script>
-var t = async_test("Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas");
+var t = async_test("Space characters are converted to U+0020 and NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -28,11 +28,11 @@ t.step(function() {
ctx.font = '50px CanvasTest';
_assertSame(ctx.measureText('A B').width, 150, "ctx.measureText('A B').width", "150");
_assertSame(ctx.measureText('A B').width, 200, "ctx.measureText('A B').width", "200");
- _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 150, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "150");
+ _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 650, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "650");
_assert(ctx.measureText('A \x0b B').width >= 200, "ctx.measureText('A \\x0b B').width >= 200");
- _assertSame(ctx.measureText(' AB').width, 100, "ctx.measureText(' AB').width", "100");
- _assertSame(ctx.measureText('AB ').width, 100, "ctx.measureText('AB ').width", "100");
+ _assertSame(ctx.measureText(' AB').width, 150, "ctx.measureText(' AB').width", "150");
+ _assertSame(ctx.measureText('AB ').width, 150, "ctx.measureText('AB ').width", "150");
}).then(t_pass, t_fail);
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js
index 83020b34f58..5ee4ee3ff74 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js
@@ -1,12 +1,12 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.text.measure.width.space
-// Description:Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas
+// Description:Space characters are converted to U+0020 and NOT collapsed
// Note:
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas");
+var t = async_test("Space characters are converted to U+0020 and NOT collapsed");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
throw reason;
@@ -24,11 +24,11 @@ t.step(function() {
ctx.font = '50px CanvasTest';
_assertSame(ctx.measureText('A B').width, 150, "ctx.measureText('A B').width", "150");
_assertSame(ctx.measureText('A B').width, 200, "ctx.measureText('A B').width", "200");
- _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 150, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "150");
+ _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 650, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "650");
_assert(ctx.measureText('A \x0b B').width >= 200, "ctx.measureText('A \\x0b B').width >= 200");
- _assertSame(ctx.measureText(' AB').width, 100, "ctx.measureText(' AB').width", "100");
- _assertSame(ctx.measureText('AB ').width, 100, "ctx.measureText('AB ').width", "100");
+ _assertSame(ctx.measureText(' AB').width, 150, "ctx.measureText(' AB').width", "150");
+ _assertSame(ctx.measureText('AB ').width, 150, "ctx.measureText('AB ').width", "150");
}).then(t_pass, t_fail);
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py b/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py
deleted file mode 100644
index c7fb93ae6fd..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2023 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""Presubmit script for t/b/web_tests/external/wpt/html/canvas/tools.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details about the presubmit API built into depot_tools.
-"""
-
-
-def CommonChecks(input_api, output_api):
- return input_api.canned_checks.RunPylint(input_api, output_api)
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CommonChecks(input_api, output_api)
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 0542e32571a..cf141f2f074 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py
@@ -500,7 +500,11 @@ def genTestUtils_union(NAME2DIRFILE: str) -> None:
for variant_name, variant_params in variants.items():
test = original_test.copy()
if variant_name or variant_params:
- test['name'] += '.' + variant_name
+ # Append variant name. Variant names starting with '_' are
+ # not appended, which is useful to create variants with the same
+ # name in different folders (element vs. offscreen).
+ if not variant_name.startswith('_'):
+ test['name'] += '.' + variant_name
test.update(variant_params)
name = test['name']
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/fill-and-stroke-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/fill-and-stroke-styles.yaml
index 9d35dde661c..e30eb010088 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/fill-and-stroke-styles.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/fill-and-stroke-styles.yaml
@@ -1,5 +1,6 @@
- name: 2d.fillStyle.parse.current.basic
desc: currentColor is computed from the canvas element
+ canvasType: ['HtmlCanvas']
code: |
canvas.setAttribute('style', 'color: #0f0');
ctx.fillStyle = '#f00';
@@ -10,6 +11,7 @@
- name: 2d.fillStyle.parse.current.changed
desc: currentColor is computed when the attribute is set, not when it is painted
+ canvasType: ['HtmlCanvas']
code: |
canvas.setAttribute('style', 'color: #0f0');
ctx.fillStyle = '#f00';
@@ -21,6 +23,7 @@
- name: 2d.fillStyle.parse.current.removed
desc: currentColor is solid black when the canvas element is not in a document
+ canvasType: ['HtmlCanvas']
code: |
// Try not to let it undetectably incorrectly pick up opaque-black
// from other parts of the document:
@@ -116,14 +119,16 @@
desc: window.CanvasGradient exists and has the right properties
notes: &bindings Defined in "Web IDL" (draft)
code: |
- @assert window.CanvasGradient !== undefined;
- @assert window.CanvasGradient.prototype.addColorStop !== undefined;
+ {% set root = 'self' if canvas_type == 'worker' else 'window' %}
+ @assert {{ root }}.CanvasGradient !== undefined;
+ @assert {{ root }}.CanvasGradient.prototype.addColorStop !== undefined;
- name: 2d.gradient.object.return
desc: createLinearGradient() and createRadialGradient() returns objects implementing
CanvasGradient
code: |
- window.CanvasGradient.prototype.thisImplementsCanvasGradient = true;
+ {% set root = 'self' if canvas_type == 'worker' else 'window' %}
+ {{ root }}.CanvasGradient.prototype.thisImplementsCanvasGradient = true;
var g1 = ctx.createLinearGradient(0, 0, 100, 0);
@assert g1.addColorStop !== undefined;
@@ -471,15 +476,23 @@
code: |
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var g = document.createElement('canvas').getContext('2d').createLinearGradient(0, 0, 100, 0);
+ var g = {{ create_canvas }}.getContext('2d').createLinearGradient(0, 0, 100, 0);
g.addColorStop(0, '#0f0');
g.addColorStop(1, '#0f0');
ctx.fillStyle = g;
ctx.fillRect(0, 0, 100, 50);
@assert pixel 50,25 ==~ 0,255,0,255;
expected: green
+ variants:
+ _HtmlCanvas:
+ canvasType: ['HtmlCanvas']
+ create_canvas: document.createElement('canvas')
+ _OffscreenCanvas:
+ canvasType: ['OffscreenCanvas', 'Worker']
+ create_canvas: new OffscreenCanvas(100, 50)
- name: 2d.gradient.object.current
+ canvasType: ['HtmlCanvas']
code: |
canvas.setAttribute('style', 'color: #f00');
@@ -1113,13 +1126,25 @@
images:
- green.png
code: |
- @assert window.CanvasPattern !== undefined;
+ {% set root = 'self' if canvas_type == 'worker' else 'window' %}
+ @assert {{ root }}.CanvasPattern !== undefined;
- window.CanvasPattern.prototype.thisImplementsCanvasPattern = true;
+ {{ root }}.CanvasPattern.prototype.thisImplementsCanvasPattern = true;
- var img = document.getElementById('green.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'no-repeat');
@assert pattern.thisImplementsCanvasPattern;
+ variants: &load-image-variant-definition
+ _HtmlCanvas:
+ canvasType: ['HtmlCanvas']
+ load_image: var img = document.getElementById('{{ (images or svgimages)[0] }}');
+ _OffscreenCanvas:
+ canvasType: ['OffscreenCanvas', 'Worker']
+ test_type: promise
+ load_image: |-
+ var response = await fetch('/images/{{ (images or svgimages)[0] }}')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
- name: 2d.pattern.basic.image
images:
@@ -1127,7 +1152,7 @@
code: |
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('green.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1137,15 +1162,14 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.basic.canvas
code: |
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
@@ -1164,6 +1188,17 @@
@assert pixel 50,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: &create-canvas2-variant-definition
+ _HtmlCanvas:
+ canvasType: ['HtmlCanvas']
+ create_canvas2: |-
+ var canvas2 = document.createElement('canvas');
+ canvas2.width = 100;
+ canvas2.height = 50;
+ _OffscreenCanvas:
+ canvasType: ['OffscreenCanvas', 'Worker']
+ create_canvas2: |-
+ var canvas2 = new OffscreenCanvas(100, 50);
- name: 2d.pattern.basic.zerocanvas
code: |
@@ -1187,9 +1222,7 @@
- name: 2d.pattern.basic.nocontext
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var pattern = ctx.createPattern(canvas2, 'no-repeat');
ctx.fillStyle = '#0f0';
@@ -1203,12 +1236,11 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *create-canvas2-variant-definition
- name: 2d.pattern.transform.identity
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var pattern = ctx.createPattern(canvas2, 'no-repeat');
pattern.setTransform(new DOMMatrix());
@@ -1223,12 +1255,11 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *create-canvas2-variant-definition
- name: 2d.pattern.transform.infinity
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var pattern = ctx.createPattern(canvas2, 'no-repeat');
pattern.setTransform({a: Infinity});
@@ -1243,14 +1274,14 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *create-canvas2-variant-definition
- name: 2d.pattern.transform.invalid
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var pattern = ctx.createPattern(canvas2, 'no-repeat');
@assert throws TypeError pattern.setTransform({a: 1, m11: 2});
+ variants: *create-canvas2-variant-definition
- name: 2d.pattern.image.undefined
notes: *bindings
@@ -1268,11 +1299,13 @@
@assert throws TypeError ctx.createPattern('../images/red.png', 'repeat');
- name: 2d.pattern.image.incomplete.nosrc
+ canvasType: ['HtmlCanvas']
code: |
var img = new Image();
@assert ctx.createPattern(img, 'repeat') === null;
- name: 2d.pattern.image.incomplete.immediate
+ canvasType: ['HtmlCanvas']
images:
- red.png
code: |
@@ -1285,6 +1318,7 @@
@assert ctx.createPattern(img, 'repeat') === null; @moz-todo
- name: 2d.pattern.image.incomplete.reload
+ canvasType: ['HtmlCanvas']
images:
- yellow.png
- red.png
@@ -1299,6 +1333,7 @@
@assert ctx.createPattern(img, 'repeat') === null; @moz-todo
- name: 2d.pattern.image.incomplete.emptysrc
+ canvasType: ['HtmlCanvas']
images:
- red.png
mozilla: {throws: !!null ''}
@@ -1308,6 +1343,7 @@
@assert ctx.createPattern(img, 'repeat') === null;
- name: 2d.pattern.image.incomplete.removedsrc
+ canvasType: ['HtmlCanvas']
images:
- red.png
mozilla: {throws: !!null ''}
@@ -1317,6 +1353,7 @@
@assert ctx.createPattern(img, 'repeat') === null;
- name: 2d.pattern.image.broken
+ canvasType: ['HtmlCanvas']
images:
- broken.png
code: |
@@ -1324,6 +1361,7 @@
@assert throws INVALID_STATE_ERR ctx.createPattern(img, 'repeat');
- name: 2d.pattern.image.nonexistent
+ canvasType: ['HtmlCanvas']
images:
- no-such-image-really.png
code: |
@@ -1331,6 +1369,7 @@
@assert throws INVALID_STATE_ERR ctx.createPattern(img, 'repeat');
- name: 2d.pattern.svgimage.nonexistent
+ canvasType: ['HtmlCanvas']
svgimages:
- no-such-image-really.png
code: |
@@ -1338,6 +1377,7 @@
@assert throws INVALID_STATE_ERR ctx.createPattern(img, 'repeat');
- name: 2d.pattern.image.nonexistent-but-loading
+ canvasType: ['HtmlCanvas']
code: |
var img = document.createElement("img");
img.src = "/images/no-such-image-really.png";
@@ -1347,6 +1387,7 @@
@assert ctx.createPattern(img, 'repeat') === null;
- name: 2d.pattern.image.nosrc
+ canvasType: ['HtmlCanvas']
code: |
var img = document.createElement("img");
@assert ctx.createPattern(img, 'repeat') === null;
@@ -1354,6 +1395,7 @@
@assert ctx.createPattern(img, 'repeat') === null;
- name: 2d.pattern.image.zerowidth
+ canvasType: ['HtmlCanvas']
images:
- red-zerowidth.svg
code: |
@@ -1361,6 +1403,7 @@
@assert ctx.createPattern(img, 'repeat') === null;
- name: 2d.pattern.image.zeroheight
+ canvasType: ['HtmlCanvas']
images:
- red-zeroheight.svg
code: |
@@ -1368,6 +1411,7 @@
@assert ctx.createPattern(img, 'repeat') === null;
- name: 2d.pattern.svgimage.zerowidth
+ canvasType: ['HtmlCanvas']
svgimages:
- red-zerowidth.svg
code: |
@@ -1375,6 +1419,7 @@
@assert ctx.createPattern(img, 'repeat') === null;
- name: 2d.pattern.svgimage.zeroheight
+ canvasType: ['HtmlCanvas']
svgimages:
- red-zeroheight.svg
code: |
@@ -1387,7 +1432,7 @@
code: |
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('green-1x1.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, "");
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 200, 50);
@@ -1397,6 +1442,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.repeat.null
code: |
@@ -1423,6 +1469,7 @@
@assert throws SYNTAX_ERR ctx.createPattern(canvas, "repeat\0");
- name: 2d.pattern.modify.image1
+ canvasType: ['HtmlCanvas']
images:
- green.png
code: |
@@ -1443,6 +1490,7 @@
expected: green
- name: 2d.pattern.modify.image2
+ canvasType: ['HtmlCanvas']
images:
- green.png
code: |
@@ -1467,10 +1515,9 @@
expected: green
- name: 2d.pattern.modify.canvas1
+ canvasType: ['HtmlCanvas']
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
@@ -1488,12 +1535,11 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *create-canvas2-variant-definition
- name: 2d.pattern.modify.canvas2
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#0f0';
ctx2.fillRect(0, 0, 100, 50);
@@ -1515,14 +1561,15 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *create-canvas2-variant-definition
- name: 2d.pattern.crosscanvas
images:
- green.png
code: |
- var img = document.getElementById('green.png');
+ {{ load_image }}
- var pattern = document.createElement('canvas').getContext('2d').createPattern(img, 'no-repeat');
+ var pattern = {{ create_canvas }}.getContext('2d').createPattern(img, 'no-repeat');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = pattern;
@@ -1530,6 +1577,19 @@
@assert pixel 50,25 == 0,255,0,255;
expected: green
+ variants:
+ _HtmlCanvas:
+ canvasType: ['HtmlCanvas']
+ load_image: var img = document.getElementById('{{ images[0] }}');
+ create_canvas: document.createElement('canvas')
+ _OffscreenCanvas:
+ canvasType: ['OffscreenCanvas', 'Worker']
+ test_type: promise
+ load_image: |-
+ var response = await fetch('/images/{{ images[0] }}')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
+ create_canvas: new OffscreenCanvas(100, 50)
- name: 2d.pattern.paint.norepeat.basic
images:
@@ -1538,7 +1598,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('green.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1548,6 +1608,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.norepeat.outside
images:
@@ -1556,7 +1617,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('red.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'no-repeat');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
@@ -1572,6 +1633,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.norepeat.coord1
images:
@@ -1582,7 +1644,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(50, 0, 50, 50);
- var img = document.getElementById('green.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'no-repeat');
ctx.fillStyle = pattern;
ctx.translate(50, 0);
@@ -1593,12 +1655,13 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.norepeat.coord2
images:
- green.png
code: |
- var img = document.getElementById('green.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'no-repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 50, 50);
@@ -1615,6 +1678,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.norepeat.coord3
images:
@@ -1623,7 +1687,7 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('red.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'no-repeat');
ctx.fillStyle = pattern;
ctx.translate(50, 25);
@@ -1637,6 +1701,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeat.basic
images:
@@ -1645,7 +1710,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('green-16x16.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1655,6 +1720,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeat.outside
images:
@@ -1663,7 +1729,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('green-16x16.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = pattern;
ctx.translate(50, 25);
@@ -1674,6 +1740,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeat.coord1
images:
@@ -1682,7 +1749,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('rgrg-256x256.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = pattern;
ctx.translate(-128, -78);
@@ -1693,12 +1760,13 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeat.coord2
images:
- ggrr-256x256.png
code: |
- var img = document.getElementById('ggrr-256x256.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1708,12 +1776,13 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeat.coord3
images:
- rgrg-256x256.png
code: |
- var img = document.getElementById('rgrg-256x256.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1726,6 +1795,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeatx.basic
images:
@@ -1736,7 +1806,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 16);
- var img = document.getElementById('green-16x16.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat-x');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1746,6 +1816,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeatx.outside
images:
@@ -1754,7 +1825,7 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('red-16x16.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat-x');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1767,6 +1838,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeatx.coord1
images:
@@ -1775,7 +1847,7 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('red-16x16.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat-x');
ctx.fillStyle = pattern;
ctx.translate(0, 16);
@@ -1791,6 +1863,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeaty.basic
images:
@@ -1801,7 +1874,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 16, 50);
- var img = document.getElementById('green-16x16.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat-y');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1811,6 +1884,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeaty.outside
images:
@@ -1819,7 +1893,7 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('red-16x16.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat-y');
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 100, 50);
@@ -1832,6 +1906,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.repeaty.coord1
images:
@@ -1840,7 +1915,7 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('red-16x16.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'repeat-y');
ctx.fillStyle = pattern;
ctx.translate(48, 0);
@@ -1856,6 +1931,7 @@
@assert pixel 50,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.orientation.image
desc: Image patterns do not get flipped when painted
@@ -1865,7 +1941,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('rrgg-256x256.png');
+ {{ load_image }}
var pattern = ctx.createPattern(img, 'no-repeat');
ctx.fillStyle = pattern;
ctx.save();
@@ -1881,6 +1957,7 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.pattern.paint.orientation.canvas
desc: Canvas patterns do not get flipped when painted
@@ -1888,9 +1965,7 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 25);
@@ -1908,10 +1983,11 @@
@assert pixel 1,48 == 0,255,0,255;
@assert pixel 98,48 == 0,255,0,255;
expected: green
-
+ variants: *create-canvas2-variant-definition
- name: 2d.pattern.animated.gif
desc: createPattern() of an animated GIF draws the first frame
+ canvasType: ['HtmlCanvas']
images:
- anim-gr.gif
code: |
@@ -1930,6 +2006,7 @@
- name: 2d.fillStyle.CSSRGB
desc: CSSRGB works as color input
+ canvasType: ['HtmlCanvas', 'OffscreenCanvas']
code: |
ctx.fillStyle = new CSSRGB(1, 0, 1);
@assert ctx.fillStyle === '#ff00ff';
@@ -1969,6 +2046,7 @@
- name: 2d.fillStyle.CSSHSL
desc: CSSHSL works as color input
+ canvasType: ['HtmlCanvas', 'OffscreenCanvas']
code: |
ctx.fillStyle = new CSSHSL(CSS.deg(180), 0.5, 0.5);
ctx.fillRect(0, 0, 100, 50);
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml
index 8ca05bec84d..63edf62e3b8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml
@@ -271,6 +271,40 @@
ctx.fillRect(50, 50, 75, 50);
ctx.endLayer();
+- name: 2d.layer.unclosed-nested
+ desc: Check that layers are rendered even if not closed.
+ size: [200, 200]
+ code: |
+ ctx.fillStyle = 'rgba(0, 0, 255, 1)';
+ ctx.fillRect(60, 60, 75, 50);
+ ctx.globalAlpha = 0.5;
+
+ ctx.beginLayer();
+ ctx.fillStyle = 'rgba(225, 0, 0, 1)';
+ ctx.fillRect(50, 50, 75, 50);
+
+ ctx.beginLayer();
+ ctx.fillStyle = 'rgba(0, 255, 0, 1)';
+ ctx.fillRect(70, 70, 75, 50);
+
+ ctx.endLayer();
+ // Missing ctx.endLayer() here.
+ reference: |
+ const canvas1 = document.createElement('canvas');
+ const ctx1 = canvas1.getContext('2d');
+ ctx1.fillStyle = 'rgba(0,255,0,1)';
+ ctx1.fillRect(70,70,75,50);
+
+ const canvas2 = document.createElement('canvas');
+ const ctx2 = canvas2.getContext('2d');
+ ctx2.fillStyle = 'rgba(225,0,0,1)';
+ ctx2.fillRect(50,50,75,50);
+ ctx2.drawImage(canvas1, 0, 0);
+
+ ctx.fillStyle = 'rgba(0,0,255,1)';
+ ctx.fillRect(60,60,75,50);
+ ctx.globalAlpha = 0.5;
+ ctx.drawImage(canvas2, 0, 0);
- name: 2d.layer.render-opportunities
desc: Check that layers state stack is flushed and rebuilt on frame renders.
@@ -436,61 +470,119 @@
ctx.drawImage(canvas2[i], i, i);
}
-
-- name: 2d.layer.endlayer.unmatched
- desc: >-
- A test to make sure an unmatched endLayer is a no-op and has no effect on
- the code following it.
- size: [200, 200]
+- name: 2d.layer.reset
+ desc: Checks that reset discards any pending layers.
code: |
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
-
- ctx.globalAlpha = 0.5;
-
- // This endlayer call should no-op.
- ctx.endLayer();
+ // Global states:
+ ctx.globalAlpha = 0.3;
+ ctx.globalCompositeOperation = 'source-in';
+ ctx.shadowOffsetX = -3;
+ ctx.shadowOffsetY = 3;
+ ctx.shadowColor = 'rgba(0, 30, 0, 0.3)';
- ctx.beginLayer();
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
- ctx.endLayer();
- reference: |
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
+ ctx.beginLayer({filter: 'dropShadow', dx: -3, dy: 3});
- ctx.globalAlpha = 0.5;
+ // Layer states:
+ ctx.globalAlpha = 0.6;
+ ctx.globalCompositeOperation = 'source-in';
+ ctx.shadowOffsetX = -6;
+ ctx.shadowOffsetY = 6;
+ ctx.shadowColor = 'rgba(0, 60, 0, 0.6)';
- ctx.beginLayer();
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
- ctx.endLayer();
+ ctx.reset();
+ ctx.fillRect(10, 10, 75, 50);
+ reference:
+ ctx.fillRect(10, 10, 75, 50);
-- name: 2d.layer.endlayer.alone
- desc: A test to make sure a single endLayer with no beginLayer is a no-op.
- size: [200, 200]
+- name: 2d.layer.valid-calls
+ desc: No exception raised on {{ variant_desc }}.
+ variants:
+ save:
+ variant_desc: lone save() calls
+ code: ctx.save();
+ beginLayer:
+ variant_desc: lone beginLayer() calls
+ code: ctx.beginLayer();
+ restore:
+ variant_desc: lone restore() calls
+ code: ctx.restore();
+ save_restore:
+ variant_desc: save() + restore()
+ code: |-
+ ctx.save();
+ ctx.restore();
+ save_reset_restore:
+ variant_desc: save() + reset() + restore()
+ code: |-
+ ctx.save();
+ ctx.reset();
+ ctx.restore();
+ beginLayer-endLayer:
+ variant_desc: beginLayer() + endLayer()
+ code: |-
+ ctx.beginLayer();
+ ctx.save();
+ save-beginLayer:
+ variant_desc: save() + beginLayer()
+ code: |-
+ ctx.save();
+ ctx.beginLayer();
+ beginLayer-save:
+ variant_desc: beginLayer() + save()
+ code: |-
+ ctx.beginLayer();
+ ctx.save();
+
+- name: 2d.layer.invalid-calls
+ desc: Raises exception on {{ variant_desc }}.
code: |
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
- ctx.globalAlpha = 0.5;
-
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
-
+ assert_throws_dom("INVALID_STATE_ERR", function() {
+ {{ call_sequence | indent(2) }}
+ });
+ variants:
+ endLayer:
+ variant_desc: lone endLayer calls
+ call_sequence: ctx.endLayer();
+ save-endLayer:
+ variant_desc: save() + endLayer()
+ call_sequence: |-
+ ctx.save();
+ ctx.endLayer();
+ beginLayer-restore:
+ variant_desc: beginLayer() + restore()
+ call_sequence: |-
+ ctx.beginLayer();
+ ctx.restore();
+ save-beginLayer-restore:
+ variant_desc: save() + beginLayer() + restore()
+ call_sequence: |-
+ ctx.save();
+ ctx.beginLayer();
+ ctx.restore();
+ beginLayer-save-endLayer:
+ variant_desc: beginLayer() + save() + endLayer()
+ call_sequence: |-
+ ctx.beginLayer();
+ ctx.save();
+ ctx.endLayer();
+ beginLayer-reset-endLayer:
+ variant_desc: beginLayer() + reset() + endLayer()
+ call_sequence: |-
+ ctx.beginLayer();
+ ctx.reset();
+ ctx.endLayer();
+
+- name: 2d.layer.cross-layer-paths
+ desc: Checks that path defined in a layer is usable outside.
+ code: |
+ ctx.beginLayer();
+ ctx.translate(50, 0);
+ ctx.moveTo(0, 0);
ctx.endLayer();
- reference: |
- ctx.fillStyle = 'rgba(0, 0, 255, 1)';
- ctx.fillRect(60, 60, 75, 50);
- ctx.globalAlpha = 0.5;
-
- ctx.fillStyle = 'rgba(225, 0, 0, 1)';
- ctx.fillRect(50, 50, 75, 50);
- ctx.fillStyle = 'rgba(0, 255, 0, 1)';
- ctx.fillRect(70, 70, 75, 50);
+ ctx.lineTo(50, 100);
+ ctx.stroke();
+ reference:
+ ctx.moveTo(50, 0);
+ ctx.lineTo(50, 100);
+ ctx.stroke();
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml
index 604f4f3659a..47bf3af97ec 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml
@@ -395,6 +395,21 @@
ctx.lineCap = 'bevel';
@assert ctx.lineCap === 'butt';
+- name: 2d.line.fill.noop
+ desc: Filling a line draws nothing
+ code: |
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.fillStyle = '#f00';
+ ctx.lineWidth = 20;
+ ctx.beginPath();
+ ctx.moveTo(10, 20);
+ ctx.lineTo(90, 30);
+ ctx.fill();
+ @assert pixel 50,24 == 0,255,0,255;
+ @assert pixel 50,25 == 0,255,0,255;
+ @assert pixel 50,26 == 0,255,0,255;
+
- name: 2d.line.join.bevel
desc: lineJoin 'bevel' is rendered correctly
code: |
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/shadows.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/shadows.yaml
index 7a7c115a7c4..366ac0b6072 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/shadows.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/shadows.yaml
@@ -481,10 +481,22 @@
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#0f0';
ctx.shadowOffsetY = 50;
- ctx.drawImage(document.getElementById('red.png'), 0, -50);
+ {{ load_image }}
+ ctx.drawImage(img, 0, -50);
@assert pixel 50,25 == 0,255,0,255;
expected: green
+ variants: &load-image-variant-definition
+ _HtmlCanvas:
+ canvasType: ['HtmlCanvas']
+ load_image: var img = document.getElementById('{{ images[0] }}');
+ _OffscreenCanvas:
+ canvasType: ['OffscreenCanvas', 'Worker']
+ test_type: promise
+ load_image: |-
+ var response = await fetch('/images/{{ images[0] }}')
+ var blob = await response.blob();
+ var img = await createImageBitmap(blob);
- name: 2d.shadow.image.transparent.1
desc: Shadows are not drawn for transparent images
@@ -495,10 +507,12 @@
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#f00';
ctx.shadowOffsetY = 50;
- ctx.drawImage(document.getElementById('transparent.png'), 0, -50);
+ {{ load_image }}
+ ctx.drawImage(img, 0, -50);
@assert pixel 50,25 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.shadow.image.transparent.2
desc: Shadows are not drawn for transparent parts of images
@@ -511,14 +525,16 @@
ctx.fillRect(50, 0, 50, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- ctx.drawImage(document.getElementById('redtransparent.png'), 50, -50);
+ {{ load_image }}
+ ctx.drawImage(img, 50, -50);
ctx.shadowColor = '#f00';
- ctx.drawImage(document.getElementById('redtransparent.png'), -50, -50);
+ ctx.drawImage(img, -50, -50);
@assert pixel 25,25 == 0,255,0,255;
@assert pixel 50,25 == 0,255,0,255;
@assert pixel 75,25 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.shadow.image.alpha
desc: Shadows are drawn correctly for partially-transparent images
@@ -529,7 +545,8 @@
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#00f';
- ctx.drawImage(document.getElementById('transparent50.png'), 0, -50);
+ {{ load_image }}
+ ctx.drawImage(img, 0, -50);
@assert pixel 50,25 ==~ 127,0,127,255;
expected: |
@@ -537,6 +554,7 @@
cr.set_source_rgb(0.5, 0, 0.5)
cr.rectangle(0, 0, 100, 50)
cr.fill()
+ variants: *load-image-variant-definition
- name: 2d.shadow.image.section
desc: Shadows are not drawn for areas outside image source rectangles
@@ -547,12 +565,14 @@
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#f00';
- ctx.drawImage(document.getElementById('redtransparent.png'), 50, 0, 50, 50, 0, -50, 50, 50);
+ {{ load_image }}
+ ctx.drawImage(img, 50, 0, 50, 50, 0, -50, 50, 50);
@assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 50,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.shadow.image.scale
desc: Shadows are drawn correctly for scaled images
@@ -563,19 +583,19 @@
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
ctx.shadowColor = '#0f0';
- ctx.drawImage(document.getElementById('redtransparent.png'), 0, 0, 100, 50, -10, -50, 240, 50);
+ {{ load_image }}
+ ctx.drawImage(img, 0, 0, 100, 50, -10, -50, 240, 50);
@assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 50,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.shadow.canvas.basic
desc: Shadows are drawn for canvases
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 100, 50);
@@ -588,13 +608,22 @@
@assert pixel 50,25 == 0,255,0,255;
expected: green
+ variants: &create-canvas2-variant-definition
+ _HtmlCanvas:
+ canvasType: ['HtmlCanvas']
+ create_canvas2: |-
+ var canvas2 = document.createElement('canvas');
+ canvas2.width = 100;
+ canvas2.height = 50;
+ _OffscreenCanvas:
+ canvasType: ['OffscreenCanvas', 'Worker']
+ create_canvas2: |-
+ var canvas2 = new OffscreenCanvas(100, 50);
- name: 2d.shadow.canvas.transparent.1
desc: Shadows are not drawn for transparent canvases
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var ctx2 = canvas2.getContext('2d');
ctx.fillStyle = '#0f0';
@@ -605,13 +634,12 @@
@assert pixel 50,25 == 0,255,0,255;
expected: green
+ variants: *create-canvas2-variant-definition
- name: 2d.shadow.canvas.transparent.2
desc: Shadows are not drawn for transparent parts of canvases
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = '#f00';
ctx2.fillRect(0, 0, 50, 50);
@@ -630,15 +658,12 @@
@assert pixel 50,25 == 0,255,0,255;
@assert pixel 75,25 == 0,255,0,255;
expected: green
+ variants: *create-canvas2-variant-definition
- name: 2d.shadow.canvas.alpha
desc: Shadows are drawn correctly for partially-transparent canvases
- images:
- - transparent50.png
code: |
- var canvas2 = document.createElement('canvas');
- canvas2.width = 100;
- canvas2.height = 50;
+ {{ create_canvas2 }}
var ctx2 = canvas2.getContext('2d');
ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)';
ctx2.fillRect(0, 0, 100, 50);
@@ -655,6 +680,7 @@
cr.set_source_rgb(0.5, 0, 0.5)
cr.rectangle(0, 0, 100, 50)
cr.fill()
+ variants: *create-canvas2-variant-definition
- name: 2d.shadow.pattern.basic
desc: Shadows are drawn for fill patterns
@@ -662,7 +688,8 @@
images:
- red.png
code: |
- var pattern = ctx.createPattern(document.getElementById('red.png'), 'repeat');
+ {{ load_image }}
+ var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#0f0';
@@ -672,6 +699,7 @@
@assert pixel 50,25 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.shadow.pattern.transparent.1
desc: Shadows are not drawn for transparent fill patterns
@@ -679,7 +707,8 @@
images:
- transparent.png
code: |
- var pattern = ctx.createPattern(document.getElementById('transparent.png'), 'repeat');
+ {{ load_image }}
+ var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowColor = '#f00';
@@ -689,6 +718,7 @@
@assert pixel 50,25 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.shadow.pattern.transparent.2
desc: Shadows are not drawn for transparent parts of fill patterns
@@ -696,7 +726,8 @@
images:
- redtransparent.png
code: |
- var pattern = ctx.createPattern(document.getElementById('redtransparent.png'), 'repeat');
+ {{ load_image }}
+ var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 50, 50);
ctx.fillStyle = '#0f0';
@@ -710,6 +741,7 @@
@assert pixel 50,25 == 0,255,0,255;
@assert pixel 75,25 == 0,255,0,255;
expected: green
+ variants: *load-image-variant-definition
- name: 2d.shadow.pattern.alpha
desc: Shadows are drawn correctly for partially-transparent fill patterns
@@ -717,7 +749,8 @@
images:
- transparent50.png
code: |
- var pattern = ctx.createPattern(document.getElementById('transparent50.png'), 'repeat');
+ {{ load_image }}
+ var pattern = ctx.createPattern(img, 'repeat');
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.shadowOffsetY = 50;
@@ -731,6 +764,7 @@
cr.set_source_rgb(0.5, 0, 0.5)
cr.rectangle(0, 0, 100, 50)
cr.fill()
+ variants: *load-image-variant-definition
- name: 2d.shadow.gradient.basic
desc: Shadows are drawn for gradient fills
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/the-canvas-state.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/the-canvas-state.yaml
index 04520861543..04520861543 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/the-canvas-state.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/the-canvas-state.yaml
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml
index 3443ad35b3c..55597b31594 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml
@@ -850,37 +850,39 @@
code: |
@assert ctx.fontKerning === "auto";
ctx.fontKerning = "Normal";
- @assert ctx.fontKerning === "normal";
- ctx.fontKerning = "Auto";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "normal";
@assert ctx.fontKerning === "normal";
ctx.fontKerning = "Auto";
- ctx.fontKerning = "noRmal";
@assert ctx.fontKerning === "normal";
- ctx.fontKerning = "Auto";
+ ctx.fontKerning = "auto";
+ ctx.fontKerning = "noRmal";
+ @assert ctx.fontKerning === "auto";
+ ctx.fontKerning = "auto";
ctx.fontKerning = "NoRMal";
- @assert ctx.fontKerning === "normal";
- ctx.fontKerning = "Auto";
+ @assert ctx.fontKerning === "auto";
+ ctx.fontKerning = "auto";
ctx.fontKerning = "NORMAL";
- @assert ctx.fontKerning === "normal";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "None";
- @assert ctx.fontKerning === "none";
- ctx.fontKerning = "Auto";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "none";
@assert ctx.fontKerning === "none";
ctx.fontKerning = "Auto";
- ctx.fontKerning = "nOne";
@assert ctx.fontKerning === "none";
- ctx.fontKerning = "Auto";
+ ctx.fontKerning = "auto";
+ ctx.fontKerning = "nOne";
+ @assert ctx.fontKerning === "auto";
+ ctx.fontKerning = "auto";
ctx.fontKerning = "nonE";
- @assert ctx.fontKerning === "none";
- ctx.fontKerning = "Auto";
+ @assert ctx.fontKerning === "auto";
+ ctx.fontKerning = "auto";
ctx.fontKerning = "NONE";
- @assert ctx.fontKerning === "none";
+ @assert ctx.fontKerning === "auto";
- name: 2d.text.drawing.style.fontVariant.settings
- desc: Testing basic functionalities of fontKerning for canvas
+ desc: Testing basic functionalities of fontVariant for canvas
code: |
// Setting fontVariantCaps with lower cases
@assert ctx.fontVariantCaps === "normal";
@@ -906,29 +908,33 @@
ctx.fontVariantCaps = "titling-caps";
@assert ctx.fontVariantCaps === "titling-caps";
- // Setting fontVariantCaps with lower cases and upper cases word.
+ // Setting fontVariantCaps with mixed-case values is not valid
ctx.fontVariantCaps = "nORmal";
+ @assert ctx.fontVariantCaps === "titling-caps";
+
+ ctx.fontVariantCaps = "normal";
@assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "smaLL-caps";
- @assert ctx.fontVariantCaps === "small-caps";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "all-small-CAPS";
- @assert ctx.fontVariantCaps === "all-small-caps";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "pEtitE-caps";
- @assert ctx.fontVariantCaps === "petite-caps";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "All-Petite-Caps";
- @assert ctx.fontVariantCaps === "all-petite-caps";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "uNIcase";
- @assert ctx.fontVariantCaps === "unicase";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "titling-CAPS";
- @assert ctx.fontVariantCaps === "titling-caps";
+ @assert ctx.fontVariantCaps === "normal";
// Setting fontVariantCaps with non-existing font variant.
+ ctx.fontVariantCaps = "titling-caps";
ctx.fontVariantCaps = "abcd";
@assert ctx.fontVariantCaps === "titling-caps";
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml
index 407e3462109..0eba21943c0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml
@@ -14,7 +14,12 @@
- name: 2d.text.font.parse.complex
code: |
ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif';
- @assert ctx.font === 'italic small-caps 12px "Unknown Font", sans-serif'; @moz-todo
+ @assert ['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font);
+
+- name: 2d.text.font.parse.complex2
+ code: |
+ ctx.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif';
+ @assert ctx.font === 'italic small-caps 12px "Unknown Font #2", sans-serif';
- name: 2d.text.font.parse.family
code: |
@@ -296,7 +301,7 @@
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'ideographic';
- ctx.fillText('CC', 0, 31.25);
+ ctx.fillText('CC', 0, 81.25);
@assert pixel 5,5 ==~ 0,255,0,255;
@assert pixel 95,5 ==~ 0,255,0,255;
@assert pixel 25,25 ==~ 0,255,0,255;
@@ -317,7 +322,7 @@
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'hanging';
- ctx.fillText('CC', 0, 12.5);
+ ctx.fillText('CC', 0, -30);
@assert pixel 5,5 ==~ 0,255,0,255; @moz-todo
@assert pixel 95,5 ==~ 0,255,0,255; @moz-todo
@assert pixel 25,25 ==~ 0,255,0,255;
@@ -328,7 +333,7 @@
expected: green
- name: 2d.text.draw.space.collapse.space
- desc: Space characters are converted to U+0020, and collapsed (per CSS)
+ desc: Space characters are converted to U+0020, and are NOT collapsed
fonts:
- CanvasTest
code: |
@@ -338,14 +343,14 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E EE', -100, 37.5);
- @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo
+ ctx.fillText('E EE', -150, 37.5);
+ @assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
}), 500);
expected: green
- name: 2d.text.draw.space.collapse.other
- desc: Space characters are converted to U+0020, and collapsed (per CSS)
+ desc: Space characters are converted to U+0020, and are NOT collapsed
fonts:
- CanvasTest
code: |
@@ -355,14 +360,14 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5);
- @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo
- @assert pixel 75,25 ==~ 0,255,0,255; @moz-todo
+ ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5);
+ @assert pixel 25,25 ==~ 0,255,0,255;
+ @assert pixel 75,25 ==~ 0,255,0,255;
}), 500);
expected: green
- name: 2d.text.draw.space.collapse.start
- desc: Space characters at the start of a line are collapsed (per CSS)
+ desc: Space characters at the start of a line are NOT collapsed
fonts:
- CanvasTest
code: |
@@ -372,14 +377,14 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText(' EE', 0, 37.5);
- @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo
+ ctx.fillText(' EE', -50, 37.5);
+ @assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
}), 500);
expected: green
- name: 2d.text.draw.space.collapse.end
- desc: Space characters at the end of a line are collapsed (per CSS)
+ desc: Space characters at the end of a line are NOT collapsed
fonts:
- CanvasTest
code: |
@@ -390,15 +395,15 @@
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textAlign = 'right';
- ctx.fillText('EE ', 100, 37.5);
+ ctx.fillText('EE ', 150, 37.5);
@assert pixel 25,25 ==~ 0,255,0,255;
- @assert pixel 75,25 ==~ 0,255,0,255; @moz-todo
+ @assert pixel 75,25 ==~ 0,255,0,255;
}), 500);
expected: green
- name: 2d.text.measure.width.space
- desc: Space characters are converted to U+0020 and collapsed (per CSS)
+ desc: Space characters are converted to U+0020 and NOT collapsed
fonts:
- CanvasTest
code: |
@@ -410,11 +415,11 @@
ctx.font = '50px CanvasTest';
@assert ctx.measureText('A B').width === 150;
@assert ctx.measureText('A B').width === 200;
- @assert ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width === 150; @moz-todo
+ @assert ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width === 650;
@assert ctx.measureText('A \x0b B').width >= 200;
- @assert ctx.measureText(' AB').width === 100; @moz-todo
- @assert ctx.measureText('AB ').width === 100; @moz-todo
+ @assert ctx.measureText(' AB').width === 150;
+ @assert ctx.measureText('AB ').width === 150;
}), 500);
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/fill-and-stroke-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/fill-and-stroke-styles.yaml
deleted file mode 100644
index 5f794d61e6f..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/fill-and-stroke-styles.yaml
+++ /dev/null
@@ -1,1586 +0,0 @@
-- name: 2d.fillStyle.invalidstring
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillStyle = 'invalid';
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.fillStyle.invalidtype
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillStyle = null;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.fillStyle.get.solid
- code: |
- ctx.fillStyle = '#fa0';
- @assert ctx.fillStyle === '#ffaa00';
- t.done();
-
-- name: 2d.fillStyle.get.semitransparent
- code: |
- ctx.fillStyle = 'rgba(255,255,255,0.45)';
- @assert ctx.fillStyle =~ /^rgba\(255, 255, 255, 0\.4\d+\)$/;
- t.done();
-
-- name: 2d.fillStyle.get.halftransparent
- code: |
- ctx.fillStyle = 'rgba(255,255,255,0.5)';
- @assert ctx.fillStyle === 'rgba(255, 255, 255, 0.5)';
- t.done();
-
-- name: 2d.fillStyle.get.transparent
- code: |
- ctx.fillStyle = 'rgba(0,0,0,0)';
- @assert ctx.fillStyle === 'rgba(0, 0, 0, 0)';
- t.done();
-
-- name: 2d.fillStyle.default
- code: |
- @assert ctx.fillStyle === '#000000';
- t.done();
-
-- name: 2d.strokeStyle.default
- code: |
- @assert ctx.strokeStyle === '#000000';
- t.done();
-
-- name: 2d.fillStyle.toStringFunctionCallback
- desc: Passing a function in to ctx.fillStyle or ctx.strokeStyle with a toString callback works as specified
- code: |
- ctx.fillStyle = { toString: function() { return "#008000"; } };
- @assert ctx.fillStyle === "#008000";
- ctx.fillStyle = {};
- @assert ctx.fillStyle === "#008000";
- ctx.fillStyle = 800000;
- @assert ctx.fillStyle === "#008000";
- @assert throws TypeError ctx.fillStyle = { toString: function() { throw new TypeError; } };
- ctx.strokeStyle = { toString: function() { return "#008000"; } };
- @assert ctx.strokeStyle === "#008000";
- ctx.strokeStyle = {};
- @assert ctx.strokeStyle === "#008000";
- ctx.strokeStyle = 800000;
- @assert ctx.strokeStyle === "#008000";
- @assert throws TypeError ctx.strokeStyle = { toString: function() { throw new TypeError; } };
- t.done();
-
-- name: 2d.gradient.interpolate.solid
- code: |
- var g = ctx.createLinearGradient(0, 0, 100, 0);
- g.addColorStop(0, '#0f0');
- g.addColorStop(1, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.interpolate.color
- code: |
- var g = ctx.createLinearGradient(0, 0, 100, 0);
- g.addColorStop(0, '#ff0');
- g.addColorStop(1, '#00f');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 25,25 ==~ 191,191,63,255 +/- 3;
- @assert pixel 50,25 ==~ 127,127,127,255 +/- 3;
- @assert pixel 75,25 ==~ 63,63,191,255 +/- 3;
- t.done();
-
-- name: 2d.gradient.interpolate.alpha
- code: |
- ctx.fillStyle = '#ff0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createLinearGradient(0, 0, 100, 0);
- g.addColorStop(0, 'rgba(0,0,255, 0)');
- g.addColorStop(1, 'rgba(0,0,255, 1)');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 25,25 ==~ 191,191,63,255 +/- 3;
- @assert pixel 50,25 ==~ 127,127,127,255 +/- 3;
- @assert pixel 75,25 ==~ 63,63,191,255 +/- 3;
- t.done();
-
-- name: 2d.gradient.interpolate.coloralpha
- code: |
- var g = ctx.createLinearGradient(0, 0, 100, 0);
- g.addColorStop(0, 'rgba(255,255,0, 0)');
- g.addColorStop(1, 'rgba(0,0,255, 1)');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 25,25 ==~ 190,190,65,65 +/- 3;
- @assert pixel 50,25 ==~ 126,126,128,128 +/- 3;
- @assert pixel 75,25 ==~ 62,62,192,192 +/- 3;
- t.done();
-
-- name: 2d.gradient.interpolate.outside
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createLinearGradient(25, 0, 75, 0);
- g.addColorStop(0.4, '#0f0');
- g.addColorStop(0.6, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 20,25 ==~ 0,255,0,255;
- @assert pixel 50,25 ==~ 0,255,0,255;
- @assert pixel 80,25 ==~ 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.interpolate.zerosize.fill
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.rect(0, 0, 100, 50);
- ctx.fill();
- @assert pixel 40,20 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.interpolate.zerosize.stroke
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.strokeStyle = g;
- ctx.rect(20, 20, 60, 10);
- ctx.stroke();
- @assert pixel 19,19 == 0,255,0,255;
- @assert pixel 20,19 == 0,255,0,255;
- @assert pixel 21,19 == 0,255,0,255;
- @assert pixel 19,20 == 0,255,0,255;
- @assert pixel 20,20 == 0,255,0,255;
- @assert pixel 21,20 == 0,255,0,255;
- @assert pixel 19,21 == 0,255,0,255;
- @assert pixel 20,21 == 0,255,0,255;
- @assert pixel 21,21 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.interpolate.zerosize.fillRect
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 40,20 == 0,255,0,255; @moz-todo
- t.done();
-
-- name: 2d.gradient.interpolate.zerosize.strokeRect
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.strokeStyle = g;
- ctx.strokeRect(20, 20, 60, 10);
- @assert pixel 19,19 == 0,255,0,255;
- @assert pixel 20,19 == 0,255,0,255;
- @assert pixel 21,19 == 0,255,0,255;
- @assert pixel 19,20 == 0,255,0,255;
- @assert pixel 20,20 == 0,255,0,255;
- @assert pixel 21,20 == 0,255,0,255;
- @assert pixel 19,21 == 0,255,0,255;
- @assert pixel 20,21 == 0,255,0,255;
- @assert pixel 21,21 == 0,255,0,255;
- t.done();
-
-
-- name: 2d.gradient.interpolate.vertical
- code: |
- var g = ctx.createLinearGradient(0, 0, 0, 50);
- g.addColorStop(0, '#ff0');
- g.addColorStop(1, '#00f');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,12 ==~ 191,191,63,255 +/- 10;
- @assert pixel 50,25 ==~ 127,127,127,255 +/- 5;
- @assert pixel 50,37 ==~ 63,63,191,255 +/- 10;
- t.done();
-
-- name: 2d.gradient.interpolate.multiple
- code: |
- canvas.width = 200;
- var g = ctx.createLinearGradient(0, 0, 200, 0);
- g.addColorStop(0, '#ff0');
- g.addColorStop(0.5, '#0ff');
- g.addColorStop(1, '#f0f');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 200, 50);
- @assert pixel 50,25 ==~ 127,255,127,255 +/- 3;
- @assert pixel 100,25 ==~ 0,255,255,255 +/- 3;
- @assert pixel 150,25 ==~ 127,127,255,255 +/- 3;
- t.done();
-
-- name: 2d.gradient.interpolate.overlap
- code: |
- canvas.width = 200;
- var g = ctx.createLinearGradient(0, 0, 200, 0);
- g.addColorStop(0, '#f00');
- g.addColorStop(0, '#ff0');
- g.addColorStop(0.25, '#00f');
- g.addColorStop(0.25, '#0f0');
- g.addColorStop(0.25, '#0f0');
- g.addColorStop(0.25, '#0f0');
- g.addColorStop(0.25, '#ff0');
- g.addColorStop(0.5, '#00f');
- g.addColorStop(0.5, '#0f0');
- g.addColorStop(0.75, '#00f');
- g.addColorStop(0.75, '#f00');
- g.addColorStop(0.75, '#ff0');
- g.addColorStop(0.5, '#0f0');
- g.addColorStop(0.5, '#0f0');
- g.addColorStop(0.5, '#ff0');
- g.addColorStop(1, '#00f');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 200, 50);
- @assert pixel 49,25 ==~ 0,0,255,255 +/- 16;
- @assert pixel 51,25 ==~ 255,255,0,255 +/- 16;
- @assert pixel 99,25 ==~ 0,0,255,255 +/- 16;
- @assert pixel 101,25 ==~ 255,255,0,255 +/- 16;
- @assert pixel 149,25 ==~ 0,0,255,255 +/- 16;
- @assert pixel 151,25 ==~ 255,255,0,255 +/- 16;
- t.done();
-
-- name: 2d.gradient.interpolate.overlap2
- code: |
- var g = ctx.createLinearGradient(0, 0, 100, 0);
- var ps = [ 0, 1/10, 1/4, 1/3, 1/2, 3/4, 1 ];
- for (var p = 0; p < ps.length; ++p)
- {
- g.addColorStop(ps[p], '#0f0');
- for (var i = 0; i < 15; ++i)
- g.addColorStop(ps[p], '#f00');
- g.addColorStop(ps[p], '#0f0');
- }
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 30,25 == 0,255,0,255;
- @assert pixel 40,25 == 0,255,0,255;
- @assert pixel 60,25 == 0,255,0,255;
- @assert pixel 80,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.empty
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createLinearGradient(0, 0, 0, 50);
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 ==~ 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.object.update
- code: |
- var g = ctx.createLinearGradient(-100, 0, 200, 0);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- g.addColorStop(0.1, '#0f0');
- g.addColorStop(0.9, '#0f0');
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 ==~ 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.object.compare
- code: |
- var g1 = ctx.createLinearGradient(0, 0, 100, 0);
- var g2 = ctx.createLinearGradient(0, 0, 100, 0);
- @assert g1 !== g2;
- ctx.fillStyle = g1;
- @assert ctx.fillStyle === g1;
- t.done();
-
-- name: 2d.gradient.object.crosscanvas
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var g = offscreenCanvas2.getContext('2d').createLinearGradient(0, 0, 100, 0);
- g.addColorStop(0, '#0f0');
- g.addColorStop(1, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 ==~ 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.object.invalidoffset
- code: |
- var g = ctx.createLinearGradient(0, 0, 100, 0);
- @assert throws INDEX_SIZE_ERR g.addColorStop(-1, '#000');
- @assert throws INDEX_SIZE_ERR g.addColorStop(2, '#000');
- @assert throws TypeError g.addColorStop(Infinity, '#000');
- @assert throws TypeError g.addColorStop(-Infinity, '#000');
- @assert throws TypeError g.addColorStop(NaN, '#000');
- t.done();
-
-- name: 2d.gradient.object.invalidcolor
- code: |
- var g = ctx.createLinearGradient(0, 0, 100, 0);
- @assert throws SYNTAX_ERR g.addColorStop(0, "");
- @assert throws SYNTAX_ERR g.addColorStop(0, 'null');
- @assert throws SYNTAX_ERR g.addColorStop(0, 'undefined');
- @assert throws SYNTAX_ERR g.addColorStop(0, null);
- @assert throws SYNTAX_ERR g.addColorStop(0, undefined);
- t.done();
-
-- name: 2d.gradient.linear.nonfinite
- desc: createLinearGradient() throws TypeError if arguments are not finite
- code: |
- @nonfinite @assert throws TypeError ctx.createLinearGradient(<0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <1 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>);
- t.done();
-
-- name: 2d.gradient.linear.transform.1
- desc: Linear gradient coordinates are relative to the coordinate space at the time
- of filling
- code: |
- var g = ctx.createLinearGradient(0, 0, 200, 0);
- g.addColorStop(0, '#f00');
- g.addColorStop(0.25, '#0f0');
- g.addColorStop(0.75, '#0f0');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.translate(-50, 0);
- ctx.fillRect(50, 0, 100, 50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.linear.transform.2
- desc: Linear gradient coordinates are relative to the coordinate space at the time
- of filling
- code: |
- ctx.translate(100, 0);
- var g = ctx.createLinearGradient(0, 0, 200, 0);
- g.addColorStop(0, '#f00');
- g.addColorStop(0.25, '#0f0');
- g.addColorStop(0.75, '#0f0');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.translate(-150, 0);
- ctx.fillRect(50, 0, 100, 50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.linear.transform.3
- desc: Linear gradient transforms do not experience broken caching effects
- code: |
- var g = ctx.createLinearGradient(0, 0, 200, 0);
- g.addColorStop(0, '#f00');
- g.addColorStop(0.25, '#0f0');
- g.addColorStop(0.75, '#0f0');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- ctx.translate(-50, 0);
- ctx.fillRect(50, 0, 100, 50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.negative
- desc: createRadialGradient() throws INDEX_SIZE_ERR if either radius is negative
- code: |
- @assert throws INDEX_SIZE_ERR ctx.createRadialGradient(0, 0, -0.1, 0, 0, 1);
- @assert throws INDEX_SIZE_ERR ctx.createRadialGradient(0, 0, 1, 0, 0, -0.1);
- @assert throws INDEX_SIZE_ERR ctx.createRadialGradient(0, 0, -0.1, 0, 0, -0.1);
- t.done();
-- name: 2d.gradient.radial.nonfinite
-
- desc: createRadialGradient() throws TypeError if arguments are not finite
- code: |
- @nonfinite @assert throws TypeError ctx.createRadialGradient(<0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <1 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <1 Infinity -Infinity NaN>);
- t.done();
-
-- name: 2d.gradient.radial.inside1
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200);
- g.addColorStop(0, '#0f0');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.inside2
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.inside3
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
- g.addColorStop(0, '#f00');
- g.addColorStop(0.993, '#f00');
- g.addColorStop(1, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.outside1
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.outside2
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
- g.addColorStop(0, '#0f0');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.outside3
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
- g.addColorStop(0, '#0f0');
- g.addColorStop(0.001, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.touch1
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255; @moz-todo
- @assert pixel 50,1 == 0,255,0,255; @moz-todo
- @assert pixel 98,1 == 0,255,0,255; @moz-todo
- @assert pixel 1,25 == 0,255,0,255; @moz-todo
- @assert pixel 50,25 == 0,255,0,255; @moz-todo
- @assert pixel 98,25 == 0,255,0,255; @moz-todo
- @assert pixel 1,48 == 0,255,0,255; @moz-todo
- @assert pixel 50,48 == 0,255,0,255; @moz-todo
- @assert pixel 98,48 == 0,255,0,255; @moz-todo
- t.done();
-
-- name: 2d.gradient.radial.touch2
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150);
- g.addColorStop(0, '#f00');
- g.addColorStop(0.01, '#0f0');
- g.addColorStop(0.99, '#0f0');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.touch3
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255; @moz-todo
- @assert pixel 50,1 == 0,255,0,255; @moz-todo
- @assert pixel 98,1 == 0,255,0,255; @moz-todo
- @assert pixel 1,25 == 0,255,0,255; @moz-todo
- @assert pixel 50,25 == 0,255,0,255; @moz-todo
- @assert pixel 98,25 == 0,255,0,255; @moz-todo
- @assert pixel 1,48 == 0,255,0,255; @moz-todo
- @assert pixel 50,48 == 0,255,0,255; @moz-todo
- @assert pixel 98,48 == 0,255,0,255; @moz-todo
- t.done();
-
-- name: 2d.gradient.radial.equal
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255; @moz-todo
- @assert pixel 50,1 == 0,255,0,255; @moz-todo
- @assert pixel 98,1 == 0,255,0,255; @moz-todo
- @assert pixel 1,25 == 0,255,0,255; @moz-todo
- @assert pixel 50,25 == 0,255,0,255; @moz-todo
- @assert pixel 98,25 == 0,255,0,255; @moz-todo
- @assert pixel 1,48 == 0,255,0,255; @moz-todo
- @assert pixel 50,48 == 0,255,0,255; @moz-todo
- @assert pixel 98,48 == 0,255,0,255; @moz-todo
- t.done();
-
-- name: 2d.gradient.radial.cone.behind
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255; @moz-todo
- @assert pixel 50,1 == 0,255,0,255; @moz-todo
- @assert pixel 98,1 == 0,255,0,255; @moz-todo
- @assert pixel 1,25 == 0,255,0,255; @moz-todo
- @assert pixel 50,25 == 0,255,0,255; @moz-todo
- @assert pixel 98,25 == 0,255,0,255; @moz-todo
- @assert pixel 1,48 == 0,255,0,255; @moz-todo
- @assert pixel 50,48 == 0,255,0,255; @moz-todo
- @assert pixel 98,48 == 0,255,0,255; @moz-todo
- t.done();
-
-- name: 2d.gradient.radial.cone.front
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.cone.bottom
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101);
- g.addColorStop(0, '#0f0');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.cone.top
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.cone.beside
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255; @moz-todo
- @assert pixel 50,1 == 0,255,0,255; @moz-todo
- @assert pixel 98,1 == 0,255,0,255; @moz-todo
- @assert pixel 1,25 == 0,255,0,255; @moz-todo
- @assert pixel 50,25 == 0,255,0,255; @moz-todo
- @assert pixel 98,25 == 0,255,0,255; @moz-todo
- @assert pixel 1,48 == 0,255,0,255; @moz-todo
- @assert pixel 50,48 == 0,255,0,255; @moz-todo
- @assert pixel 98,48 == 0,255,0,255; @moz-todo
- t.done();
-
-- name: 2d.gradient.radial.cone.cylinder
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100);
- g.addColorStop(0, '#0f0');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.cone.shape1
- code: |
- var tol = 1; // tolerance to avoid antialiasing artifacts
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00';
- ctx.beginPath();
- ctx.moveTo(30+tol, 40);
- ctx.lineTo(110, -20+tol);
- ctx.lineTo(110, 100-tol);
- ctx.fill();
- var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
- g.addColorStop(0, '#0f0');
- g.addColorStop(1, '#0f0');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.cone.shape2
- code: |
- var tol = 1; // tolerance to avoid antialiasing artifacts
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
- g.addColorStop(0, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.beginPath();
- ctx.moveTo(30-tol, 40);
- ctx.lineTo(110, -20-tol);
- ctx.lineTo(110, 100+tol);
- ctx.fill();
- @assert pixel 1,1 == 0,255,0,255; @moz-todo
- @assert pixel 50,1 == 0,255,0,255; @moz-todo
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255; @moz-todo
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255; @moz-todo
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.transform.1
- desc: Radial gradient coordinates are relative to the coordinate space at the time
- of filling
- code: |
- var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
- g.addColorStop(0, '#0f0');
- g.addColorStop(0.5, '#0f0');
- g.addColorStop(0.51, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.translate(50, 25);
- ctx.scale(10, 10);
- ctx.fillRect(-5, -2.5, 10, 5);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.transform.2
- desc: Radial gradient coordinates are relative to the coordinate space at the time
- of filling
- code: |
- ctx.translate(100, 0);
- var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
- g.addColorStop(0, '#0f0');
- g.addColorStop(0.5, '#0f0');
- g.addColorStop(0.51, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.translate(-50, 25);
- ctx.scale(10, 10);
- ctx.fillRect(-5, -2.5, 10, 5);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.radial.transform.3
- desc: Radial gradient transforms do not experience broken caching effects
- code: |
- var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
- g.addColorStop(0, '#0f0');
- g.addColorStop(0.5, '#0f0');
- g.addColorStop(0.51, '#f00');
- g.addColorStop(1, '#f00');
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- ctx.translate(50, 25);
- ctx.scale(10, 10);
- ctx.fillRect(-5, -2.5, 10, 5);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.gradient.conic.positive.rotation
- desc: Conic gradient with positive rotation
- code: |
- const g = ctx.createConicGradient(3*Math.PI/2, 50, 25);
- // It's red in the upper right region and green on the lower left region
- g.addColorStop(0, "#f00");
- g.addColorStop(0.25, "#0f0");
- g.addColorStop(0.50, "#0f0");
- g.addColorStop(0.75, "#f00");
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 25,15 ==~ 255,0,0,255 +/- 3;
- @assert pixel 75,40 ==~ 0,255,0,255 +/- 3;
- t.done();
-
-- name: 2d.gradient.conic.negative.rotation
- desc: Conic gradient with negative rotation
- code: |
- const g = ctx.createConicGradient(-Math.PI/2, 50, 25);
- // It's red in the upper right region and green on the lower left region
- g.addColorStop(0, "#f00");
- g.addColorStop(0.25, "#0f0");
- g.addColorStop(0.50, "#0f0");
- g.addColorStop(0.75, "#f00");
- ctx.fillStyle = g;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 25,15 ==~ 255,0,0,255 +/- 3;
- @assert pixel 75,40 ==~ 0,255,0,255 +/- 3;
- t.done();
-
-- name: 2d.gradient.conic.invalid.inputs
- desc: Conic gradient function with invalid inputs
- code: |
- @nonfinite @assert throws TypeError ctx.createConicGradient(<0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <1 Infinity -Infinity NaN>);
-
- const g = ctx.createConicGradient(0, 0, 25);
- @nonfinite @assert throws TypeError g.addColorStop(<Infinity -Infinity NaN>, <'#f00'>);
- @nonfinite @assert throws SYNTAX_ERR g.addColorStop(<0>, <Infinity -Infinity NaN>);
- t.done();
-
-- name: 2d.pattern.basic.image
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.basic.canvas
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
- ctx2.fillStyle = '#0f0';
- ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.pattern.basic.zerocanvas
- code: |
- canvas.width = 0;
- canvas.height = 10;
- @assert canvas.width === 0;
- @assert canvas.height === 10;
- @assert throws INVALID_STATE_ERR ctx.createPattern(canvas, 'repeat');
- canvas.width = 10;
- canvas.height = 0;
- @assert canvas.width === 10;
- @assert canvas.height === 0;
- @assert throws INVALID_STATE_ERR ctx.createPattern(canvas, 'repeat');
- canvas.width = 0;
- canvas.height = 0;
- @assert canvas.width === 0;
- @assert canvas.height === 0;
- @assert throws INVALID_STATE_ERR ctx.createPattern(canvas, 'repeat');
- t.done();
-
-- name: 2d.pattern.basic.nocontext
- code: |
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00';
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.pattern.image.undefined
- code: |
- @assert throws TypeError ctx.createPattern(undefined, 'repeat');
- t.done();
-
-- name: 2d.pattern.image.null
- code: |
- @assert throws TypeError ctx.createPattern(null, 'repeat');
- t.done();
-
-- name: 2d.pattern.image.string
- code: |
- @assert throws TypeError ctx.createPattern('../images/red.png', 'repeat');
- t.done();
-
-- name: 2d.pattern.repeat.empty
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-1x1.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, "");
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 200, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.repeat.null
- code: |
- @assert ctx.createPattern(canvas, null) != null;
- t.done();
-
-- name: 2d.pattern.repeat.undefined
- code: |
- @assert throws SYNTAX_ERR ctx.createPattern(canvas, undefined);
- t.done();
-
-- name: 2d.pattern.repeat.unrecognised
- code: |
- @assert throws SYNTAX_ERR ctx.createPattern(canvas, "invalid");
- t.done();
-
-- name: 2d.pattern.repeat.unrecognisednull
- code: |
- @assert throws SYNTAX_ERR ctx.createPattern(canvas, "null");
- t.done();
-
-- name: 2d.pattern.repeat.case
- code: |
- @assert throws SYNTAX_ERR ctx.createPattern(canvas, "Repeat");
- t.done();
-
-- name: 2d.pattern.repeat.nullsuffix
- code: |
- @assert throws SYNTAX_ERR ctx.createPattern(canvas, "repeat\0");
- t.done();
-
-- name: 2d.pattern.modify.canvas1
- code: |
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
- ctx2.fillStyle = '#0f0';
- ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
- ctx2.fillStyle = '#f00';
- ctx2.fillRect(0, 0, 100, 50);
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.pattern.modify.canvas2
- code: |
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
- ctx2.fillStyle = '#0f0';
- ctx2.fillRect(0, 0, 100, 50);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx2.fillStyle = '#f00';
- ctx2.fillRect(0, 0, 100, 50);
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.pattern.crosscanvas
- code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var pattern = offscreenCanvas2.getContext('2d').createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.norepeat.basic
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.norepeat.outside
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- ctx.fillRect(-100, 0, 100, 50);
- ctx.fillRect(0, 50, 100, 50);
- ctx.fillRect(100, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.norepeat.coord1
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(50, 0, 50, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 0);
- ctx.fillRect(-50, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.norepeat.coord2
- code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(50, 0, 50, 50);
- ctx.fillStyle = pattern;
- ctx.translate(50, 0);
- ctx.fillRect(-50, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.norepeat.coord3
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 25);
- ctx.fillRect(-50, -25, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 50, 25);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeat.basic
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeat.outside
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(50, 25);
- ctx.fillRect(-50, -25, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeat.coord1
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rgrg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.translate(-128, -78);
- ctx.fillRect(128, 78, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeat.coord2
- code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/grgr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeat.coord3
- code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rgrg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.translate(-128, -78);
- ctx.fillRect(128, 78, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeatx.basic
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 16);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeatx.outside
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 16);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeatx.coord1
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-x');
- ctx.fillStyle = pattern;
- ctx.translate(0, 16);
- ctx.fillRect(0, -16, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 16);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeaty.basic
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 16, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeaty.outside
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 16, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.repeaty.coord1
- images:
- - red-16x16.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red-16x16.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat-y');
- ctx.fillStyle = pattern;
- ctx.translate(48, 0);
- ctx.fillRect(-48, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 16, 50);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 50,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 50,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.orientation.image
- desc: Image patterns do not get flipped when painted
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/rrgg-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.save();
- ctx.translate(0, -103);
- ctx.fillRect(0, 103, 100, 50);
- ctx.restore();
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 25);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.pattern.paint.orientation.canvas
- desc: Canvas patterns do not get flipped when painted
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
- ctx2.fillStyle = '#f00';
- ctx2.fillRect(0, 0, 100, 25);
- ctx2.fillStyle = '#0f0';
- ctx2.fillRect(0, 25, 100, 25);
- var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
- ctx.fillStyle = pattern;
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 25);
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 98,1 == 0,255,0,255;
- @assert pixel 1,48 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/shadows.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/shadows.yaml
deleted file mode 100644
index ec1bdd101e7..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/shadows.yaml
+++ /dev/null
@@ -1,947 +0,0 @@
-- name: 2d.shadow.attributes.shadowBlur.initial
- code: |
- @assert ctx.shadowBlur === 0;
- t.done();
-
-- name: 2d.shadow.attributes.shadowBlur.valid
- code: |
- ctx.shadowBlur = 1;
- @assert ctx.shadowBlur === 1;
- ctx.shadowBlur = 0.5;
- @assert ctx.shadowBlur === 0.5;
- ctx.shadowBlur = 1e6;
- @assert ctx.shadowBlur === 1e6;
- ctx.shadowBlur = 0;
- @assert ctx.shadowBlur === 0;
- t.done();
-
-- name: 2d.shadow.attributes.shadowBlur.invalid
- code: |
- ctx.shadowBlur = 1;
- ctx.shadowBlur = -2;
- @assert ctx.shadowBlur === 1;
- ctx.shadowBlur = 1;
- ctx.shadowBlur = Infinity;
- @assert ctx.shadowBlur === 1;
- ctx.shadowBlur = 1;
- ctx.shadowBlur = -Infinity;
- @assert ctx.shadowBlur === 1;
- ctx.shadowBlur = 1;
- ctx.shadowBlur = NaN;
- @assert ctx.shadowBlur === 1;
- t.done();
-
-- name: 2d.shadow.attributes.shadowOffset.initial
- code: |
- @assert ctx.shadowOffsetX === 0;
- @assert ctx.shadowOffsetY === 0;
- t.done();
-
-- name: 2d.shadow.attributes.shadowOffset.valid
- code: |
- ctx.shadowOffsetX = 1;
- ctx.shadowOffsetY = 2;
- @assert ctx.shadowOffsetX === 1;
- @assert ctx.shadowOffsetY === 2;
- ctx.shadowOffsetX = 0.5;
- ctx.shadowOffsetY = 0.25;
- @assert ctx.shadowOffsetX === 0.5;
- @assert ctx.shadowOffsetY === 0.25;
- ctx.shadowOffsetX = -0.5;
- ctx.shadowOffsetY = -0.25;
- @assert ctx.shadowOffsetX === -0.5;
- @assert ctx.shadowOffsetY === -0.25;
- ctx.shadowOffsetX = 0;
- ctx.shadowOffsetY = 0;
- @assert ctx.shadowOffsetX === 0;
- @assert ctx.shadowOffsetY === 0;
- ctx.shadowOffsetX = 1e6;
- ctx.shadowOffsetY = 1e6;
- @assert ctx.shadowOffsetX === 1e6;
- @assert ctx.shadowOffsetY === 1e6;
- t.done();
-
-- name: 2d.shadow.attributes.shadowOffset.invalid
- code: |
- ctx.shadowOffsetX = 1;
- ctx.shadowOffsetY = 2;
- ctx.shadowOffsetX = Infinity;
- ctx.shadowOffsetY = Infinity;
- @assert ctx.shadowOffsetX === 1;
- @assert ctx.shadowOffsetY === 2;
- ctx.shadowOffsetX = 1;
- ctx.shadowOffsetY = 2;
- ctx.shadowOffsetX = -Infinity;
- ctx.shadowOffsetY = -Infinity;
- @assert ctx.shadowOffsetX === 1;
- @assert ctx.shadowOffsetY === 2;
- ctx.shadowOffsetX = 1;
- ctx.shadowOffsetY = 2;
- ctx.shadowOffsetX = NaN;
- ctx.shadowOffsetY = NaN;
- @assert ctx.shadowOffsetX === 1;
- @assert ctx.shadowOffsetY === 2;
- t.done();
-
-- name: 2d.shadow.attributes.shadowColor.initial
- code: |
- @assert ctx.shadowColor === 'rgba(0, 0, 0, 0)';
- t.done();
-
-- name: 2d.shadow.attributes.shadowColor.valid
- code: |
- ctx.shadowColor = 'lime';
- @assert ctx.shadowColor === '#00ff00';
- ctx.shadowColor = 'RGBA(0,255, 0,0)';
- @assert ctx.shadowColor === 'rgba(0, 255, 0, 0)';
- t.done();
-
-- name: 2d.shadow.attributes.shadowColor.invalid
- code: |
- ctx.shadowColor = '#00ff00';
- ctx.shadowColor = 'bogus';
- @assert ctx.shadowColor === '#00ff00';
- ctx.shadowColor = '#00ff00';
- ctx.shadowColor = 'red bogus';
- @assert ctx.shadowColor === '#00ff00';
- ctx.shadowColor = '#00ff00';
- ctx.shadowColor = ctx;
- @assert ctx.shadowColor === '#00ff00';
- ctx.shadowColor = '#00ff00';
- ctx.shadowColor = undefined;
- @assert ctx.shadowColor === '#00ff00';
- t.done();
-
-- name: 2d.shadow.enable.off.1
- desc: Shadows are not drawn when only shadowColor is set
- code: |
- ctx.shadowColor = '#f00';
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.enable.off.2
- desc: Shadows are not drawn when only shadowColor is set
- code: |
- ctx.globalCompositeOperation = 'destination-atop';
- ctx.shadowColor = '#f00';
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.enable.blur
- desc: Shadows are drawn if shadowBlur is set
- code: |
- ctx.globalCompositeOperation = 'destination-atop';
- ctx.shadowColor = '#0f0';
- ctx.shadowBlur = 0.1;
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.enable.x
- desc: Shadows are drawn if shadowOffsetX is set
- code: |
- ctx.globalCompositeOperation = 'destination-atop';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetX = 0.1;
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.enable.y
- desc: Shadows are drawn if shadowOffsetY is set
- code: |
- ctx.globalCompositeOperation = 'destination-atop';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 0.1;
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.offset.positiveX
- desc: Shadows can be offset with positive x
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetX = 50;
- ctx.fillRect(0, 0, 50, 50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.offset.negativeX
- desc: Shadows can be offset with negative x
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetX = -50;
- ctx.fillRect(50, 0, 50, 50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.offset.positiveY
- desc: Shadows can be offset with positive y
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 25;
- ctx.fillRect(0, 0, 100, 25);
- @assert pixel 50,12 == 0,255,0,255;
- @assert pixel 50,37 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.offset.negativeY
- desc: Shadows can be offset with negative y
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = -25;
- ctx.fillRect(0, 25, 100, 25);
- @assert pixel 50,12 == 0,255,0,255;
- @assert pixel 50,37 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.outside
- desc: Shadows of shapes outside the visible area can be offset onto the visible
- area
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetX = 100;
- ctx.fillRect(-100, 0, 25, 50);
- ctx.shadowOffsetX = -100;
- ctx.fillRect(175, 0, 25, 50);
- ctx.shadowOffsetX = 0;
- ctx.shadowOffsetY = 100;
- ctx.fillRect(25, -100, 50, 25);
- ctx.shadowOffsetY = -100;
- ctx.fillRect(25, 125, 50, 25);
- @assert pixel 12,25 == 0,255,0,255;
- @assert pixel 87,25 == 0,255,0,255;
- @assert pixel 50,12 == 0,255,0,255;
- @assert pixel 50,37 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.clip.1
- desc: Shadows of clipped shapes are still drawn within the clipping region
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(50, 0, 50, 50);
- ctx.save();
- ctx.beginPath();
- ctx.rect(50, 0, 50, 50);
- ctx.clip();
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetX = 50;
- ctx.fillRect(0, 0, 50, 50);
- ctx.restore();
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.clip.2
- desc: Shadows are not drawn outside the clipping region
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(50, 0, 50, 50);
- ctx.save();
- ctx.beginPath();
- ctx.rect(0, 0, 50, 50);
- ctx.clip();
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetX = 50;
- ctx.fillRect(0, 0, 50, 50);
- ctx.restore();
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.clip.3
- desc: Shadows of clipped shapes are still drawn within the clipping region
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(50, 0, 50, 50);
- ctx.save();
- ctx.beginPath();
- ctx.rect(0, 0, 50, 50);
- ctx.clip();
- ctx.fillStyle = '#f00';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetX = 50;
- ctx.fillRect(-50, 0, 50, 50);
- ctx.restore();
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.stroke.basic
- desc: Shadows are drawn for strokes
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.strokeStyle = '#f00';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 50;
- ctx.beginPath();
- ctx.lineWidth = 50;
- ctx.moveTo(0, -25);
- ctx.lineTo(100, -25);
- ctx.stroke();
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.stroke.cap.1
- desc: Shadows are not drawn for areas outside stroke caps
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.strokeStyle = '#f00';
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetY = 50;
- ctx.beginPath();
- ctx.lineWidth = 50;
- ctx.lineCap = 'butt';
- ctx.moveTo(-50, -25);
- ctx.lineTo(0, -25);
- ctx.moveTo(100, -25);
- ctx.lineTo(150, -25);
- ctx.stroke();
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.stroke.cap.2
- desc: Shadows are drawn for stroke caps
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.strokeStyle = '#f00';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 50;
- ctx.beginPath();
- ctx.lineWidth = 50;
- ctx.lineCap = 'square';
- ctx.moveTo(25, -25);
- ctx.lineTo(75, -25);
- ctx.stroke();
- @assert pixel 1,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.stroke.join.1
- desc: Shadows are not drawn for areas outside stroke joins
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.strokeStyle = '#f00';
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetX = 100;
- ctx.lineWidth = 200;
- ctx.lineJoin = 'bevel';
- ctx.beginPath();
- ctx.moveTo(-200, -50);
- ctx.lineTo(-150, -50);
- ctx.lineTo(-151, -100);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.stroke.join.2
- desc: Shadows are drawn for stroke joins
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(50, 0, 50, 50);
- ctx.strokeStyle = '#f00';
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetX = 100;
- ctx.lineWidth = 200;
- ctx.lineJoin = 'miter';
- ctx.beginPath();
- ctx.moveTo(-200, -50);
- ctx.lineTo(-150, -50);
- ctx.lineTo(-151, -100);
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.stroke.join.3
- desc: Shadows are drawn for stroke joins respecting miter limit
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.strokeStyle = '#f00';
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetX = 100;
- ctx.lineWidth = 200;
- ctx.lineJoin = 'miter';
- ctx.miterLimit = 0.1;
- ctx.beginPath();
- ctx.moveTo(-200, -50);
- ctx.lineTo(-150, -50);
- ctx.lineTo(-151, -100); // (not an exact right angle, to avoid some other bug in Firefox 3)
- ctx.stroke();
- @assert pixel 1,1 == 0,255,0,255;
- @assert pixel 48,48 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 98,48 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.image.basic
- desc: Shadows are drawn for images
- images:
- - red.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 50;
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- @assert pixel 50,25 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.image.transparent.1
- desc: Shadows are not drawn for transparent images
- images:
- - transparent.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetY = 50;
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- @assert pixel 50,25 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.image.transparent.2
- desc: Shadows are not drawn for transparent parts of images
- images:
- - redtransparent.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(50, 0, 50, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 50, -50);
- ctx.shadowColor = '#f00';
- ctx.drawImage(bitmap, -50, -50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.image.alpha
- desc: Shadows are drawn correctly for partially-transparent images
- images:
- - transparent50.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#00f';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent50.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, -50);
- @assert pixel 50,25 ==~ 127,0,127,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.image.section
- desc: Shadows are not drawn for areas outside image source rectangles
- images:
- - redtransparent.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#f00';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 50, 0, 50, 50, 0, -50, 50, 50);
- @assert pixel 25,25 ==~ 0,255,0,255;
- @assert pixel 50,25 ==~ 0,255,0,255;
- @assert pixel 75,25 ==~ 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.image.scale
- desc: Shadows are drawn correctly for scaled images
- images:
- - redtransparent.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0, 100, 50, -10, -50, 240, 50);
- @assert pixel 25,25 ==~ 0,255,0,255;
- @assert pixel 50,25 ==~ 0,255,0,255;
- @assert pixel 75,25 ==~ 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.canvas.basic
- desc: Shadows are drawn for canvases
- code: |
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
- ctx2.fillStyle = '#f00';
- ctx2.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 50;
- ctx.drawImage(offscreenCanvas2, 0, -50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.canvas.transparent.1
- desc: Shadows are not drawn for transparent canvases
- code: |
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetY = 50;
- ctx.drawImage(offscreenCanvas2, 0, -50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.canvas.transparent.2
- desc: Shadows are not drawn for transparent parts of canvases
- code: |
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
- ctx2.fillStyle = '#f00';
- ctx2.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(50, 0, 50, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- ctx.drawImage(offscreenCanvas2, 50, -50);
- ctx.shadowColor = '#f00';
- ctx.drawImage(offscreenCanvas2, -50, -50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.canvas.alpha
- desc: Shadows are drawn correctly for partially-transparent canvases
- code: |
- var offscreenCanvas2 = new OffscreenCanvas(100, 50);
- var ctx2 = offscreenCanvas2.getContext('2d');
- ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)';
- ctx2.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#00f';
- ctx.drawImage(offscreenCanvas2, 0, -50);
- @assert pixel 50,25 ==~ 127,0,127,255;
- t.done();
-
-- name: 2d.shadow.pattern.basic
- desc: Shadows are drawn for fill patterns
- images:
- - red.png
- code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/red.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 50;
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.pattern.transparent.1
- desc: Shadows are not drawn for transparent fill patterns
- # http://bugs.webkit.org/show_bug.cgi?id=15266
- images:
- - transparent.png
- code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetY = 50;
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.pattern.transparent.2
- desc: Shadows are not drawn for transparent parts of fill patterns
- images:
- - redtransparent.png
- code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(50, 0, 50, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.pattern.alpha
- desc: Shadows are drawn correctly for partially-transparent fill patterns
- images:
- - transparent50.png
- code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/transparent50.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- return createImageBitmap(response).then(bitmap => {
- var pattern = ctx.createPattern(bitmap, 'repeat');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#00f';
- ctx.fillStyle = pattern;
- ctx.fillRect(0, -50, 100, 50);
- });
- }).then(t_pass, t_fail);
-
-- name: 2d.shadow.gradient.basic
- desc: Shadows are drawn for gradient fills
- # http://bugs.webkit.org/show_bug.cgi?id=15266
- code: |
- var gradient = ctx.createLinearGradient(0, 0, 100, 0);
- gradient.addColorStop(0, '#f00');
- gradient.addColorStop(1, '#f00');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#0f0';
- ctx.shadowOffsetY = 50;
- ctx.fillStyle = gradient;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.gradient.transparent.1
- desc: Shadows are not drawn for transparent gradient fills
- # http://bugs.webkit.org/show_bug.cgi?id=15266
- code: |
- var gradient = ctx.createLinearGradient(0, 0, 100, 0);
- gradient.addColorStop(0, 'rgba(0,0,0,0)');
- gradient.addColorStop(1, 'rgba(0,0,0,0)');
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetY = 50;
- ctx.fillStyle = gradient;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.gradient.transparent.2
- desc: Shadows are not drawn for transparent parts of gradient fills
- code: |
- var gradient = ctx.createLinearGradient(0, 0, 100, 0);
- gradient.addColorStop(0, '#f00');
- gradient.addColorStop(0.499, '#f00');
- gradient.addColorStop(0.5, 'rgba(0,0,0,0)');
- gradient.addColorStop(1, 'rgba(0,0,0,0)');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 50, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(50, 0, 50, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- ctx.fillStyle = gradient;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 25,25 == 0,255,0,255;
- @assert pixel 50,25 == 0,255,0,255;
- @assert pixel 75,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.gradient.alpha
- desc: Shadows are drawn correctly for partially-transparent gradient fills
- code: |
- var gradient = ctx.createLinearGradient(0, 0, 100, 0);
- gradient.addColorStop(0, 'rgba(255,0,0,0.5)');
- gradient.addColorStop(1, 'rgba(255,0,0,0.5)');
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#00f';
- ctx.fillStyle = gradient;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 50,25 ==~ 127,0,127,255;
- t.done();
-
-- name: 2d.shadow.transform.1
- desc: Shadows take account of transformations
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- ctx.translate(100, 100);
- ctx.fillRect(-100, -150, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.transform.2
- desc: Shadow offsets are not affected by transformations
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowOffsetY = 50;
- ctx.shadowColor = '#0f0';
- ctx.rotate(Math.PI)
- ctx.fillRect(-100, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.alpha.1
- desc: Shadow color alpha components are used
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = 'rgba(255, 0, 0, 0.01)';
- ctx.shadowOffsetY = 50;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 50,25 ==~ 0,255,0,255 +/- 4;
- t.done();
-
-- name: 2d.shadow.alpha.2
- desc: Shadow color alpha components are used
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.shadowColor = 'rgba(0, 0, 255, 0.5)';
- ctx.shadowOffsetY = 50;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 50,25 ==~ 127,0,127,255;
- t.done();
-
-- name: 2d.shadow.alpha.3
- desc: Shadows are affected by globalAlpha
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00'; // (work around broken Firefox globalAlpha caching)
- ctx.shadowColor = '#00f';
- ctx.shadowOffsetY = 50;
- ctx.globalAlpha = 0.5;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 50,25 ==~ 127,0,127,255;
- t.done();
-
-- name: 2d.shadow.alpha.4
- desc: Shadows with alpha components are correctly affected by globalAlpha
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = '#f00'; // (work around broken Firefox globalAlpha caching)
- ctx.shadowColor = 'rgba(0, 0, 255, 0.707)';
- ctx.shadowOffsetY = 50;
- ctx.globalAlpha = 0.707;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 50,25 ==~ 127,0,127,255;
- t.done();
-
-- name: 2d.shadow.alpha.5
- desc: Shadows of shapes with alpha components are drawn correctly
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = 'rgba(64, 0, 0, 0.5)';
- ctx.shadowColor = '#00f';
- ctx.shadowOffsetY = 50;
- ctx.fillRect(0, -50, 100, 50);
- @assert pixel 50,25 ==~ 127,0,127,255;
- t.done();
-
-- name: 2d.shadow.composite.1
- desc: Shadows are drawn using globalCompositeOperation
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.globalCompositeOperation = 'xor';
- ctx.shadowColor = '#f00';
- ctx.shadowOffsetX = 100;
- ctx.fillStyle = '#0f0';
- ctx.fillRect(-100, 0, 200, 50);
- @assert pixel 50,25 ==~ 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.composite.2
- desc: Shadows are drawn using globalCompositeOperation
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.globalCompositeOperation = 'xor';
- ctx.shadowColor = '#f00';
- ctx.shadowBlur = 1;
- ctx.fillStyle = '#0f0';
- ctx.fillRect(-10, -10, 120, 70);
- @assert pixel 50,25 ==~ 0,255,0,255;
- t.done();
-
-- name: 2d.shadow.composite.3
- desc: Areas outside shadows are drawn correctly with destination-out
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.globalCompositeOperation = 'destination-out';
- ctx.shadowColor = '#f00';
- ctx.shadowBlur = 10;
- ctx.fillStyle = '#f00';
- ctx.fillRect(200, 0, 100, 50);
- @assert pixel 5,5 ==~ 0,255,0,255;
- @assert pixel 50,25 ==~ 0,255,0,255;
- t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml
index 784a099aca0..0907076cc8a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml
@@ -16,7 +16,13 @@
- name: 2d.text.font.parse.complex
code: |
ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif';
- @assert ctx.font === 'italic small-caps 12px "Unknown Font", sans-serif'; @moz-todo
+ @assert ['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font);
+ t.done();
+
+- name: 2d.text.font.parse.complex2
+ code: |
+ ctx.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif';
+ @assert ctx.font === 'italic small-caps 12px "Unknown Font #2", sans-serif';
t.done();
- name: 2d.text.font.parse.family
@@ -614,7 +620,7 @@
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'ideographic';
- ctx.fillText('CC', 0, 31.25);
+ ctx.fillText('CC', 0, 81.25);
@assert pixel 5,5 ==~ 0,255,0,255;
@assert pixel 95,5 ==~ 0,255,0,255;
@assert pixel 25,25 ==~ 0,255,0,255;
@@ -638,7 +644,7 @@
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textBaseline = 'hanging';
- ctx.fillText('CC', 0, 12.5);
+ ctx.fillText('CC', 0, -30);
@assert pixel 5,5 ==~ 0,255,0,255; @moz-todo
@assert pixel 95,5 ==~ 0,255,0,255; @moz-todo
@assert pixel 25,25 ==~ 0,255,0,255;
@@ -849,7 +855,7 @@
expected: green
- name: 2d.text.draw.space.collapse.space
- desc: Space characters are converted to U+0020, and collapsed (per CSS)
+ desc: Space characters are converted to U+0020, and are NOT collapsed
fonts:
- CanvasTest
code: |
@@ -862,14 +868,14 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E EE', -100, 37.5);
- @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo
+ ctx.fillText('E EE', -150, 37.5);
+ @assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
}).then(t_pass, t_fail);
expected: green
- name: 2d.text.draw.space.collapse.other
- desc: Space characters are converted to U+0020, and collapsed (per CSS)
+ desc: Space characters are converted to U+0020, and are NOT collapsed
fonts:
- CanvasTest
code: |
@@ -882,9 +888,9 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5);
- @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo
- @assert pixel 75,25 ==~ 0,255,0,255; @moz-todo
+ ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5);
+ @assert pixel 25,25 ==~ 0,255,0,255;
+ @assert pixel 75,25 ==~ 0,255,0,255;
}).then(t_pass, t_fail);
expected: green
@@ -909,7 +915,7 @@
expected: green
- name: 2d.text.draw.space.collapse.start
- desc: Space characters at the start of a line are collapsed (per CSS)
+ desc: Space characters at the start of a line are NOT collapsed
fonts:
- CanvasTest
code: |
@@ -922,14 +928,14 @@
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
- ctx.fillText(' EE', 0, 37.5);
- @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo
+ ctx.fillText(' EE', -50, 37.5);
+ @assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
}).then(t_pass, t_fail);
expected: green
- name: 2d.text.draw.space.collapse.end
- desc: Space characters at the end of a line are collapsed (per CSS)
+ desc: Space characters at the end of a line are NOT collapsed
fonts:
- CanvasTest
code: |
@@ -943,9 +949,9 @@
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.textAlign = 'right';
- ctx.fillText('EE ', 100, 37.5);
+ ctx.fillText('EE ', 150, 37.5);
@assert pixel 25,25 ==~ 0,255,0,255;
- @assert pixel 75,25 ==~ 0,255,0,255; @moz-todo
+ @assert pixel 75,25 ==~ 0,255,0,255;
}).then(t_pass, t_fail);
expected: green
@@ -983,7 +989,7 @@
}).then(t_pass, t_fail);
- name: 2d.text.measure.width.space
- desc: Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas
+ desc: Space characters are converted to U+0020 and NOT collapsed
fonts:
- CanvasTest
code: |
@@ -995,11 +1001,11 @@
ctx.font = '50px CanvasTest';
@assert ctx.measureText('A B').width === 150;
@assert ctx.measureText('A B').width === 200;
- @assert ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width === 150; @moz-todo
+ @assert ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width === 650;
@assert ctx.measureText('A \x0b B').width >= 200;
- @assert ctx.measureText(' AB').width === 100; @moz-todo
- @assert ctx.measureText('AB ').width === 100; @moz-todo
+ @assert ctx.measureText(' AB').width === 150;
+ @assert ctx.measureText('AB ').width === 150;
}).then(t_pass, t_fail);
- name: 2d.text.measure.advances
@@ -1379,38 +1385,40 @@
code: |
@assert ctx.fontKerning === "auto";
ctx.fontKerning = "Normal";
- @assert ctx.fontKerning === "normal";
- ctx.fontKerning = "auto";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "normal";
@assert ctx.fontKerning === "normal";
+ ctx.fontKerning = "Auto";
+ @assert ctx.fontKerning === "normal";
ctx.fontKerning = "auto";
ctx.fontKerning = "noRmal";
- @assert ctx.fontKerning === "normal";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "auto";
ctx.fontKerning = "NoRMal";
- @assert ctx.fontKerning === "normal";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "auto";
ctx.fontKerning = "NORMAL";
- @assert ctx.fontKerning === "normal";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "None";
- @assert ctx.fontKerning === "none";
- ctx.fontKerning = "auto";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "none";
@assert ctx.fontKerning === "none";
+ ctx.fontKerning = "Auto";
+ @assert ctx.fontKerning === "none";
ctx.fontKerning = "auto";
ctx.fontKerning = "nOne";
- @assert ctx.fontKerning === "none";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "auto";
ctx.fontKerning = "nonE";
- @assert ctx.fontKerning === "none";
+ @assert ctx.fontKerning === "auto";
ctx.fontKerning = "auto";
ctx.fontKerning = "NONE";
- @assert ctx.fontKerning === "none";
+ @assert ctx.fontKerning === "auto";
t.done();
- name: 2d.text.drawing.style.fontVariant.settings
- desc: Testing basic functionalities of fontKerning for canvas
+ desc: Testing basic functionalities of fontVariant for canvas
code: |
// Setting fontVariantCaps with lower cases
@assert ctx.fontVariantCaps === "normal";
@@ -1436,29 +1444,33 @@
ctx.fontVariantCaps = "titling-caps";
@assert ctx.fontVariantCaps === "titling-caps";
- // Setting fontVariantCaps with lower cases and upper cases word.
+ // Setting fontVariantCaps with mixed-case values is not valid
ctx.fontVariantCaps = "nORmal";
+ @assert ctx.fontVariantCaps === "titling-caps";
+
+ ctx.fontVariantCaps = "normal";
@assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "smaLL-caps";
- @assert ctx.fontVariantCaps === "small-caps";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "all-small-CAPS";
- @assert ctx.fontVariantCaps === "all-small-caps";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "pEtitE-caps";
- @assert ctx.fontVariantCaps === "petite-caps";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "All-Petite-Caps";
- @assert ctx.fontVariantCaps === "all-petite-caps";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "uNIcase";
- @assert ctx.fontVariantCaps === "unicase";
+ @assert ctx.fontVariantCaps === "normal";
ctx.fontVariantCaps = "titling-CAPS";
- @assert ctx.fontVariantCaps === "titling-caps";
+ @assert ctx.fontVariantCaps === "normal";
// Setting fontVariantCaps with non-existing font variant.
+ ctx.fontVariantCaps = "titling-caps";
ctx.fontVariantCaps = "abcd";
@assert ctx.fontVariantCaps === "titling-caps";
t.done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/the-canvas-state.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/the-canvas-state.yaml
deleted file mode 100644
index afb4cf956c6..00000000000
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/the-canvas-state.yaml
+++ /dev/null
@@ -1,92 +0,0 @@
-- name: 2d.state.saverestore.transformation
- desc: save()/restore() affects the current transformation matrix
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.save();
- ctx.translate(200, 0);
- ctx.restore();
- ctx.fillStyle = '#f00';
- ctx.fillRect(-200, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.state.saverestore.clip
- desc: save()/restore() affects the clipping path
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.save();
- ctx.rect(0, 0, 1, 1);
- ctx.clip();
- ctx.restore();
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.state.saverestore.path
- desc: save()/restore() does not affect the current path
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.save();
- ctx.rect(0, 0, 100, 50);
- ctx.restore();
- ctx.fillStyle = '#0f0';
- ctx.fill();
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.state.saverestore.bitmap
- desc: save()/restore() does not affect the current bitmap
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.save();
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.restore();
- @assert pixel 50,25 == 0,255,0,255;
- t.done();
-
-- name: 2d.state.saverestore.stack
- desc: save()/restore() can be nested as a stack
- code: |
- ctx.lineWidth = 1;
- ctx.save();
- ctx.lineWidth = 2;
- ctx.save();
- ctx.lineWidth = 3;
- @assert ctx.lineWidth === 3;
- ctx.restore();
- @assert ctx.lineWidth === 2;
- ctx.restore();
- @assert ctx.lineWidth === 1;
- t.done();
-
-- name: 2d.state.saverestore.stackdepth
- desc: save()/restore() stack depth is not unreasonably limited
- code: |
- var limit = 512;
- for (var i = 1; i < limit; ++i)
- {
- ctx.save();
- ctx.lineWidth = i;
- }
- for (var i = limit-1; i > 0; --i)
- {
- @assert ctx.lineWidth === i;
- ctx.restore();
- }
- t.done();
-
-- name: 2d.state.saverestore.underflow
- desc: restore() with an empty stack has no effect
- code: |
- for (var i = 0; i < 16; ++i)
- ctx.restore();
- ctx.lineWidth = 0.5;
- ctx.restore();
- @assert ctx.lineWidth === 0.5;
- t.done();
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.js b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.js
new file mode 100644
index 00000000000..a9f6a1c88e2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.js
@@ -0,0 +1,41 @@
+// META: variant=?1-4
+// META: variant=?5-last
+// META: script=/common/get-host-info.sub.js
+// META: script=/common/utils.js
+// META: script=/common/dispatcher/dispatcher.js
+// META: script=./resources/common.js
+// META: script=./resources/iframeTest.js
+promise_test(async test => {
+ const test_token = token();
+ const child_token = token();
+
+ const redirecting_child_url = cross_origin + "/common/dispatcher/executor.html?uuid=" + child_token;
+
+ const child_url =
+ same_origin +
+ "/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py?redirectTo=" + redirecting_child_url;
+
+ await send(newWindow(coep_credentialless), `
+ let iframe = document.createElement("iframe");
+ iframe.src = "${child_url}";
+ document.body.appendChild(iframe);
+ `);
+
+ await send(child_token, `
+ send("${test_token}", "load");
+ `);
+
+ // There are no interoperable ways to check an iframe failed to load. So a
+ // timeout is being used.
+ // See https://github.com/whatwg/html/issues/125
+ // Use a shorter timeout when it is expected to be reached.
+ // - The long delay reduces the false-positive rate. False-positive causes
+ // stability problems on bot, so a big delay is used to vanish them.
+ // https://crbug.com/1215956.
+ // - The short delay avoids delaying too much the test(s) for nothing and
+ // timing out. False-negative are not a problem, they just need not to
+ // overwhelm the true-negative, which is trivial to get.
+ step_timeout(()=>send(test_token, "block"), 6000);
+
+ assert_equals(await receive(test_token), EXPECT_LOAD);
+});
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py
new file mode 100644
index 00000000000..7f0c35e93e6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py
@@ -0,0 +1,14 @@
+COEP_HEADER = b"|header(cross-origin-embedder-policy, credentialless)"
+CORP_HEADER = b"|header(cross-origin-resource-policy, cross-origin)"
+
+def main(request, response):
+ """
+ Causes a redirection that the initial response doesn't have credentialless and the
+ redirected response has credentialless.
+ """
+ response.status = 302
+
+ location = \
+ request.GET[b'redirectTo'] + b"&pipe=" + COEP_HEADER + CORP_HEADER
+
+ response.headers.set(b"Location", location)
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html
index 2957e35f59b..ee08bcb4962 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html
@@ -15,7 +15,14 @@ bc.onmessage = () => {
const id = setInterval(() => {
if (win.closed || win.location.href !== 'about:blank') {
clearInterval(id);
- bc.postMessage({name: win.name || null, closed: win.closed});
+ const winName = (() => {
+ try {
+ return win.name;
+ } catch (e) {
+ return null;
+ }
+ })();
+ bc.postMessage({name: winName || null, closed: win.closed});
}
}, 100);
</script>
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html
index 00eb6506e9b..10929847ee6 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html
@@ -9,8 +9,7 @@
<script>
-async function createCoopRestrictPropertiesPopup(name) {
- const popupToken = token();
+async function createCoopRestrictPropertiesPopup(popupToken, name) {
const url = SAME_ORIGIN.origin + '/common/dispatcher/executor.html' +
`?uuid=${popupToken}` +
'&pipe=|header(Cross-Origin-Opener-Policy, restrict-properties)';
@@ -26,15 +25,33 @@ async function createCoopRestrictPropertiesPopup(name) {
}
promise_test(async t => {
- // Open two COOP: restrict-properties popups with the same name.
+ // Start by opening a first COOP: restrict-properties popup. No name is set to
+ // begin with.
+ const popupToken1 = token();
+ const popup1 = await createCoopRestrictPropertiesPopup(popupToken1, '');
+
+ // Once the popup is live, explicitly set a name.
const name = token();
- const popup1 = await createCoopRestrictPropertiesPopup(name);
- const popup2 = await createCoopRestrictPropertiesPopup(name);
+ send(popupToken1, `window.name = '${name}'`);
+
+ // To make sure this name has been propagated to other processes, send a dummy
+ // message from the popup to the main page, and wait for it to be received.
+ // It should be delivered after the name change is replicated.
+ const message_waiter = new Promise(resolve => {
+ onmessage = (event) => {
+ if (event.data == 'Waited enough') { resolve(); }
+ }
+ });
+ send(popupToken1, `opener.postMessage('Waited enough', '*')`);
+ await message_waiter;
- // Check that named targeting did not cross isolation boundaries. Two popups
- // should have been created.
+ // Finally, call window.open with the same name. This should not resolve
+ // across browsing context groups, and create a brand new popup.
+ const popupToken2 = token();
+ const popup2 = await createCoopRestrictPropertiesPopup(popupToken2, name);
assert_not_equals(popup1, popup2,
'Named targeting resolved across isolation boundaries');
+
}, 'Verify that named targeting does not work across isolation boundaries.');
</script>
diff --git a/tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html b/tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html
index c9a22ed6db3..ddfa7c4ade6 100644
--- a/tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html
+++ b/tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html
@@ -31,7 +31,7 @@ function start(event)
</script>
</head>
<body onload="paint('gray')">
-<div draggable="true" ondragstart="start(event)"/>
+<div draggable="true" ondragstart="start(event)"></div>
<p>Drag green box above to the gray canvas below. Canvas should turn green when you drop green box on it.</p>
<p>
<canvas width="100" height="100" ondragenter="event.preventDefault()" ondragover="return false">Canvas</canvas>
diff --git a/tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html b/tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html
index 33ed630fe06..047011d071d 100644
--- a/tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html
+++ b/tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html
@@ -24,7 +24,7 @@ function start(event)
</script>
</head>
<body>
-<div draggable="true" ondragstart="start(event)"/>
+<div draggable="true" ondragstart="start(event)"></div>
<p>Drag green box above to the gray canvas below. Canvas should turn green when you drop green box on it.</p>
<p><iframe src="helper-drop-here-canvas.xhtml">Canvas</iframe></p>
<script>
diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html
index 9a2d1d06413..e65bf6cbe80 100644
--- a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html
@@ -1,4 +1,4 @@
<!DOCTYPE html>
<div>
- <video controls />
+ <video controls></video>
</div>
diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html
index d124396ab2c..acd25881129 100644
--- a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html
+++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html
@@ -4,5 +4,5 @@
<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#embedded-content-rendering-rules" />
<link rel="match" href="video-controls-vertical-writing-mode-ref.html" />
<div style="writing-mode:vertical-lr">
- <video controls />
+ <video controls></video>
</div>
diff --git a/tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html b/tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html
index 9c8642d10f9..e3dcd43a17a 100644
--- a/tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html
+++ b/tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html
@@ -93,12 +93,27 @@
}
/**
+ * @param {Element} element
+ * @returns {boolean}
+ */
+ function isFormControl(element) {
+ if (["button", "input", "select", "textarea"].includes(element.localName)) {
+ return true;
+ }
+ return element.constructor.formAssociated;
+ }
+
+ function isDisabledFormControl(element) {
+ return isFormControl(element) && element.disabled;
+ }
+
+ /**
* @param {Element} target
* @param {*} observedEvent
*/
function shouldNotBubble(target, observedEvent) {
return (
- target.disabled &&
+ isDisabledFormControl(target) &&
observedEvent.isTrusted &&
["mousedown", "mouseup", "click"].includes(observedEvent.type)
);
@@ -136,7 +151,7 @@
await t.step_func(clickerFn)(target);
await new Promise(resolve => t.step_timeout(resolve, 0));
- const expected = element.disabled ? expectedEvents : nonDisabledExpectedEvents;
+ const expected = isDisabledFormControl(element) ? expectedEvents : nonDisabledExpectedEvents;
assert_array_equals(observedEvents.map(e => e.type), expected, "Observed events");
for (const observed of observedEvents) {
diff --git a/tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html b/tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html
index 11822e4dd48..6d1a39c1de9 100644
--- a/tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html
+++ b/tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html
@@ -15,34 +15,41 @@
</div>
<div id=target2parent>
- <fieldset disabled id=target2fieldset>hello world</div>
+ <fieldset disabled id=target2fieldset>hello world</fieldset>
</div>
<script>
-promise_test(async () => {
- let target1parentClicked = false;
- let target1childClicked = false;
- let target1fieldsetClicked = false;
- target1parent.onclick = () => target1parentClicked = true;
- target1child.onclick = () => target1childClicked = true;
- target1fieldset.onclick = () => target1fieldsetClicked = true;
-
- await test_driver.click(target1child);
-
- assert_true(target1parentClicked, 'The parent of the fieldset should receive a click event.');
- assert_true(target1childClicked, 'The child of the fieldset should receive a click event.');
- assert_true(target1fieldsetClicked, 'The fieldset element should receive a click event.');
-}, 'Disabled fieldset elements should not prevent click event propagation.');
-
-promise_test(async () => {
- let target2parentClicked = false;
- let target2fieldsetClicked = false;
- target2parent.onclick = () => target2parentClicked = true;
- target2fieldset.onclick = () => target2fieldsetClicked = true;
-
- await test_driver.click(target2fieldset);
-
- assert_true(target2parentClicked, 'The parent of the fieldset should receive a click event.');
- assert_true(target2fieldsetClicked, 'The fieldset element should receive a click event.');
-}, 'Disabled fieldset elements should not block click events.');
+ const clickers = {
+ "native click": target => test_driver.click(target),
+ "click()": target => target.click(),
+ };
+
+ for (const [clickerName, clicker] of Object.entries(clickers)) {
+ promise_test(async () => {
+ let target1parentClicked = false;
+ let target1childClicked = false;
+ let target1fieldsetClicked = false;
+ target1parent.onclick = () => target1parentClicked = true;
+ target1child.onclick = () => target1childClicked = true;
+ target1fieldset.onclick = () => target1fieldsetClicked = true;
+
+ await clicker(target1child);
+
+ assert_true(target1parentClicked, 'The parent of the fieldset should receive a click event.');
+ assert_true(target1childClicked, 'The child of the fieldset should receive a click event.');
+ assert_true(target1fieldsetClicked, 'The fieldset element should receive a click event.');
+ }, `Disabled fieldset elements should not prevent click event propagation from ${clickerName}`);
+
+ promise_test(async () => {
+ let target2parentClicked = false;
+ let target2fieldsetClicked = false;
+ target2parent.onclick = () => target2parentClicked = true;
+ target2fieldset.onclick = () => target2fieldsetClicked = true;
+
+ await clicker(target2fieldset);
+
+ assert_true(target2parentClicked, 'The parent of the fieldset should receive a click event.');
+ assert_true(target2fieldsetClicked, 'The fieldset element should receive a click event.');
+ }, `Disabled fieldset elements should not block click events from ${clickerName}.`);
+ }
</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html
new file mode 100644
index 00000000000..30d591ae6e7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>the &lt;source> media attribute: no reaction to environment change</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<iframe src="resources/media-min-width.html" width="300"></iframe>
+<script>
+const t = promise_test(async () => {
+ await new Promise(resolve => window.onload = resolve);
+ assert_equals(window[0].beforeEnvChange, '#a', 'beforeEnvChange');
+ assert_equals(window[0].afterEnvChange, '#a', 'afterEnvChange');
+ assert_equals(window[0].afterLoadCalled, '#b', 'afterLoadCalled');
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html
index 6332f0890db..df5f47add2b 100644
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html
@@ -1,14 +1,14 @@
<!doctype html>
-<title>the &lt;source> media attribute has no effect</title>
+<title>the &lt;source> media attribute</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
-<video><source src="resources/delayed-broken-video.py" media="none"></video>
+<video><source src="resources/delayed-broken-video.py" media="not all"></video>
<script>
test(function() {
var v = document.querySelector('video');
var s = document.querySelector('source');
- assert_equals(v.networkState, v.NETWORK_LOADING);
- assert_equals(v.currentSrc, s.src);
+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE);
+ assert_equals(v.currentSrc, '');
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html
new file mode 100644
index 00000000000..6d429d70fd2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<video></video>
+<script>
+function createSource(src, media) {
+ var source = document.createElement('source');
+ source.src = src;
+ if (media) {
+ source.media = media;
+ }
+ return source;
+}
+const rAF = () => new Promise(resolve => requestAnimationFrame(resolve));
+const hash = str => str.substr(str.lastIndexOf('#'));
+(async () => {
+ const v = document.querySelector('video');
+ v.append(createSource('delayed-broken-video.py#a', '(min-width: 200px)'));
+ v.append(createSource('delayed-broken-video.py#b'));
+ await rAF();
+ await rAF();
+ window.beforeEnvChange = hash(v.currentSrc);
+ window.frameElement.width = '150';
+ await rAF();
+ await rAF();
+ window.afterEnvChange = hash(v.currentSrc);
+ v.load()
+ await rAF();
+ await rAF();
+ window.afterLoadCalled = hash(v.currentSrc);
+})();
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_008.htm b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_008.htm
deleted file mode 100644
index c5cb25ed4c2..00000000000
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_008.htm
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML>
-<html>
- <head>
- <title>HTML5 Media Elements: 'media' attribute</title>
- <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
- <link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
- <link rel="help" href="http://www.w3.org/TR/html5/video.html#the-source-element" />
- <meta name="assert" content="'media' attribute is 'all' by default." />
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script type="text/javascript" src="/common/media.js"></script>
- <script type="text/javascript">
- var videotest = async_test();
-
- function do_play(event)
- {
- videotest.step(function() {
- var vid = document.getElementById("video0");
- assert_true(vid.currentSrc.indexOf("movie_300") > 0);
- });
- videotest.done();
- }
-
- var do_error = videotest.unreached_func();
-
- </script>
- </head>
- <body>
- <div id='log'></div>
-
- <video id="video0" autoplay onplay="do_play(event);" onerror="do_error();">
- <script type="text/javascript">
-
- document.write(
- "<source media='not all' src='" + getVideoURI("/media/movie_300") + "'" +
- " />"
- );
- document.write(
- "<source src='" + getVideoURI("/media/movie_5") + "'" +
- " media='all' />"
- );
-
- </script>
- Your browser does not support media elements.
- </video>
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html
index f283633aab4..48980d0a5e2 100644
--- a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html
+++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html
@@ -153,14 +153,14 @@ promise_test(async t => {
if (mutation_event_received_ids.length == 0) {
// ok if mutation events are not supported
} else {
- assert_array_equals(mutation_event_received_ids, ["e0", "e3", "e2", "e1"],
- "removal events received in node insertion order, followed by addition event");
+ assert_array_equals(mutation_event_received_ids, ["e0", "e2", "e3", "e1"],
+ "removal events received in tree order, followed by addition event");
}
assert_element_states(elements, [0, 1, 0, 0], "states after mutation");
assert_array_equals(toggle_event_received_ids, [], "toggle events received before awaiting promises");
await Promise.all(toggle_event_promises);
- assert_array_equals(toggle_event_received_ids, ["e1", "e0", "e3", "e2"], "toggle events received after awaiting promises");
-}, "mutation event and toggle event order matches order of insertion in set of named elements");
+ assert_array_equals(toggle_event_received_ids, ["e1", "e0", "e2", "e3"], "toggle events received after awaiting promises");
+}, "mutation event and toggle event order matches tree order");
// This function is used to guard tests that test behavior that is
// relevant only because of Mutation Events. If mutation events (for
@@ -206,8 +206,26 @@ promise_test(async t => {
assert_element_states(elements, [1, 0, 1], "states before mutation");
elements[1].open = true;
assert_array_equals(received_ids, ["e0", "e2", "e1"],
- "removal events received in node insertion order, followed by addition event, despite changes to name during mutation event");
+ "removal events received in tree order, followed by addition event, despite changes to name during mutation event");
assert_element_states(elements, [0, 1, 0], "states after mutation");
}, "interaction of open attribute changes with mutation events");
+promise_test(async t => {
+ container.innerHTML = `
+ <details></details>
+ <details></details>
+ <details name></details>
+ <details name></details>
+ <details name=""></details>
+ <details name=""></details>
+ `;
+ let elements = Array.from(container.querySelectorAll("details"));
+
+ assert_element_states(elements, [0, 0, 0, 0, 0, 0], "initial states from open attribute");
+ for (let i = 0; i < 6; ++i) {
+ elements[i].open = true;
+ }
+ assert_element_states(elements, [1, 1, 1, 1, 1, 1], "after setting all elements open");
+}, "empty and missing name attributes do not create groups");
+
</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html
index 0f206f1c700..009d10609b0 100644
--- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html
+++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html
@@ -614,3 +614,32 @@ promise_test(async () => {
p21.hidePopover(); // Cleanup
},'Show other auto popover during "hide all popover until"');
</script>
+
+<div id=p25 popover>
+ <div id=p26 popover>26</div>
+ <div id=p27 popover>27</div>
+ <div id=p28 popover>28</div>
+</div>
+<script>
+promise_test(async () => {
+ p25.showPopover();
+ p26.showPopover();
+ let events = [];
+ const logEvents = (e) => { events.push(`${e.newState === 'open' ? 'show' : 'hide'} ${e.target.id}`) };
+ p26.addEventListener('beforetoggle', (e) => {
+ logEvents(e);
+ p28.showPopover();
+ });
+ p27.addEventListener('beforetoggle', logEvents);
+ p28.addEventListener('beforetoggle', (e) => {
+ logEvents(e);
+ p27.showPopover();
+ });
+ p27.showPopover();
+ assert_array_equals(events, ['show p27', 'hide p26', 'show p28', 'show p27'], 'Nested showPopover should not fire event for its HideAllPopoversUntil');
+ assert_false(p26.matches(':popover-open'));
+ assert_true(p27.matches(':popover-open'));
+ assert_false(p28.matches(':popover-open'));
+ p25.hidePopover(); // Cleanup
+}, 'Nested showPopover');
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm
index 501edda065a..307aa464128 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm
@@ -12,7 +12,7 @@
var t = async_test("Document.write() silently fails from an Async script");
var log = t.step_func(function() {
- document.write("<span id='writtenText'/>");
+ document.write("<span id='writtenText'></span>");
assert_equals(null, document.getElementById('writtenText'));
t.done();
});
diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html
index f9600439298..8808675eb69 100644
--- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html
+++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html
@@ -26,6 +26,7 @@
</select>
<textarea id=textarea1>textarea1</textarea>
<textarea disabled id=textarea2>textarea2</textarea>
+<fieldset id=fieldset1></fieldset>
<fieldset disabled id=fieldset2>
<legend><input type=checkbox id=club></legend>
<p><label>Name on card: <input id=clubname required></label></p>
@@ -39,21 +40,21 @@
<progress disabled></progress>
<script>
- testSelectorIdsMatch(":disabled", ["button2", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should match only disabled elements");
+ testSelectorIdsMatch(":disabled", ["button2", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should match only disabled elements");
document.getElementById("button2").removeAttribute("disabled");
- testSelectorIdsMatch(":disabled", ["input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should not match elements whose disabled attribute has been removed");
+ testSelectorIdsMatch(":disabled", ["input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should not match elements whose disabled attribute has been removed");
document.getElementById("button1").setAttribute("disabled", "disabled");
- testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set");
+ testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set");
document.getElementById("button1").setAttribute("disabled", "disabled");
- testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set twice");
+ testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set twice");
document.getElementById("input2").setAttribute("type", "submit"); // change input type to submit
- testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should also match disabled elements whose type has changed");
+ testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match disabled elements whose type has changed");
var input = document.createElement("input");
input.setAttribute("disabled", "disabled");
- testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should not match elements not in the document");
+ testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should not match elements not in the document");
</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html
index 1948343c186..0ad0e1b402a 100644
--- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html
+++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html
@@ -36,6 +36,7 @@
</menu>
</form>
<fieldset id=fieldset1></fieldset>
+<fieldset disabled id=fieldset2></fieldset>
<script>
testSelectorIdsMatch(":enabled", ["button1", "input1", "select1", "optgroup1", "option1", "textarea1", "submitbutton", "fieldset1"], "':enabled' elements that are not disabled");
diff --git a/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html b/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html
index 4d45fa55520..07af33d01e2 100644
--- a/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html
+++ b/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html
@@ -112,13 +112,13 @@ var parameters = [
doc, 'thead', '<col id="col3" width="150"/>', 'col3', 'COL'],
['Clearing stack back to a table body context. Test <colgroup> in <tbody>',
- doc, 'tbody', '<colgroup id="colgroup1" width="150"/>', 'colgroup1', 'COLGROUP'],
+ doc, 'tbody', '<colgroup id="colgroup1" width="150"></colgroup>', 'colgroup1', 'COLGROUP'],
['Clearing stack back to a table body context. Test <colgroup> in <tfoot>',
- doc, 'tfoot', '<colgroup id="colgroup2" width="150"/>', 'colgroup2', 'COLGROUP'],
+ doc, 'tfoot', '<colgroup id="colgroup2" width="150"></colgroup>', 'colgroup2', 'COLGROUP'],
['Clearing stack back to a table body context. Test <colgroup> in <thead>',
- doc, 'thead', '<colgroup id="colgroup3" width="150"/>', 'colgroup3', 'COLGROUP'],
+ doc, 'thead', '<colgroup id="colgroup3" width="150"></colgroup>', 'colgroup3', 'COLGROUP'],
['Clearing stack back to a table body context. Test <tbody> in <tbody>',
doc, 'tbody', '<tbody id="tbody1"></tbody>', 'tbody1', 'TBODY', 1],
diff --git a/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html b/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html
index 135540a5cbe..1bf9c5bba60 100644
--- a/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html
+++ b/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html
@@ -62,7 +62,7 @@ var parameters = [
doc, '<caption id="caption1">Table caption</caption>', 'caption1', 'CAPTION'],
['Clearing stack back to a table context. Test <colgroup>',
- doc, '<colgroup id="colgroup1" width="100%"/>', 'colgroup1', 'COLGROUP'],
+ doc, '<colgroup id="colgroup1" width="100%"></colgroup>', 'colgroup1', 'COLGROUP'],
['Clearing stack back to a table context. Test <tbody>',
doc, '<tbody id="tbody1"></tbody>', 'tbody1', 'TBODY', 1],
diff --git a/tests/wpt/web-platform-tests/https-upgrades/resources/pass.html b/tests/wpt/web-platform-tests/https-upgrades/resources/pass.html
new file mode 100644
index 00000000000..5c7ca343e9b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/https-upgrades/resources/pass.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <body>
+ <script>
+ window.onload = (event) => {
+ window.opener.postMessage('pass', '*');
+ };
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/https-upgrades/tentative/fallback.sub.html b/tests/wpt/web-platform-tests/https-upgrades/tentative/fallback.sub.html
new file mode 100644
index 00000000000..8fdf0dc8360
--- /dev/null
+++ b/tests/wpt/web-platform-tests/https-upgrades/tentative/fallback.sub.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>HTTPS Upgrades: Fallback.</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/get-host-info.sub.js"></script>
+
+ </head>
+ <body>
+ <script>
+ setup({ single_test: true });
+ // If HTTPS upgrades are enabled, this will fail to load since this test is http only,
+ // and should load properly once a fallback is triggered.
+ var url = new URL("http://{{host}}:{{ports[http][0]}}/https-upgrades/resources/pass.html")
+ window.onmessage = function(event) {
+ if (event.data === "pass") {
+ done();
+ }
+ }
+ win = window.open(url)
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/https-upgrades/tentative/upgrade.https.sub.html b/tests/wpt/web-platform-tests/https-upgrades/tentative/upgrade.https.sub.html
new file mode 100644
index 00000000000..71a1fe1dde6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/https-upgrades/tentative/upgrade.https.sub.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>HTTPS Upgrades: Upgrade.</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/get-host-info.sub.js"></script>
+
+ </head>
+ <body>
+ <script>
+ setup({ single_test: true });
+ // HTTPS upgrades don't change custom ports, so this will load correctly if an HTTPS upgrade is performed,
+ // and will fail to load otherwise (since the port will be wrong for http).
+ var url = new URL("http://{{host}}:{{ports[https][0]}}/https-upgrades/resources/pass.html")
+ window.onmessage = function(event) {
+ if (event.data === "pass") {
+ done();
+ }
+ }
+ win = window.open(url)
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html b/tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html
index fdc691819bd..aaf2ce8a746 100644
--- a/tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html
+++ b/tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html
@@ -22,4 +22,4 @@ async_test(function (t) {
observer.observe({type: 'largest-contentful-paint', buffered: true});
}, "Able to observe a video's poster image.");
</script>
-<video id='the_poster' src='/media/test.mp4' poster='/images/blue.png'/>
+<video id='the_poster' src='/media/test.mp4' poster='/images/blue.png'></video>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html
index bf5e9400a03..a9a6930aafc 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html
@@ -2,8 +2,8 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
-<canvas id='canvas0' width=10 height=10/>
-<canvas id='canvas1' width=10 height=10/>
+<canvas id='canvas0' width=10 height=10></canvas>
+<canvas id='canvas1' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html
index d80ab67321f..38fabdcdfac 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html
@@ -2,7 +2,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
-<canvas id='canvas' width=10 height=10/>
+<canvas id='canvas' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html
index 55272d14995..391dbb58f0a 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html
@@ -2,7 +2,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
-<canvas id='canvas' width=10 height=10/>
+<canvas id='canvas' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html
index a4ecbe61181..91c308622cb 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html
@@ -2,7 +2,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
-<canvas id='canvas' width=10 height=10/>
+<canvas id='canvas' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html b/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html
index e27950fc5ed..9ccc51f7b1f 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html
@@ -6,7 +6,7 @@
async_test(t => {
let iframe = document.createElement('iframe');
- let html = "<canvas id='canvas' width=10 height=10 />";
+ let html = "<canvas id='canvas' width=10 height=10></canvas>";
iframe.srcdoc = html;
iframe.onload = t.step_func_done(() => {
// This detaches the frame while retaining a reference to an
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html
index 94962a03f4d..8b6ab891ff8 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html
@@ -3,7 +3,7 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
-<canvas id='canvas' width=10 height=10/>
+<canvas id='canvas' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html
index 45403735594..04a7a5395fc 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html
@@ -3,7 +3,7 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
-<canvas id='canvas' width=10 height=10/>
+<canvas id='canvas' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html
index 4deee97d7bc..fff36e1a3b8 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html
@@ -3,7 +3,7 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
-<canvas id='canvas' width=10 height=10/>
+<canvas id='canvas' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html
index 58708612456..2946e782d0b 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html
@@ -3,7 +3,7 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
-<canvas id='canvas' width=10 height=10/>
+<canvas id='canvas' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html
index 6b27f085a8a..44586406c47 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html
@@ -3,7 +3,7 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
-<canvas id='canvas' width=10 height=10/>
+<canvas id='canvas' width=10 height=10></canvas>
</body>
<script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html
index 86c9d4f4a26..9d74ab59388 100644
--- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html
+++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html
@@ -15,7 +15,7 @@
</head>
<body>
- <video id="remote" autoplay width="240" />
+ <video id="remote" autoplay width="240"></video>
<script>
promise_setup(async () => {
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html b/tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html
index ceeae2eade8..6a8ebf50dd5 100644
--- a/tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html
+++ b/tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html
@@ -14,7 +14,7 @@
</head>
<body>
- <video id="remote" autoplay width="240" />
+ <video id="remote" autoplay width="240"></video>
<script>
[{kind: "video", audio: false, codecPreference: "VP8", codecRegex: /.*vp8.*/},
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html
index 1c09b15f1f9..194e933f91a 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html
@@ -87,6 +87,6 @@
</ol>
<div id="target"></div>
<input type="button" id="btnDone" value="Done" />
- <div id="log" />
+ <div id="log"></div>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/private-aggregation/resources/private-aggregation-helper-module.js b/tests/wpt/web-platform-tests/private-aggregation/resources/private-aggregation-helper-module.js
new file mode 100644
index 00000000000..f5a8533d0f3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/resources/private-aggregation-helper-module.js
@@ -0,0 +1,23 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+class ContributeToHistogramOperation {
+ async run(urls, data) {
+ if (data.enableDebugMode) {
+ privateAggregation.enableDebugMode(data.enableDebugModeArgs);
+
+ if (data.enableDebugModeExtraTime) {
+ privateAggregation.enableDebugMode(data.enableDebugModeArgs);
+ }
+ }
+ for (const contribution of data.contributions) {
+ privateAggregation.contributeToHistogram(contribution);
+ }
+
+ // If an error occurs, the default URL will be picked instead.
+ return 1;
+ }
+}
+
+register('contribute-to-histogram', ContributeToHistogramOperation);
diff --git a/tests/wpt/web-platform-tests/private-aggregation/resources/reports.py b/tests/wpt/web-platform-tests/private-aggregation/resources/reports.py
new file mode 100644
index 00000000000..fc6260c784d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/resources/reports.py
@@ -0,0 +1,77 @@
+"""Methods for the report-shared-storage and report-protected-audience endpoints (including debug endpoints)"""
+import json
+from typing import List, Optional, Tuple, TypedDict
+import urllib.parse
+
+from wptserve.request import Request
+from wptserve.stash import Stash
+from wptserve.utils import isomorphic_decode, isomorphic_encode
+
+# Arbitrary key used to access the reports in the stash.
+REPORTS_KEY = "9d285691-4386-45ad-9a79-d2ec29557bfe"
+
+Header = Tuple[str, str]
+Status = Tuple[int, str]
+Response = Tuple[Status, List[Header], str]
+
+def get_request_origin(request: Request) -> str:
+ return "%s://%s" % (request.url_parts.scheme,
+ request.url_parts.netloc)
+
+def handle_post_request(request: Request) -> Response:
+ """Handles POST request for reports.
+
+ Retrieves the report from the request body and stores the report in the
+ stash. If clear_stash is specified in the query params, clears the stash.
+ """
+ store_report(request.server.stash, get_request_origin(request),
+ request.body.decode("utf-8"))
+ return 200, [], ""
+
+
+def handle_get_request(request: Request) -> Response:
+ """Handles GET request for reports.
+
+ Retrieves and returns all reports from the stash.
+ """
+ headers = [("Content-Type", "application/json")]
+ reports = take_reports(request.server.stash, get_request_origin(request))
+ headers.append(("Access-Control-Allow-Origin", "*"))
+ return 200, headers, json.dumps(reports)
+
+
+def store_report(stash: Stash, origin: str, report: str) -> None:
+ """Stores the report in the stash. Report here is a JSON."""
+ with stash.lock:
+ reports_dict = stash.take(REPORTS_KEY)
+ if not reports_dict:
+ reports_dict = {}
+ reports = reports_dict.get(origin, [])
+ reports.append(report)
+ reports_dict[origin] = reports
+ stash.put(REPORTS_KEY, reports_dict)
+ return None
+
+def take_reports(stash: Stash, origin: str) -> List[str]:
+ """Takes all the reports from the stash and returns them."""
+ with stash.lock:
+ reports_dict = stash.take(REPORTS_KEY)
+ if not reports_dict:
+ reports_dict = {}
+
+ reports = reports_dict.pop(origin, [])
+ stash.put(REPORTS_KEY, reports_dict)
+ return reports
+
+
+def handle_request(request: Request) -> Response:
+ """Handles request to get or store reports."""
+ if request.method == "POST":
+ return handle_post_request(request)
+ if request.method == "GET":
+ return handle_get_request(request)
+
+ return (405, "Method Not Allowed"), [("Content-Type", "application/json")], json.dumps({
+ "code": 405,
+ "message": "Only GET or POST methods are supported."
+ })
diff --git a/tests/wpt/web-platform-tests/private-aggregation/resources/util.js b/tests/wpt/web-platform-tests/private-aggregation/resources/util.js
new file mode 100644
index 00000000000..7b3a2c54f88
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/resources/util.js
@@ -0,0 +1,24 @@
+// Execute Private Aggregation functions in shared storage worklet given
+// `paa_data`, and expect that success/failure result is `expected_error`.
+async function VerifyContributeToHistogram(paa_data, expected_error) {
+ const ancestor_key = token();
+ let url0 = generateURL("/shared-storage/resources/frame0.html",
+ [ancestor_key]);
+ let url1 = generateURL("/shared-storage/resources/frame1.html",
+ [ancestor_key]);
+
+ await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js");
+
+ let select_url_result = await sharedStorage.selectURL(
+ "contribute-to-histogram", [{url: url0}, {url: url1}],
+ {data: paa_data, keepAlive: true});
+
+ attachFencedFrame(select_url_result, 'opaque-ads');
+ const result = await nextValueFromServer(ancestor_key);
+
+ if (expected_error) {
+ assert_equals(result, "frame0_loaded");
+ } else {
+ assert_equals(result, "frame1_loaded");
+ }
+}
diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html
new file mode 100644
index 00000000000..3593ed71ea6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/shared-storage/resources/util.js"></script>
+<script src="/private-aggregation/resources/util.js"></script>
+<script src="/fenced-frame/resources/utils.js"></script>
+
+<body>
+<script>
+'use strict';
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 1n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/true);
+}, 'contributeToHistogram() with disabled "private-aggregation" permissions policy');
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html.headers b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html.headers
new file mode 100644
index 00000000000..87819101516
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html.headers
@@ -0,0 +1 @@
+Permissions-Policy: private-aggregation=()
diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure-2.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure-2.https.html
new file mode 100644
index 00000000000..b39ecd8d74b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure-2.https.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/shared-storage/resources/util.js"></script>
+<script src="/private-aggregation/resources/util.js"></script>
+<script src="/fenced-frame/resources/utils.js"></script>
+
+<body>
+<script>
+'use strict';
+
+// Note: This file should contain at most 6 shared storage subtests due to the
+// budget on selectURL().
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 1n, value: -2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/true);
+}, 'contributeToHistogram() with a negative value');
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure.https.html
new file mode 100644
index 00000000000..9dc62b1bb71
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure.https.html
@@ -0,0 +1,74 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/shared-storage/resources/util.js"></script>
+<script src="/private-aggregation/resources/util.js"></script>
+<script src="/fenced-frame/resources/utils.js"></script>
+
+<body>
+<script>
+'use strict';
+
+// Note: This file should contain at most 6 shared storage subtests due to the
+// budget on selectURL().
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 340282366920938463463374607431768211456n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/true);
+}, 'contributeToHistogram() with a bucket too large');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: -1n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/true);
+}, 'contributeToHistogram() with negative bucket');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 1, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/true);
+}, 'contributeToHistogram() with non-BigInt bucket');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ enableDebugModeArgs: 1234n,
+ contributions: [{bucket: 1n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/true);
+}, 'Invalid enableDebugMode argument');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ enableDebugModeArgs: {debugKey: 1234},
+ contributions: [{bucket: 1n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/true);
+}, 'contributeToHistogram() with a non-BigInt debugKey');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ enableDebugModeExtraTime: true,
+ contributions: [{bucket: 1n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/true);
+}, 'enableDebugMode called twice');
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success-2.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success-2.https.html
new file mode 100644
index 00000000000..8203fd11eaa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success-2.https.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/shared-storage/resources/util.js"></script>
+<script src="/private-aggregation/resources/util.js"></script>
+<script src="/fenced-frame/resources/utils.js"></script>
+
+<body>
+<script>
+'use strict';
+
+// Note: This file should contain at most 6 shared storage subtests due to the
+// budget on selectURL().
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ enableDebugModeArgs: {debugKey: 1234n},
+ contributions: [{bucket: 1n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
+}, 'contributeToHistogram() with a valid debugKey');
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success.https.html
new file mode 100644
index 00000000000..7012180c713
--- /dev/null
+++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success.https.html
@@ -0,0 +1,71 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/shared-storage/resources/util.js"></script>
+<script src="/private-aggregation/resources/util.js"></script>
+<script src="/fenced-frame/resources/utils.js"></script>
+
+<body>
+<script>
+'use strict';
+
+// Note: This file should contain at most 6 shared storage subtests due to the
+// budget on selectURL().
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 1n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
+}, 'basic contributeToHistogram() test');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 0n, value: 2}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
+}, 'contributeToHistogram() with a zero bucket');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 1n, value: 0}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
+}, 'contributeToHistogram() with a zero value');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 18446744073709551616n, value: 5}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
+}, 'contributeToHistogram() with a large bucket');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 340282366920938463463374607431768211455n, value: 5}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
+}, 'contributeToHistogram() with a max bucket');
+
+promise_test(async () => {
+ const paa_data = {
+ enableDebugMode: true,
+ contributions: [{bucket: 1n, value: 2.3}]
+ };
+
+ await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
+}, 'contributeToHistogram() with a non-integer value');
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
index ab2c6faa0ee..c5eb1bd14b8 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
@@ -985,8 +985,6 @@ class MockRuntime {
environmentProviderRequest.handle);
}
- setInputSourceButtonListener(listener) { listener.$.close(); }
-
// XREnvironmentIntegrationProvider implementation:
subscribeToHitTest(nativeOriginInformation, entityTypes, ray) {
if (!this.supportedModes_.includes(xrSessionMojom.XRSessionMode.kImmersiveAr)) {
@@ -1212,7 +1210,6 @@ class MockRuntime {
clientReceiver: clientReceiver,
enabledFeatures: enabled_features,
deviceConfig: {
- usesInputEventing: false,
defaultFramebufferScale: this.defaultFramebufferScale_,
supportsViewportScaling: true,
depthConfiguration:
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html
index cfb7cf2c1e4..01982859137 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html
@@ -50,7 +50,9 @@
<div id="target"></div>
<script>
test_valid_value('animation-duration', 'auto');
- test_computed_value('animation-duration', 'auto');
+ test_computed_value('animation-duration', 'auto', '0s');
test_valid_value('animation', 'auto cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim');
- test_computed_value('animation', 'auto cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim');
+ test_computed_value('animation',
+ 'auto cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim',
+ '0s cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim');
</script>
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html
index a17dd431264..b7d5947a212 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html
@@ -38,9 +38,9 @@ test_shorthand_value('animation',
'animation-fill-mode': 'forwards, forwards, forwards',
'animation-play-state': 'paused, paused, paused',
'animation-name': 'anim1, anim2, anim3',
- 'animation-timeline': 'auto, auto, auto',
- 'animation-range-start': 'normal, normal, normal',
- 'animation-range-end': 'normal, normal, normal',
+ 'animation-timeline': 'auto',
+ 'animation-range-start': 'normal',
+ 'animation-range-end': 'normal',
});
test((t) => {
@@ -53,6 +53,9 @@ test((t) => {
assert_equals(target.style.animation, '');
assert_equals(target.style.animationName, 'anim');
assert_equals(target.style.animationDuration, '1s');
+
+ target.style.animationTimeline = 'auto, auto';
+ assert_equals(target.style.animation, '');
}, 'Animation shorthand can not represent non-initial timelines (specified)');
test((t) => {
@@ -65,6 +68,9 @@ test((t) => {
assert_equals(getComputedStyle(target).animation, '');
assert_equals(getComputedStyle(target).animationName, 'anim');
assert_equals(getComputedStyle(target).animationDuration, '1s');
+
+ target.style.animationTimeline = 'auto, auto';
+ assert_equals(getComputedStyle(target).animation, '');
}, 'Animation shorthand can not represent non-initial timelines (computed)');
test((t) => {
@@ -77,6 +83,9 @@ test((t) => {
assert_equals(target.style.animation, '');
assert_equals(target.style.animationName, 'anim');
assert_equals(target.style.animationDuration, '1s');
+
+ target.style.animationDelayEnd = '0s, 0s';
+ assert_equals(target.style.animation, '');
}, 'Animation shorthand can not represent non-initial animation-delay-end (specified)');
test((t) => {
@@ -89,6 +98,9 @@ test((t) => {
assert_equals(getComputedStyle(target).animation, '');
assert_equals(getComputedStyle(target).animationName, 'anim');
assert_equals(getComputedStyle(target).animationDuration, '1s');
+
+ target.style.animationDelayEnd = '0s, 0s';
+ assert_equals(getComputedStyle(target).animation, '');
}, 'Animation shorthand can not represent non-initial animation-delay-end (computed)');
test((t) => {
@@ -101,6 +113,9 @@ test((t) => {
assert_equals(target.style.animation, '');
assert_equals(target.style.animationName, 'anim');
assert_equals(target.style.animationDuration, '1s');
+
+ target.style.animationRangeStart = 'normal, normal';
+ assert_equals(target.style.animation, '');
}, 'Animation shorthand can not represent non-initial animation-range-start (specified)');
test((t) => {
@@ -113,6 +128,9 @@ test((t) => {
assert_equals(getComputedStyle(target).animation, '');
assert_equals(getComputedStyle(target).animationName, 'anim');
assert_equals(getComputedStyle(target).animationDuration, '1s');
+
+ target.style.animationRangeStart = 'normal, normal';
+ assert_equals(getComputedStyle(target).animation, '');
}, 'Animation shorthand can not represent non-initial animation-range-start (computed)');
test((t) => {
@@ -125,6 +143,9 @@ test((t) => {
assert_equals(target.style.animation, '');
assert_equals(target.style.animationName, 'anim');
assert_equals(target.style.animationDuration, '1s');
+
+ target.style.animationRangeEnd = 'normal, normal';
+ assert_equals(target.style.animation, '');
}, 'Animation shorthand can not represent non-initial animation-range-end (specified)');
test((t) => {
@@ -137,6 +158,9 @@ test((t) => {
assert_equals(getComputedStyle(target).animation, '');
assert_equals(getComputedStyle(target).animationName, 'anim');
assert_equals(getComputedStyle(target).animationDuration, '1s');
+
+ target.style.animationRangeEnd = 'normal, normal';
+ assert_equals(getComputedStyle(target).animation, '');
}, 'Animation shorthand can not represent non-initial animation-range-end (computed)');
</script>
diff --git a/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html b/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html
index 849bffa5a7f..bcf53403add 100644
--- a/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html
+++ b/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html
@@ -16,7 +16,7 @@ customElements.define('shadow-disabled',ShadowDisabledElement);
</script>
<shadow-disabled>
- <template shadowrootmode="open"><span id=inside/></template>
+ <template shadowrootmode="open"><span id=inside></span></template>
</shadow-disabled>
<script>
diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html b/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html
index 2eec3acc88a..5d7f332b854 100644
--- a/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html
+++ b/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html
@@ -13,7 +13,7 @@
<div>
<template shadowrootmode=open>
- <slot />
+ <slot></slot>
</template>
<slot>
<input id=input1>
diff --git a/tests/wpt/web-platform-tests/svg/scripted/script-invalid-script-type.html b/tests/wpt/web-platform-tests/svg/scripted/script-invalid-script-type.html
new file mode 100644
index 00000000000..9602dd525bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/scripted/script-invalid-script-type.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<link rel="author" href="mailto:avandolder@mozilla.com" title="Adam Vandolder">
+<link rel="author" href="https://mozilla.org" title="Mozilla">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1827512">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="host"></div>
+<svg><script type="text/plain">window.scriptRan = true;</script></svg>
+<script>
+ let svgScript = document.querySelector("svg > script");
+ svgScript.type = "text/javascript";
+ svgScript.appendChild(document.createTextNode(""));
+ test(function() {
+ assert_true(window.scriptRan);
+ }, "svg:script runs after valid script type is set");
+</script>
diff --git a/tests/wpt/web-platform-tests/tools/pytest.ini b/tests/wpt/web-platform-tests/tools/pytest.ini
index bf58dc409aa..3347ec6dbdb 100644
--- a/tests/wpt/web-platform-tests/tools/pytest.ini
+++ b/tests/wpt/web-platform-tests/tools/pytest.ini
@@ -10,6 +10,8 @@ filterwarnings =
# ignore importlib changes which six is unlikely to ever adopt
ignore:_SixMetaPathImporter.exec_module\(\) not found; falling back to load_module\(\):ImportWarning
ignore:_SixMetaPathImporter.find_spec\(\) not found; falling back to find_module\(\):ImportWarning
+ # ignore urllib3's warning when not using OpenSSL
+ ignore:.*currently the 'ssl' module is compiled with.*::urllib3
# ignore mozinfo deprecation warnings
ignore:distutils Version classes are deprecated\. Use packaging\.version instead\.:DeprecationWarning:mozinfo
# ingore mozinfo's dependency on distro
diff --git a/tests/wpt/web-platform-tests/tools/requirements_pytest.txt b/tests/wpt/web-platform-tests/tools/requirements_pytest.txt
index 6dc497515bc..2ca04f876e4 100644
--- a/tests/wpt/web-platform-tests/tools/requirements_pytest.txt
+++ b/tests/wpt/web-platform-tests/tools/requirements_pytest.txt
@@ -1,3 +1,3 @@
-pytest==7.3.1
+pytest==7.3.2
pytest-cov==4.1.0
-hypothesis==6.75.2
+hypothesis==6.78.2
diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py
index e5aa5f0d896..1725399faca 100644
--- a/tests/wpt/web-platform-tests/tools/serve/serve.py
+++ b/tests/wpt/web-platform-tests/tools/serve/serve.py
@@ -574,6 +574,7 @@ class RoutesBuilder:
("*", "/.well-known/attribution-reporting/report-aggregate-attribution", handlers.PythonScriptHandler),
("*", "/.well-known/attribution-reporting/debug/report-aggregate-attribution", handlers.PythonScriptHandler),
("*", "/.well-known/attribution-reporting/debug/verbose", handlers.PythonScriptHandler),
+ ("*", "/.well-known/private-aggregation/*", handlers.PythonScriptHandler),
("*", "/.well-known/web-identity", handlers.PythonScriptHandler),
("*", "*.py", handlers.PythonScriptHandler),
("GET", "*", handlers.FileHandler)
diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py
index d994c6388d8..99b26927403 100644
--- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py
+++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py
@@ -7,8 +7,40 @@ from ._module import BidiModule, command
class ScriptEvaluateResultException(Exception):
def __init__(self, result: Mapping[str, Any]):
+ super().__init__()
+
self.result = result
- super().__init__("Script execution failed.")
+
+ details = result.get("exceptionDetails", {})
+ self.column_number = details.get("columnNumber")
+ self.exception = details.get("exception")
+ self.line_number = details.get("lineNumber")
+ self.stacktrace = self.process_stacktrace(details.get("stackTrace", {}))
+ self.text = details.get("text")
+
+ def process_stacktrace(self, stacktrace: Mapping[str, Any]) -> str:
+ stack = ""
+ for frame in stacktrace.get("callFrames", []):
+ data = frame.get("functionName") or "eval code"
+ if "url" in frame:
+ data += f"@{frame['url']}"
+ data += f":{frame.get('lineNumber', 0)}:{frame.get('columnNumber', 0)}"
+ stack += data + "\n"
+
+ return stack
+
+ def __repr__(self) -> str:
+ """Return the object representation in string format."""
+ return f"<{self.__class__.__name__}(), {self.text})>"
+
+ def __str__(self) -> str:
+ """Return the string representation of the object."""
+ message: str = self.text
+
+ if self.stacktrace:
+ message += f"\n\nStacktrace:\n\n{self.stacktrace}"
+
+ return message
class OwnershipModel(Enum):
diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py
index 7c1fef30ae1..cdcef11b94f 100644
--- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py
+++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py
@@ -6,11 +6,13 @@ from ._module import BidiModule, command
class Session(BidiModule):
@command
def new(self, capabilities: Mapping[str, Any]) -> Mapping[str, Mapping[str, Any]]:
- return {"capabilities": capabilities}
+ params: MutableMapping[str, Any] = {}
+ params["capabilities"] = capabilities
+ return params
@new.result
def _new(self, result: Mapping[str, Any]) -> Any:
- return result.get("session_id"), result.get("capabilities", {})
+ return result.get("sessionId"), result.get("capabilities", {})
@command
def subscribe(self,
diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py
index 58e0004f9be..15be2af2d3d 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/run.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/run.py
@@ -506,6 +506,11 @@ class AndroidWebview(ChromeAndroidBase):
name = "android_webview"
browser_cls = browser.AndroidWebview
+ def setup_kwargs(self, kwargs):
+ if kwargs["mojojs_path"]:
+ kwargs["enable_mojojs"] = True
+ logger.info("--mojojs-path is provided, enabling MojoJS")
+
class Opera(BrowserSetup):
name = "opera"
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html
index 3ce18d4dd82..fbe09bab989 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html
@@ -11,19 +11,19 @@ async function _render(pdfData) {
let loadingTask = pdfjsLib.getDocument({data: atob(pdfData)});
let pdf = await loadingTask.promise;
let rendered = [];
- for (let pageNumber=1; pageNumber<=pdf.numPages; pageNumber++) {
+ for (let pageNumber = 1; pageNumber <= pdf.numPages; pageNumber++) {
let page = await pdf.getPage(pageNumber);
- var viewport = page.getViewport({scale: 96./72.});
+ const viewport = page.getViewport({ scale: 96. / 72. });
// Prepare canvas using PDF page dimensions
- var canvas = document.getElementsByTagName('canvas')[0];
- var context = canvas.getContext('2d');
+ const canvas = document.getElementsByTagName('canvas')[0];
+ const context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
- var renderContext = {
+ const renderContext = {
canvasContext: context,
- viewport: viewport
+ viewport
};
await page.render(renderContext).promise;
rendered.push(canvas.toDataURL());
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
index 950273c3894..8cd24f2f5ae 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
@@ -55,6 +55,7 @@ class TestGroupsFile:
def __getitem__(self, key):
return self._data[key]
+
def read_include_from_file(file):
new_include = []
with open(file) as f:
@@ -66,11 +67,11 @@ def read_include_from_file(file):
new_include.append(line)
return new_include
+
def update_include_for_groups(test_groups, include):
if include is None:
# We're just running everything
return
-
new_include = []
for item in include:
if item in test_groups:
@@ -400,9 +401,29 @@ class TestSource:
if self.logger is None:
self.logger = structured.structuredlog.StructuredLogger("TestSource")
+ @classmethod
+ def make_queue(cls, tests_by_type, **kwargs):
+ mp = mpcontext.get_context()
+ test_queue = mp.Queue()
+ groups = cls.make_groups(tests_by_type, **kwargs)
+ processes = cls.process_count(kwargs["processes"], len(groups))
+ if processes > 1:
+ groups.sort(key=lambda group: (
+ # Place groups of the same test type together to minimize
+ # browser restarts.
+ group.test_type,
+ # Next, run larger groups first to avoid straggler runners. Use
+ # timeout to give slow tests greater relative weight.
+ -sum(test.timeout for test in group.group),
+ ))
+ for item in groups:
+ test_queue.put(item)
+ cls.add_sentinal(test_queue, processes)
+ return test_queue, processes
+
@abstractmethod
#@classmethod (doesn't compose with @abstractmethod in < 3.3)
- def make_queue(cls, tests_by_type, **kwargs): # noqa: N805
+ def make_groups(cls, tests_by_type, **kwargs): # noqa: N805
pass
@abstractmethod
@@ -442,29 +463,17 @@ class GroupedSource(TestSource):
raise NotImplementedError
@classmethod
- def make_queue(cls, tests_by_type, **kwargs):
- mp = mpcontext.get_context()
- test_queue = mp.Queue()
- groups = []
-
- state = {}
-
+ def make_groups(cls, tests_by_type, **kwargs):
+ groups, state = [], {}
for test_type, tests in tests_by_type.items():
for test in tests:
if cls.new_group(state, test_type, test, **kwargs):
group_metadata = cls.group_metadata(state)
groups.append(TestGroup(deque(), test_type, group_metadata))
-
group, _, metadata = groups[-1]
group.append(test)
test.update_metadata(metadata)
-
- for item in groups:
- test_queue.put(item)
-
- processes = cls.process_count(kwargs["processes"], len(groups))
- cls.add_sentinal(test_queue, processes)
- return test_queue, processes
+ return groups
@classmethod
def tests_by_group(cls, tests_by_type, **kwargs):
@@ -481,10 +490,8 @@ class GroupedSource(TestSource):
class SingleTestSource(TestSource):
@classmethod
- def make_queue(cls, tests_by_type, **kwargs):
- mp = mpcontext.get_context()
- test_queue = mp.Queue()
- num_test_groups = 0
+ def make_groups(cls, tests_by_type, **kwargs):
+ groups = []
for test_type, tests in tests_by_type.items():
processes = kwargs["processes"]
queues = [deque([]) for _ in range(processes)]
@@ -498,12 +505,8 @@ class SingleTestSource(TestSource):
for item in zip(queues, itertools.repeat(test_type), metadatas):
if len(item[0]) > 0:
- test_queue.put(TestGroup(*item))
- num_test_groups += 1
-
- processes = cls.process_count(kwargs["processes"], num_test_groups)
- cls.add_sentinal(test_queue, processes)
- return test_queue, processes
+ groups.append(TestGroup(*item))
+ return groups
@classmethod
def tests_by_group(cls, tests_by_type, **kwargs):
@@ -531,32 +534,21 @@ class PathGroupedSource(GroupedSource):
class GroupFileTestSource(TestSource):
@classmethod
- def make_queue(cls, tests_by_type, **kwargs):
- mp = mpcontext.get_context()
- test_queue = mp.Queue()
- num_test_groups = 0
-
+ def make_groups(cls, tests_by_type, **kwargs):
+ groups = []
for test_type, tests in tests_by_type.items():
tests_by_group = cls.tests_by_group({test_type: tests},
**kwargs)
-
ids_to_tests = {test.id: test for test in tests}
-
for group_name, test_ids in tests_by_group.items():
group_metadata = {"scope": group_name}
group = deque()
-
for test_id in test_ids:
test = ids_to_tests[test_id]
group.append(test)
test.update_metadata(group_metadata)
-
- test_queue.put(TestGroup(group, test_type, group_metadata))
- num_test_groups += 1
-
- processes = cls.process_count(kwargs["processes"], num_test_groups)
- cls.add_sentinal(test_queue, processes)
- return test_queue, processes
+ groups.append(TestGroup(group, test_type, group_metadata))
+ return groups
@classmethod
def tests_by_group(cls, tests_by_type, **kwargs):
diff --git a/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html b/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html
index 34561ee5fd0..7afbabcee0b 100644
--- a/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html
+++ b/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html
@@ -2,7 +2,7 @@
<html>
<title>Test that video.rVFC callbacks started during an XRSession work.</title>
<body>
- <canvas/>
+ <canvas></canvas>
</body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
diff --git a/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html b/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html
index 6a1bdae19ef..22c90f84605 100644
--- a/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html
+++ b/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html
@@ -9,8 +9,7 @@
<div id="log"></div>
<div>
<video id="local-view" muted autoplay="autoplay"></video>
- <video id="remote-view" muted autoplay="autoplay"/>
- </video>
+ <video id="remote-view" muted autoplay="autoplay"></video>
</div>
<!-- These files are in place when executing on W3C. -->
diff --git a/tests/wpt/web-platform-tests/wai-aria/role/basic.html b/tests/wpt/web-platform-tests/wai-aria/role/basic.html
index 5cb83864701..5fbe1fe2aa5 100644
--- a/tests/wpt/web-platform-tests/wai-aria/role/basic.html
+++ b/tests/wpt/web-platform-tests/wai-aria/role/basic.html
@@ -5,6 +5,16 @@
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
+<!--
+
+These tests should remain solid and passing in any implementation that supports get_computed_role.
+
+It uses a standard promise_test (rather than aria-util.js) to reduce other dependencies.
+
+If you're adding something you expect to fail in one or more implementations, you probably want a different file.
+
+-->
+
<div id='d' style='height: 100px; width: 100px' role="group" aria-label="test label"></div>
<h1 id="h">test heading</h1>
<script>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html
index 192317dda26..ea93cab96a6 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html
@@ -69,7 +69,7 @@ function loadFile(url, callback) {
// createBuffer, createPeriodicWave and decodeAudioData should work on a context
// that has `state` == "closed"
-async function tryLegalOpeerationsOnClosedContext(ctx) {
+async function tryLegalOperationsOnClosedContext(ctx) {
assert_equals(ctx.state, "closed", "The context is in closed state");
[
@@ -313,7 +313,7 @@ async function testAudioContext() {
stateTracker.previous = ac.state;
tryToCreateNodeOnClosedContext(ac);
- await tryLegalOpeerationsOnClosedContext(ac);
+ await tryLegalOperationsOnClosedContext(ac);
}
async function testOfflineAudioContext() {
@@ -360,7 +360,7 @@ async function testOfflineAudioContext() {
o.onstatechange = afterRenderingFinished;
tryToCreateNodeOnClosedContext(o);
- await tryLegalOpeerationsOnClosedContext(o);
+ await tryLegalOperationsOnClosedContext(o);
}
async function testSuspendResumeEventLoop() {
diff --git a/tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html b/tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html
index 62f2bd934f1..81906d33b79 100644
--- a/tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html
+++ b/tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html
@@ -7,10 +7,30 @@
<script src="/common/get-host-info.sub.js"></script>
</head>
<body>
+<svg id="svg" width="200" height="200" xmlns="http://www.w3.org/2000/svg">
+</svg>
<script>
const SAMEORIGIN_BASE = get_host_info().HTTP_ORIGIN;
const CROSSORIGIN_BASE = get_host_info().HTTP_NOTSAMESITE_ORIGIN;
+async function getVideoFilename()
+{
+ const videoConfiguration = {
+ type: 'file',
+ video: {
+ contentType: 'video/mp4; codecs=avc1',
+ width: 640,
+ height: 480,
+ bitrate: 800,
+ framerate: 30
+ }
+ };
+ const result = await navigator.mediaCapabilities.decodingInfo(videoConfiguration);
+ if (result.supported)
+ return '/webcodecs/h264.mp4';
+ return '/webcodecs/av1.mp4';
+}
+
const TESTS = [
// HTMLImageElement
{
@@ -68,6 +88,7 @@ const TESTS = [
factory: () => {
return new Promise((resolve, reject) => {
const image = document.createElementNS('http://www.w3.org/2000/svg','image');
+ svg.appendChild(image);
image.onload = () => resolve(image);
image.onerror = reject;
image.setAttribute('href', SAMEORIGIN_BASE + '/webcodecs/four-colors.jpg');
@@ -80,6 +101,7 @@ const TESTS = [
factory: () => {
return new Promise((resolve, reject) => {
const image = document.createElementNS('http://www.w3.org/2000/svg','image');
+ svg.appendChild(image);
image.onload = () => resolve(image);
image.onerror = reject;
image.setAttribute('href', CROSSORIGIN_BASE + '/webcodecs/four-colors.jpg');
@@ -92,6 +114,7 @@ const TESTS = [
factory: () => {
return new Promise((resolve, reject) => {
const image = document.createElementNS('http://www.w3.org/2000/svg','image');
+ svg.appendChild(image);
image.onload = () => resolve(image);
image.onerror = reject;
image.setAttribute('href', CROSSORIGIN_BASE + '/webcodecs/four-colors.jpg?pipe=header(Access-Control-Allow-Origin,*)');
@@ -104,6 +127,7 @@ const TESTS = [
factory: () => {
return new Promise((resolve, reject) => {
const image = document.createElementNS('http://www.w3.org/2000/svg','image');
+ svg.appendChild(image);
image.onload = () => resolve(image);
image.onerror = reject;
image.crossOrigin = 'anonymous';
@@ -120,11 +144,11 @@ const TESTS = [
{
title: 'Test creating a VideoFrame with a same-origin HTMLVideoElement',
factory: () => {
- return new Promise((resolve, reject) => {
+ return new Promise(async (resolve, reject) => {
const video = document.createElement('video');
on_frame_available(video, () => resolve(video));
video.onerror = reject;
- video.src = SAMEORIGIN_BASE + '/webcodecs/av1.mp4';
+ video.src = SAMEORIGIN_BASE + await getVideoFilename();
});
},
should_throw: false,
@@ -132,11 +156,11 @@ const TESTS = [
{
title: 'Test creating a VideoFrame with a cross-origin HTMLVideoElement',
factory: () => {
- return new Promise((resolve, reject) => {
+ return new Promise(async (resolve, reject) => {
const video = document.createElement('video');
on_frame_available(video, () => resolve(video));
video.onerror = reject;
- video.src = CROSSORIGIN_BASE + '/webcodecs/av1.mp4';
+ video.src = CROSSORIGIN_BASE + await getVideoFilename();
});
},
should_throw: true,
@@ -144,11 +168,11 @@ const TESTS = [
{
title: 'Test creating a VideoFrame with a CORS enabled cross-origin HTMLVideoElement without setting crossorigin',
factory: () => {
- return new Promise((resolve, reject) => {
+ return new Promise(async (resolve, reject) => {
const video = document.createElement('video');
on_frame_available(video, () => resolve(video));
video.onerror = reject;
- video.src = CROSSORIGIN_BASE + '/webcodecs/av1.mp4?pipe=header(Access-Control-Allow-Origin,*)';
+ video.src = CROSSORIGIN_BASE + await getVideoFilename() + '?pipe=header(Access-Control-Allow-Origin,*)';
});
},
should_throw: true,
@@ -156,12 +180,12 @@ const TESTS = [
{
title: 'Test creating a VideoFrame with a CORS enabled cross-origin HTMLVideoElement with crossorigin="anonymous"',
factory: () => {
- return new Promise((resolve, reject) => {
+ return new Promise(async (resolve, reject) => {
const video = document.createElement('video');
on_frame_available(video, () => resolve(video));
video.onerror = reject;
video.crossOrigin = 'anonymous';
- video.src = CROSSORIGIN_BASE + '/webcodecs/av1.mp4?pipe=header(Access-Control-Allow-Origin,*)';
+ video.src = CROSSORIGIN_BASE + await getVideoFilename() +'?pipe=header(Access-Control-Allow-Origin,*)';
});
},
should_throw: false,
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py
index 625cd3a6304..4e039d2a69c 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py
@@ -66,6 +66,7 @@ def int_interval(start: int, end: int) -> Callable[[Any], None]:
return _
+
def positive_int(actual: Any) -> None:
assert isinstance(actual, int) and actual > 0
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py
index a887aeb8a45..e076885859e 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py
@@ -5,6 +5,7 @@ from .. import (
recursive_compare,
)
+
def assert_browsing_context(
info, context, children=None, is_root=True, parent=None, url=None
):
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py
index 066c34f3f28..924f0521dd7 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py
@@ -1,5 +1,6 @@
from webdriver.bidi.modules.script import ContextTarget
+
async def viewport_dimensions(bidi_session, context):
"""Get the dimensions of the context's viewport.
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py
index f6e4c34d8d1..79cc5025ab9 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py
@@ -6,7 +6,7 @@ from . import viewport_dimensions
@pytest.mark.asyncio
-async def test_capture(bidi_session, url, top_context, inline, compare_png_bidi):
+async def test_capture(bidi_session, top_context, inline, compare_png_bidi):
expected_size = await viewport_dimensions(bidi_session, top_context)
await bidi_session.browsing_context.navigate(
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py
index 9a0c74cbb85..080ef581b33 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py
@@ -1,5 +1,3 @@
-import asyncio
-
import pytest
from webdriver.error import TimeoutException
from webdriver.bidi.modules.script import ContextTarget
@@ -19,7 +17,7 @@ async def test_not_unsubscribed(bidi_session):
# Track all received browsingContext.contextCreated events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener(CONTEXT_CREATED_EVENT, on_event)
@@ -38,7 +36,7 @@ async def test_new_context(bidi_session, wait_for_event, subscribe_events, type_
await subscribe_events([CONTEXT_CREATED_EVENT])
on_entry = wait_for_event(CONTEXT_CREATED_EVENT)
- top_level_context = await bidi_session.browsing_context.create(type_hint="tab")
+ top_level_context = await bidi_session.browsing_context.create(type_hint=type_hint)
context_info = await on_entry
assert_browsing_context(
@@ -96,7 +94,7 @@ async def test_evaluate_window_open_with_url(bidi_session, subscribe_events, wai
async def test_navigate_creates_iframes(bidi_session, subscribe_events, top_context, test_page_multiple_frames):
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener(CONTEXT_CREATED_EVENT, on_event)
@@ -144,7 +142,7 @@ async def test_navigate_creates_iframes(bidi_session, subscribe_events, top_cont
async def test_navigate_creates_nested_iframes(bidi_session, subscribe_events, top_context, test_page_nested_frames):
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener(CONTEXT_CREATED_EVENT, on_event)
@@ -202,7 +200,7 @@ async def test_subscribe_to_one_context(
# Track all received browsingContext.contextCreated events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener(CONTEXT_CREATED_EVENT, on_event)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py
index b527aef3827..1b854742eac 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py
@@ -1,13 +1,11 @@
import base64
import pytest
+from tests.support.asserts import assert_pdf
from tests.support.image import px_to_cm
-from tests.support.pdf import assert_pdf
-
pytestmark = pytest.mark.asyncio
-
INLINE_BACKGROUND_RENDERING_TEST_CONTENT = """
<style>
:root {
@@ -20,14 +18,11 @@ BLACK_DOT_PNG = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2NgYGD
WHITE_DOT_PNG = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P4DwQACfsD/Z8fLAAAAAAASUVORK5CYII="
-@pytest.mark.parametrize(
- "print_with_background, expected_image",
- [
- (None, WHITE_DOT_PNG),
- (True, BLACK_DOT_PNG),
- (False, WHITE_DOT_PNG),
- ],
-)
+@pytest.mark.parametrize("print_with_background, expected_image", [
+ (None, WHITE_DOT_PNG),
+ (True, BLACK_DOT_PNG),
+ (False, WHITE_DOT_PNG),
+], ids=["default", "true", "false"])
async def test_background(
bidi_session,
top_context,
@@ -39,14 +34,21 @@ async def test_background(
):
page = inline(INLINE_BACKGROUND_RENDERING_TEST_CONTENT)
await bidi_session.browsing_context.navigate(
- context=top_context["context"], url=page, wait="complete"
- )
+ context=top_context["context"], url=page, wait="complete")
print_value = await bidi_session.browsing_context.print(
context=top_context["context"],
background=print_with_background,
- margin={"top": 0, "bottom": 0, "right": 0, "left": 0},
- page={"width": px_to_cm(1), "height": px_to_cm(1)},
+ margin={
+ "top": 0,
+ "bottom": 0,
+ "right": 0,
+ "left": 0
+ },
+ page={
+ "width": px_to_cm(1),
+ "height": px_to_cm(1)
+ },
)
assert_pdf(print_value)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py
index 114aeb62dcc..7193ecd0172 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py
@@ -153,6 +153,7 @@ async def test_params_page_ranges_invalid_type(bidi_session, top_context, page_r
context=top_context["context"], page_ranges=page_ranges
)
+
@pytest.mark.parametrize(
"page_ranges",
[
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py
index 4dee803bc8b..2e410d74302 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py
@@ -1,7 +1,7 @@
import pytest
+from tests.support.asserts import assert_pdf
from tests.support.image import png_dimensions
-from tests.support.pdf import assert_pdf
pytestmark = pytest.mark.asyncio
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py
index b66fb9881e5..ef1c07d142f 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py
@@ -7,13 +7,13 @@ pytestmark = pytest.mark.asyncio
"page, orientation, expected_dimensions",
[
(None, "portrait", {"width": 21.59, "height": 27.94}),
- ({}, "portrait",{"width": 21.59, "height": 27.94}),
+ ({}, "portrait", {"width": 21.59, "height": 27.94}),
({"width": 4.5}, "portrait", {"width": 4.5, "height": 27.94}),
({"height": 23}, "portrait", {"width": 21.59, "height": 23}),
({"width": 4.5, "height": 12}, "portrait", {"width": 4.5, "height": 12}),
({"height": 12}, "portrait", {"width": 21.59, "height": 12}),
(None, "landscape", {"width": 27.94, "height": 21.59}),
- ({}, "landscape",{"width": 27.94, "height": 21.59}),
+ ({}, "landscape", {"width": 27.94, "height": 21.59}),
({"width": 4.5}, "landscape", {"width": 27.94, "height": 4.5}),
({"height": 23}, "landscape", {"width": 23, "height": 21.59}),
({"width": 4.5, "height": 12}, "landscape", {"width": 12, "height": 4.5}),
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py
index 0d6e9ea0e15..b54f26b8c96 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py
@@ -11,6 +11,6 @@ from webdriver.bidi.error import UnknownCommandException
'invalid module',
'invalid command name',
])
-async def test_unknown_command(bidi_session, send_blocking_command, module_name, command_name):
+async def test_unknown_command(send_blocking_command, module_name, command_name):
with pytest.raises(UnknownCommandException):
await send_blocking_command(f"{module_name}.{command_name}", {})
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py
index 99a95df1049..a5f038865c7 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py
@@ -1,5 +1,3 @@
-import asyncio
-
import pytest
from . import assert_base_entry, create_log
@@ -20,7 +18,7 @@ async def test_console_log_cached_messages(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -74,7 +72,7 @@ async def test_console_log_cached_message_after_refresh(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py
index fe8a9b6b58a..f687f76c0e2 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py
@@ -1,6 +1,3 @@
-import math
-import time
-
import pytest
from . import assert_javascript_entry, create_log
@@ -9,7 +6,7 @@ from ... import int_interval
@pytest.mark.asyncio
async def test_types_and_values(
- bidi_session, current_time, inline, top_context, wait_for_event
+ bidi_session, current_time, top_context, wait_for_event
):
await bidi_session.session.subscribe(events=["log.entryAdded"])
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py
index 39e5b5a3cfd..d1a9269729f 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py
@@ -126,7 +126,6 @@ async def test_request_headers(
):
text_url = url(PAGE_EMPTY_TEXT)
-
network_events = await setup_network_test(events=["network.beforeRequestSent"])
events = network_events["network.beforeRequestSent"]
@@ -153,7 +152,6 @@ async def test_request_cookies(
):
text_url = url(PAGE_EMPTY_TEXT)
-
network_events = await setup_network_test(events=["network.beforeRequestSent"])
events = network_events["network.beforeRequestSent"]
@@ -213,7 +211,6 @@ async def test_redirect(bidi_session, wait_for_event, url, fetch, setup_network_
f"/webdriver/tests/support/http_handlers/redirect.py?location={text_url}"
)
-
network_events = await setup_network_test(events=["network.beforeRequestSent"])
events = network_events["network.beforeRequestSent"]
@@ -248,7 +245,6 @@ async def test_redirect_http_equiv(
http_equiv_url = url(PAGE_REDIRECT_HTTP_EQUIV)
redirected_url = url(PAGE_REDIRECTED_HTML)
-
network_events = await setup_network_test(events=["network.beforeRequestSent"])
events = network_events["network.beforeRequestSent"]
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py
index 7f8f134af0d..f4af23bfd2f 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py
@@ -12,9 +12,7 @@ PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
@pytest.mark.asyncio
-async def test_same_request_id(
- bidi_session, top_context, wait_for_event, url, setup_network_test, fetch
-):
+async def test_same_request_id(wait_for_event, url, setup_network_test, fetch):
network_events = await setup_network_test(
events=[
"network.beforeRequestSent",
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py
index 1df23cda594..1043f52cb72 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py
@@ -1,13 +1,10 @@
import asyncio
-import json
+from urllib.parse import quote
import pytest
-from webdriver.bidi.modules.script import ContextTarget
-
from tests.support.sync import AsyncPoll
-from ... import any_int
from .. import assert_response_event, HTTP_STATUS_AND_STATUS_TEXT
PAGE_EMPTY_HTML = "/webdriver/tests/bidi/network/support/empty.html"
@@ -26,7 +23,7 @@ async def test_subscribe_status(bidi_session, top_context, wait_for_event, url,
# Track all received network.responseCompleted events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener(
@@ -92,7 +89,7 @@ async def test_subscribe_status(bidi_session, top_context, wait_for_event, url,
@pytest.mark.asyncio
async def test_load_page_twice(
- bidi_session, top_context, wait_for_event, url, fetch, setup_network_test
+ bidi_session, top_context, wait_for_event, url, setup_network_test
):
html_url = url(PAGE_EMPTY_HTML)
@@ -131,7 +128,7 @@ async def test_load_page_twice(
)
@pytest.mark.asyncio
async def test_response_status(
- bidi_session, wait_for_event, url, fetch, setup_network_test, status, status_text
+ wait_for_event, url, fetch, setup_network_test, status, status_text
):
status_url = url(
f"/webdriver/tests/support/http_handlers/status.py?status={status}&nocache={RESPONSE_COMPLETED_EVENT}"
@@ -163,7 +160,7 @@ async def test_response_status(
@pytest.mark.asyncio
async def test_response_headers(
- bidi_session, wait_for_event, url, fetch, setup_network_test
+ wait_for_event, url, fetch, setup_network_test
):
headers_url = url(
"/webdriver/tests/support/http_handlers/headers.py?header=foo:bar&header=baz:biz"
@@ -210,7 +207,7 @@ async def test_response_headers(
)
@pytest.mark.asyncio
async def test_response_mime_type_file(
- bidi_session, url, wait_for_event, fetch, setup_network_test, page_url, mime_type
+ url, wait_for_event, fetch, setup_network_test, page_url, mime_type
):
network_events = await setup_network_test(events=[RESPONSE_COMPLETED_EVENT])
events = network_events[RESPONSE_COMPLETED_EVENT]
@@ -232,7 +229,7 @@ async def test_response_mime_type_file(
@pytest.mark.asyncio
-async def test_redirect(bidi_session, wait_for_event, url, fetch, setup_network_test):
+async def test_redirect(bidi_session, url, fetch, setup_network_test):
text_url = url(PAGE_EMPTY_TEXT)
redirect_url = url(
f"/webdriver/tests/support/http_handlers/redirect.py?location={text_url}"
@@ -262,3 +259,68 @@ async def test_redirect(bidi_session, wait_for_event, url, fetch, setup_network_
# Check that both requests share the same requestId
assert events[0]["request"]["request"] == events[1]["request"]["request"]
+
+
+@pytest.mark.parametrize(
+ "protocol,parameters",
+ [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"}),
+ ],
+ ids=["http", "https", "https coop"],
+)
+@pytest.mark.asyncio
+async def test_redirect_document(
+ bidi_session, new_tab, url, setup_network_test, inline, protocol, parameters
+):
+ network_events = await setup_network_test(events=[RESPONSE_COMPLETED_EVENT])
+ events = network_events[RESPONSE_COMPLETED_EVENT]
+
+ # The test starts on a url on the alternate domain, potentially with https
+ # and coop headers.
+ initial_url = inline(
+ "<div>bar</div>",
+ domain="alt",
+ protocol=protocol,
+ parameters=parameters,
+ )
+ await bidi_session.browsing_context.navigate(
+ context=new_tab["context"],
+ url=initial_url,
+ wait="complete",
+ )
+
+ # Then navigate to a cross domain page, which will redirect back to the
+ # initial url.
+ redirect_url = url(
+ f"/webdriver/tests/support/http_handlers/redirect.py?location={quote(initial_url)}"
+ )
+ await bidi_session.browsing_context.navigate(
+ context=new_tab["context"],
+ url=redirect_url,
+ wait="complete",
+ )
+
+ # Wait until we receive three events:
+ # - one for the initial request
+ # - two for the second navigation and its redirect
+ wait = AsyncPoll(bidi_session, timeout=2)
+ await wait.until(lambda _: len(events) >= 3)
+ assert len(events) == 3
+
+ expected_request = {"method": "GET", "url": initial_url}
+ assert_response_event(
+ events[0], expected_request=expected_request, redirect_count=0
+ )
+ expected_request = {"method": "GET", "url": redirect_url}
+ assert_response_event(
+ events[1], expected_request=expected_request, redirect_count=0
+ )
+ expected_request = {"method": "GET", "url": initial_url}
+ assert_response_event(
+ events[2], expected_request=expected_request, redirect_count=1
+ )
+
+ # Check that the last 2 requests share the same request id
+ assert events[1]["request"]["request"] == events[2]["request"]["request"]
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py
index eb344885087..ea1366cb967 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py
@@ -10,8 +10,6 @@ PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
@pytest.mark.asyncio
async def test_cached(
- bidi_session,
- top_context,
wait_for_event,
url,
fetch,
@@ -69,8 +67,6 @@ async def test_cached(
@pytest.mark.asyncio
async def test_cached_redirect(
bidi_session,
- top_context,
- wait_for_event,
url,
fetch,
setup_network_test,
@@ -144,7 +140,7 @@ async def test_cached_redirect(
@pytest.mark.asyncio
async def test_cached_revalidate(
- bidi_session, top_context, wait_for_event, url, fetch, setup_network_test
+ bidi_session, wait_for_event, url, fetch, setup_network_test
):
network_events = await setup_network_test(
events=[
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py
index e3fd7a4d35c..2d6c1c83543 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py
@@ -1,5 +1,4 @@
import asyncio
-import json
import pytest
@@ -7,7 +6,6 @@ from webdriver.bidi.modules.script import ContextTarget
from tests.support.sync import AsyncPoll
-from ... import any_int
from .. import assert_response_event, HTTP_STATUS_AND_STATUS_TEXT
PAGE_EMPTY_HTML = "/webdriver/tests/bidi/network/support/empty.html"
@@ -32,7 +30,7 @@ async def test_subscribe_status(bidi_session, top_context, wait_for_event, url,
# Track all received network.responseStarted events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener(
@@ -73,7 +71,7 @@ async def test_subscribe_status(bidi_session, top_context, wait_for_event, url,
@pytest.mark.asyncio
async def test_load_page_twice(
- bidi_session, top_context, wait_for_event, url, fetch, setup_network_test
+ bidi_session, top_context, wait_for_event, url, setup_network_test
):
html_url = url(PAGE_EMPTY_HTML)
@@ -112,7 +110,7 @@ async def test_load_page_twice(
)
@pytest.mark.asyncio
async def test_response_status(
- bidi_session, wait_for_event, url, fetch, setup_network_test, status, status_text
+ wait_for_event, url, fetch, setup_network_test, status, status_text
):
status_url = url(f"/webdriver/tests/support/http_handlers/status.py?status={status}&nocache={RESPONSE_STARTED_EVENT}")
@@ -142,7 +140,7 @@ async def test_response_status(
@pytest.mark.asyncio
async def test_response_headers(
- bidi_session, wait_for_event, url, fetch, setup_network_test
+ wait_for_event, url, fetch, setup_network_test
):
headers_url = url(
"/webdriver/tests/support/http_handlers/headers.py?header=foo:bar&header=baz:biz"
@@ -189,7 +187,7 @@ async def test_response_headers(
)
@pytest.mark.asyncio
async def test_response_mime_type_file(
- bidi_session, url, wait_for_event, fetch, setup_network_test, page_url, mime_type
+ url, wait_for_event, fetch, setup_network_test, page_url, mime_type
):
network_events = await setup_network_test(events=[RESPONSE_STARTED_EVENT])
events = network_events[RESPONSE_STARTED_EVENT]
@@ -211,7 +209,7 @@ async def test_response_mime_type_file(
@pytest.mark.asyncio
-async def test_redirect(bidi_session, wait_for_event, url, fetch, setup_network_test):
+async def test_redirect(bidi_session, url, fetch, setup_network_test):
text_url = url(PAGE_EMPTY_TEXT)
redirect_url = url(f"/webdriver/tests/support/http_handlers/redirect.py?location={text_url}")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py
index 15373b7107b..6e0a7431c6b 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py
@@ -10,8 +10,6 @@ PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
@pytest.mark.asyncio
async def test_cached(
- bidi_session,
- top_context,
wait_for_event,
url,
fetch,
@@ -69,8 +67,6 @@ async def test_cached(
@pytest.mark.asyncio
async def test_cached_redirect(
bidi_session,
- top_context,
- wait_for_event,
url,
fetch,
setup_network_test,
@@ -152,7 +148,7 @@ async def test_cached_redirect(
)
@pytest.mark.asyncio
async def test_cached_revalidate(
- bidi_session, top_context, wait_for_event, url, fetch, setup_network_test, method
+ wait_for_event, url, fetch, setup_network_test, method
):
network_events = await setup_network_test(
events=[
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py
index 378f6bed927..a2359b164eb 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py
@@ -464,17 +464,6 @@ async def test_doctype_node(
"sharedId": any_string,
"value": {
"childNodeCount": 1,
- "children": [{
- "type": "node",
- "sharedId": any_string,
- "value": {
- "attributes": {"id": "in-shadow-dom"},
- "childNodeCount": 1,
- "localName": "div",
- "namespaceURI": "http://www.w3.org/1999/xhtml",
- "nodeType": 1
- }
- }],
"nodeType": 11
}
}
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py
index ae07b940d05..89ce95ed21d 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py
@@ -452,17 +452,6 @@ async def test_doctype_node(bidi_session, get_test_page, top_context, expression
"sharedId": any_string,
"value": {
"childNodeCount": 1,
- "children": [{
- "type": "node",
- "sharedId": any_string,
- "value": {
- "attributes": {"id": "in-shadow-dom"},
- "childNodeCount": 1,
- "localName": "div",
- "namespaceURI": "http://www.w3.org/1999/xhtml",
- "nodeType": 1
- }
- }],
"nodeType": 11
}
}
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py
index 7118f77ea0f..d5872cd3ba5 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py
@@ -3,6 +3,7 @@ import websockets
import webdriver
+
# classic session to enable bidi capability manually
# Intended to be the first test in this file
@pytest.mark.asyncio
@@ -12,11 +13,13 @@ async def test_websocket_url_connect(session):
async with websockets.connect(websocket_url) as websocket:
await websocket.send("Hello world!")
+
# test bidi_session send
@pytest.mark.asyncio
async def test_bidi_session_send(bidi_session, send_blocking_command):
await send_blocking_command("session.status", {})
+
# bidi session following a bidi session with a different capabilities
# to test session recreation
@pytest.mark.asyncio
@@ -25,6 +28,7 @@ async def test_bidi_session_with_different_capability(bidi_session,
send_blocking_command):
await send_blocking_command("session.status", {})
+
# classic session following a bidi session to test session
# recreation
# Intended to be the last test in this file to make sure
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py
index eee102fee71..13d131bfec5 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py
@@ -4,8 +4,7 @@ import pytest
# Check that session.status can be used. The actual values for the "ready" and
# "message" properties are implementation specific.
@pytest.mark.asyncio
-async def test_bidi_session_status(bidi_session, send_blocking_command):
+async def test_bidi_session_status(send_blocking_command):
response = await send_blocking_command("session.status", {})
assert isinstance(response["ready"], bool)
assert isinstance(response["message"], str)
-
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py
index 785542fee5b..111e7ef1031 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py
@@ -1,5 +1,3 @@
-import asyncio
-
import pytest
from ... import create_console_api_message, recursive_compare
@@ -19,7 +17,7 @@ async def test_subscribe_to_one_context(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -56,7 +54,7 @@ async def test_subscribe_to_one_context_twice(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -89,7 +87,7 @@ async def test_subscribe_to_one_context_and_then_to_all(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -166,7 +164,7 @@ async def test_subscribe_to_all_context_and_then_to_one_again(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -206,7 +204,7 @@ async def test_subscribe_to_top_context_with_iframes(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -254,7 +252,7 @@ async def test_subscribe_to_child_context(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py
index ee00e35a646..2953aafe03f 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py
@@ -1,8 +1,5 @@
-import asyncio
-
import pytest
-
# The basic use case of subscribing globally for a single event
# is covered by tests for each event in the dedicated folders.
@@ -15,7 +12,7 @@ async def test_subscribe_to_module(bidi_session, subscribe_events, wait_for_even
# Track all received browsing context events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(method, _):
events.append(method)
remove_listener_contextCreated = bidi_session.add_event_listener(
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py
index 005574b03ca..056f6827281 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py
@@ -8,16 +8,16 @@ from ... import create_console_api_message
@pytest.mark.asyncio
-async def test_params_empty(bidi_session, send_blocking_command):
+async def test_params_empty(send_blocking_command):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command("session.subscribe", {})
+ await send_blocking_command("session.subscribe", {})
@pytest.mark.asyncio
@pytest.mark.parametrize("value", [None, True, "foo", 42, {}])
-async def test_params_events_invalid_type(bidi_session, send_blocking_command, value):
+async def test_params_events_invalid_type(send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command("session.subscribe", {"events": value})
+ await send_blocking_command("session.subscribe", {"events": value})
@pytest.mark.asyncio
@@ -30,14 +30,14 @@ async def test_params_events_empty(bidi_session):
@pytest.mark.parametrize("value", [None, True, 42, [], {}])
async def test_params_events_value_invalid_type(send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command("session.subscribe", {"events": [value]})
+ await send_blocking_command("session.subscribe", {"events": [value]})
@pytest.mark.asyncio
@pytest.mark.parametrize("value", ["", "foo", "foo.bar", "log.invalidEvent"])
async def test_params_events_value_invalid_event_name(send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command("session.subscribe", {"events": [value]})
+ await send_blocking_command("session.subscribe", {"events": [value]})
@pytest.mark.asyncio
@@ -70,9 +70,9 @@ async def test_params_events_value_valid_and_invalid_event_names(
@pytest.mark.asyncio
@pytest.mark.parametrize("value", [True, "foo", 42, {}])
-async def test_params_contexts_invalid_type(bidi_session, send_blocking_command, value):
+async def test_params_contexts_invalid_type(send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.subscribe",
{
"events": [],
@@ -91,7 +91,7 @@ async def test_params_contexts_empty(bidi_session):
@pytest.mark.parametrize("value", [None, True, 42, [], {}])
async def test_params_contexts_value_invalid_type(send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.subscribe",
{
"events": [],
@@ -103,7 +103,7 @@ async def test_params_contexts_value_invalid_type(send_blocking_command, value):
@pytest.mark.asyncio
async def test_params_contexts_value_invalid_value(send_blocking_command):
with pytest.raises(NoSuchFrameException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.subscribe",
{
"events": [],
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py
index 98b119d82d1..ec38df3bede 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py
@@ -1,5 +1,3 @@
-import asyncio
-
import pytest
from ... import create_console_api_message, recursive_compare
@@ -25,7 +23,7 @@ async def test_unsubscribe_from_one_context(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -79,7 +77,7 @@ async def test_unsubscribe_from_top_context_with_iframes(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -119,7 +117,7 @@ async def test_unsubscribe_from_child_context(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
@@ -154,7 +152,7 @@ async def test_unsubscribe_from_one_context_after_navigation(
# Track all received log.entryAdded events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py
index 52a293fe1e4..72851876883 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py
@@ -1,5 +1,3 @@
-import asyncio
-
import pytest
from webdriver.error import TimeoutException
@@ -18,7 +16,7 @@ async def test_unsubscribe_from_module(bidi_session):
# Track all received browsing context events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(_, data):
events.append(data)
remove_listener_contextCreated = bidi_session.add_event_listener(
@@ -54,7 +52,7 @@ async def test_subscribe_to_module_unsubscribe_from_one_event(
# Track all received browsing context events in the events array
events = []
- async def on_event(method, data):
+ async def on_event(method, _):
events.append(method)
remove_listener_contextCreated = bidi_session.add_event_listener(
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py
index 7fd25546e3f..e6f3050da31 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py
@@ -8,14 +8,14 @@ from ... import create_console_api_message
@pytest.mark.asyncio
async def test_params_empty(bidi_session, send_blocking_command):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command("session.unsubscribe", {})
+ await send_blocking_command("session.unsubscribe", {})
@pytest.mark.asyncio
@pytest.mark.parametrize("value", [None, True, "foo", 42, {}])
async def test_params_events_invalid_type(bidi_session, send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command("session.unsubscribe", {"events": value})
+ await send_blocking_command("session.unsubscribe", {"events": value})
@pytest.mark.asyncio
@@ -28,14 +28,14 @@ async def test_params_events_empty(bidi_session):
@pytest.mark.parametrize("value", [None, True, 42, [], {}])
async def test_params_events_value_invalid_type(send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command("session.unsubscribe", {"events": [value]})
+ await send_blocking_command("session.unsubscribe", {"events": [value]})
@pytest.mark.asyncio
@pytest.mark.parametrize("value", ["", "foo", "foo.bar"])
async def test_params_events_value_invalid_event_name(send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command("session.unsubscribe", {"events": [value]})
+ await send_blocking_command("session.unsubscribe", {"events": [value]})
@pytest.mark.asyncio
@@ -47,7 +47,7 @@ async def test_params_events_value_valid_and_invalid_event_name(
# Try to unsubscribe from the valid and an invalid event
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe", {"events": ["log.entryAdded", "some.invalidEvent"]}
)
@@ -82,7 +82,7 @@ async def test_unsubscribe_from_one_event_and_then_from_module(
# Try to unsubscribe from all events
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe", {"events": ["browsingContext"]}
)
@@ -95,7 +95,7 @@ async def test_unsubscribe_from_one_event_and_then_from_module(
@pytest.mark.parametrize("value", [True, "foo", 42, {}])
async def test_params_contexts_invalid_type(bidi_session, send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe",
{
"events": [],
@@ -114,7 +114,7 @@ async def test_params_contexts_empty(bidi_session):
@pytest.mark.parametrize("value", [None, True, 42, [], {}])
async def test_params_contexts_value_invalid_type(send_blocking_command, value):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe",
{
"events": [],
@@ -126,7 +126,7 @@ async def test_params_contexts_value_invalid_type(send_blocking_command, value):
@pytest.mark.asyncio
async def test_params_contexts_value_invalid_value(send_blocking_command):
with pytest.raises(NoSuchFrameException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe",
{
"events": [],
@@ -144,7 +144,7 @@ async def test_params_contexts_value_valid_and_invalid_value(
# Try to unsubscribe from the valid and an invalid context
with pytest.raises(NoSuchFrameException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe",
{"events": ["log.entryAdded"], "contexts": [top_context["context"], "foo"]},
)
@@ -181,7 +181,7 @@ async def test_unsubscribe_from_closed_tab(
# Try to unsubscribe from the closed context
with pytest.raises(NoSuchFrameException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe",
{"events": ["log.entryAdded"], "contexts": [new_tab["context"]]},
)
@@ -190,7 +190,7 @@ async def test_unsubscribe_from_closed_tab(
@pytest.mark.asyncio
async def test_params_unsubscribe_globally_without_subscription(send_blocking_command):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe", {"events": ["log.entryAdded"]}
)
@@ -204,7 +204,7 @@ async def test_params_unsubscribe_globally_with_individual_subscription(
# Try to unsubscribe globally
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe", {"events": ["log.entryAdded"]}
)
@@ -214,7 +214,7 @@ async def test_params_unsubscribe_from_one_context_without_subscription(
send_blocking_command, top_context
):
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe",
{"events": ["log.entryAdded"], "contexts": [top_context["context"]]},
)
@@ -229,7 +229,7 @@ async def test_params_unsubscribe_from_one_context_with_global_subscription(
# Try to unsubscribe from one context
with pytest.raises(InvalidArgumentException):
- response = await send_blocking_command(
+ await send_blocking_command(
"session.unsubscribe",
{"events": ["log.entryAdded"], "contexts": [top_context["context"]]},
)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py
index 62434323e0a..bc97a9ed615 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py
@@ -33,21 +33,35 @@ def test_no_browsing_history(session):
assert_success(response)
-def test_basic(session, inline):
- url = inline("<div id=foo>")
+# Capability needed as long as no valid certificate is available:
+# https://github.com/web-platform-tests/wpt/issues/28847
+@pytest.mark.capabilities({"acceptInsecureCerts": True})
+@pytest.mark.parametrize("protocol,parameters", [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"})
+], ids=["http", "https", "https coop"])
+def test_seen_nodes(session, get_test_page, protocol, parameters):
+ first_page = get_test_page(parameters=parameters, protocol=protocol)
+ second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt")
+
+ session.url = first_page
+ session.url = second_page
- session.url = url
- session.url = inline("<div id=bar>")
- element = session.find.css("#bar", all=False)
+ element = session.find.css("#custom-element", all=False)
+ shadow_root = element.shadow_root
response = back(session)
assert_success(response)
+ assert session.url == first_page
+
with pytest.raises(error.StaleElementReferenceException):
- element.property("id")
+ element.name
+ with pytest.raises(error.DetachedShadowRootException):
+ shadow_root.find_element("css selector", "in-shadow-dom")
- assert session.url == url
- assert session.find.css("#foo", all=False)
+ session.find.css("#custom-element", all=False)
def test_data_urls(session, inline):
@@ -143,27 +157,3 @@ def test_removed_iframe(session, url, inline):
assert_success(response)
assert session.url == page
-
-
-# Capability needed as long as no valid certificate is available:
-# https://github.com/web-platform-tests/wpt/issues/28847
-@pytest.mark.capabilities({"acceptInsecureCerts": True})
-def test_cross_origin(session, url):
- base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
- first_page = url(base_path, protocol="https")
- second_page = url(base_path, protocol="https", domain="alt")
-
- session.url = first_page
- session.url = second_page
-
- elem = session.find.css("#delete", all=False)
-
- response = back(session)
- assert_success(response)
-
- assert session.url == first_page
-
- with pytest.raises(error.NoSuchElementException):
- elem.click()
- elem = session.find.css("#delete", all=False)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py
index 4d1c48235ca..96883ad3b64 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py
@@ -170,7 +170,7 @@ def test_link_from_nested_context_with_target(session, inline, iframe, target):
@pytest.mark.capabilities({"acceptInsecureCerts": True})
def test_link_cross_origin(session, inline, url):
base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
+ "?pipe=header(Cross-Origin-Opener-Policy,same-origin)")
target_page = url(base_path, protocol="https", domain="alt")
session.url = inline("<a href='{}'>click me</a>".format(target_page), protocol="https")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html b/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html
index a9451ec82be..7c6eb6e6e2e 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html
@@ -4,7 +4,7 @@
<head>
<title>Test Element Click</title>
<style>
- div { padding:0px; margin: 0px; }
+ div { padding: 0; margin: 0; }
#trackPointer { position: fixed; }
#resultContainer { width: 600px; height: 60px; }
.area { width: 100px; height: 50px; background-color: #ccc; }
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py
index 5dfbf205947..2b57120a4cc 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py
@@ -16,13 +16,17 @@ def test_arguments(session):
def test_array(session):
- response = execute_async_script(session, """
- let resolve = arguments[0];
- resolve([1, 2]);
- """)
+ response = execute_async_script(
+ session, "arguments[0]([1, 2])")
assert_success(response, [1, 2])
+def test_array_in_array(session):
+ response = execute_async_script(
+ session, "const arr = [1]; arguments[0]([arr, arr])")
+ assert_success(response, [[1], [1]])
+
+
def test_dom_token_list(session, inline):
session.url = inline("""<div class="no cheese">foo</div>""")
element = session.find.css("div", all=False)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py
index ec5d5ee1e32..939eb8916fb 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py
@@ -19,6 +19,11 @@ def test_array(session):
assert_success(response, [1, 2])
+def test_array_in_array(session):
+ response = execute_script(session, "const arr = [1]; return [arr, arr]")
+ assert_success(response, [[1], [1]])
+
+
def test_dom_token_list(session, inline):
session.url = inline("""<div class="no cheese">foo</div>""")
element = session.find.css("div", all=False)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py
index f27be403f9e..7945f188309 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py
@@ -61,6 +61,38 @@ def test_no_browsing_history(session, inline):
assert element.property("id") == "foo"
+# Capability needed as long as no valid certificate is available:
+# https://github.com/web-platform-tests/wpt/issues/28847
+@pytest.mark.capabilities({"acceptInsecureCerts": True})
+@pytest.mark.parametrize("protocol,parameters", [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"})
+], ids=["http", "https", "https coop"])
+def test_seen_nodes(session, get_test_page, protocol, parameters):
+ first_page = get_test_page(parameters=parameters, protocol=protocol)
+ second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt")
+
+ session.url = first_page
+ session.url = second_page
+ session.back()
+
+ element = session.find.css("#custom-element", all=False)
+ shadow_root = element.shadow_root
+
+ response = forward(session)
+ assert_success(response)
+
+ assert session.url == second_page
+
+ with pytest.raises(error.StaleElementReferenceException):
+ element.name
+ with pytest.raises(error.DetachedShadowRootException):
+ shadow_root.find_element("css selector", "in-shadow-dom")
+
+ session.find.css("#custom-element", all=False)
+
+
def test_data_urls(session, inline):
test_pages = [
inline("<p id=1>"),
@@ -168,28 +200,3 @@ def test_removed_iframe(session, url, inline):
assert_success(response)
assert session.url == page
-
-
-# Capability needed as long as no valid certificate is available:
-# https://github.com/web-platform-tests/wpt/issues/28847
-@pytest.mark.capabilities({"acceptInsecureCerts": True})
-def test_cross_origin(session, url):
- base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
- first_page = url(base_path, protocol="https")
- second_page = url(base_path, protocol="https", domain="alt")
-
- session.url = first_page
- session.url = second_page
- session.back()
-
- elem = session.find.css("#delete", all=False)
-
- response = forward(session)
- assert_success(response)
-
- assert session.url == second_page
-
- with pytest.raises(error.NoSuchElementException):
- elem.click()
- elem = session.find.css("#delete", all=False)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py
index 68441da5ef8..50ff0d306b5 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py
@@ -28,7 +28,7 @@ def test_basic(session):
@pytest.mark.capabilities({"acceptInsecureCerts": True})
def test_navigation_with_coop_headers(session, url):
base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
+ "?pipe=header(Cross-Origin-Opener-Policy,same-origin)")
session.url = url(base_path, protocol="https")
response = get_window_handle(session)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py
index d61377af275..a9ff3f6a058 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py
@@ -39,45 +39,38 @@ def test_no_browsing_context(session, closed_frame, inline):
assert session.url == doc
-def test_basic(session, inline):
- url = inline("<div id=foo>")
-
- session.url = inline("<div id=bar>")
- element = session.find.css("#bar", all=False)
-
- response = navigate_to(session, url)
- assert_success(response)
-
- with pytest.raises(error.StaleElementReferenceException):
- element.property("id")
-
- assert session.url == url
- assert session.find.css("#foo", all=False)
-
-
-# Capability needed as long as no valid certificate is available:
-# https://github.com/web-platform-tests/wpt/issues/28847
-@pytest.mark.capabilities({"acceptInsecureCerts": True})
-def test_cross_origin(session, inline, url):
- base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
- first_page = url(base_path, protocol="https")
- second_page = url(base_path, protocol="https", domain="alt")
+@pytest.mark.parametrize("protocol,parameters", [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"})
+], ids=[
+ "http",
+ "https",
+ "https coop"
+])
+def test_seen_nodes(session, get_test_page, protocol, parameters):
+ first_page = get_test_page(parameters=parameters, protocol=protocol)
+ second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt")
response = navigate_to(session, first_page)
assert_success(response)
assert session.url == first_page
- elem = session.find.css("#delete", all=False)
+
+ element = session.find.css("#custom-element", all=False)
+ shadow_root = element.shadow_root
response = navigate_to(session, second_page)
assert_success(response)
assert session.url == second_page
- with pytest.raises(error.NoSuchElementException):
- elem.click()
- session.find.css("#delete", all=False)
+ with pytest.raises(error.StaleElementReferenceException):
+ element.name
+ with pytest.raises(error.DetachedShadowRootException):
+ shadow_root.find_element("css selector", "in-shadow-dom")
+
+ session.find.css("#custom-element", all=False)
@pytest.mark.capabilities({"pageLoadStrategy": "eager"})
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py
index 22b392db2e3..4f2f85980ba 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py
@@ -2,9 +2,8 @@ import base64
import pytest
-from tests.support.asserts import assert_success
+from tests.support.asserts import assert_pdf, assert_success
from tests.support.image import px_to_cm
-from tests.support.pdf import assert_pdf
from . import do_print
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py
index c2afacf94fb..107cf380df6 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py
@@ -1,8 +1,7 @@
import pytest
-from tests.support.asserts import assert_success
+from tests.support.asserts import assert_pdf, assert_success
from tests.support.image import png_dimensions
-from tests.support.pdf import assert_pdf
from . import do_print
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py
index f3fe50bd92d..aec7769c3e8 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py
@@ -3,8 +3,7 @@ from base64 import decodebytes
import pytest
-from tests.support.asserts import assert_error, assert_success
-from tests.support.pdf import assert_pdf
+from tests.support.asserts import assert_error, assert_pdf, assert_success
from . import do_print
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py
index fb13ec2d65a..ade1c38a5c4 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py
@@ -1,8 +1,7 @@
# META: timeout=long
import pytest
-from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
-from tests.support.pdf import assert_pdf
+from tests.support.asserts import assert_dialog_handled, assert_error, assert_pdf, assert_success
from . import do_print
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py
index b3647130c77..93a71bbf8b1 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py
@@ -39,20 +39,31 @@ def test_no_browsing_context(session, closed_frame, inline):
assert session.find.css("#foo", all=False)
-def test_basic(session, inline):
- url = inline("<div id=foo>")
-
- session.url = url
- element = session.find.css("#foo", all=False)
+# Capability needed as long as no valid certificate is available:
+# https://github.com/web-platform-tests/wpt/issues/28847
+@pytest.mark.capabilities({"acceptInsecureCerts": True})
+@pytest.mark.parametrize("protocol,parameters", [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"})
+], ids=["http", "https", "https coop"])
+def test_seen_nodes(session, get_test_page, protocol, parameters):
+ page = get_test_page(parameters=parameters, protocol=protocol)
+
+ session.url = page
+
+ element = session.find.css("#custom-element", all=False)
+ shadow_root = element.shadow_root
response = refresh(session)
assert_success(response)
with pytest.raises(error.StaleElementReferenceException):
- element.property("id")
+ element.name
+ with pytest.raises(error.DetachedShadowRootException):
+ shadow_root.find_element("css selector", "in-shadow-dom")
- assert session.url == url
- assert session.find.css("#foo", all=False)
+ session.find.css("#custom-element", all=False)
def test_dismissed_beforeunload(session, inline):
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py
index a7b33cc15f4..0535edd2142 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py
@@ -1,7 +1,5 @@
import sys
-from .merge_dictionaries import merge_dictionaries
-
platform_name = {
# From Python version 3.3: On Linux, sys.platform doesn't contain the major version anymore.
# It is always 'linux'. See
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py
index f5812bc8932..04bd1993316 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py
@@ -211,6 +211,13 @@ def assert_move_to_coordinates(point, target, events):
assert e["target"] == target
+def assert_pdf(value):
+ data = decodebytes(value.encode())
+
+ assert data.startswith(b"%PDF-"), "Decoded data starts with the PDF signature"
+ assert data.endswith(b"%%EOF\n"), "Decoded data ends with the EOF flag"
+
+
def assert_png(screenshot):
"""Test that screenshot is a Base64 encoded PNG file, or a bytestring representing a PNG.
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py
index eca9fda4bef..ba166ae8da8 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py
@@ -280,7 +280,8 @@ def get_test_page(iframe, inline):
frame_doc=None,
shadow_doc=None,
nested_shadow_dom=False,
- shadow_root_mode="open"
+ shadow_root_mode="open",
+ **kwargs
):
if frame_doc is None:
frame_doc = """<div id="in-frame"><input type="checkbox"/></div>"""
@@ -355,9 +356,10 @@ def get_test_page(iframe, inline):
</script>"""
if as_frame:
- return inline(iframe(page_data))
+ iframe_data = iframe(page_data, **kwargs)
+ return inline(iframe_data, **kwargs)
else:
- return inline(page_data)
+ return inline(page_data, **kwargs)
return get_test_page
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py
index 39ed3a5bbfd..6e53bf7c243 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py
@@ -1,7 +1,7 @@
import base64
+from tests.support.asserts import assert_pdf
from tests.support.image import cm_to_px, png_dimensions, ImageDifference
-from tests.support.pdf import assert_pdf
from typing import Any, Mapping
import pytest
@@ -207,8 +207,8 @@ def assert_pdf_dimensions(render_pdf_to_png_bidi):
png = await render_pdf_to_png_bidi(pdf)
width, height = png_dimensions(png)
- assert cm_to_px(expected_dimensions["height"]) == height
- assert cm_to_px(expected_dimensions["width"]) == width
+ assert (height - 1) <= cm_to_px(expected_dimensions["height"]) <= (height + 1)
+ assert (width - 1) <= cm_to_px(expected_dimensions["width"]) <= (width + 1)
return assert_pdf_dimensions
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py
index 03be83a20e1..1533dca2bd9 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py
@@ -8,18 +8,18 @@ from tests.support.sync import Poll
@pytest.fixture
-def add_event_listeners(session):
+def add_event_listeners():
"""Register listeners for tracked events on element."""
def add_event_listeners(element, tracked_events):
element.session.execute_script("""
- let element = arguments[0];
- let trackedEvents = arguments[1];
+ const element = arguments[0];
+ const trackedEvents = arguments[1];
if (!("events" in window)) {
window.events = [];
}
- for (var i = 0; i < trackedEvents.length; i++) {
+ for (let i = 0; i < trackedEvents.length; i++) {
element.addEventListener(trackedEvents[i], function (event) {
window.events.push(event.type);
});
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
index 45f4f4d2392..c0d0cb11dc4 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
@@ -122,8 +122,9 @@ def deep_update(source, overrides):
def document_dimensions(session):
return tuple(session.execute_script("""
- let rect = document.documentElement.getBoundingClientRect();
- return [rect.width, rect.height];
+ const {devicePixelRatio} = window;
+ const {width, height} = document.documentElement.getBoundingClientRect();
+ return [width * devicePixelRatio, height * devicePixelRatio];
"""))
@@ -206,14 +207,6 @@ def is_fullscreen(session):
""")
-def document_dimensions(session):
- return tuple(session.execute_script("""
- let {devicePixelRatio} = window;
- let {width, height} = document.documentElement.getBoundingClientRect();
- return [width * devicePixelRatio, height * devicePixelRatio];
- """))
-
-
def screen_size(session):
"""Returns the available width/height size of the screen."""
return tuple(session.execute_script("""
@@ -236,6 +229,7 @@ def available_screen_size(session):
];
"""))
+
def filter_dict(source, d):
"""Filter `source` dict to only contain same keys as `d` dict.
@@ -268,4 +262,3 @@ def wait_for_new_handle(session, handles_before):
message="No new window has been opened")
return wait.until(find_new_handle)
-
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html b/tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html
index d0408480daf..6f1fadb64be 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html
@@ -27,7 +27,7 @@ function compareImgData(img1, img2) {
let idx = 0;
while (idx < img1Data.length) {
let maxDifference = 0;
- for (let channel=0; channel<4; channel++) {
+ for (let channel = 0; channel < 4; channel++) {
const difference = Math.abs(img1Data[idx + channel] - img2Data[idx + channel]);
if (difference > maxDifference) {
maxDifference = difference
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html
index 0253add9607..40e4b5aa37c 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html
@@ -4,7 +4,7 @@
<head>
<title>Test Actions</title>
<style>
- div { padding:0px; margin: 0px; }
+ div { padding: 0; margin: 0; }
#trackPointer { position: fixed; }
#resultContainer { width: 600px; height: 60px; }
.area { width: 100px; height: 50px; background-color: #ccc; }
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html
index f1fd9b2da3f..dd169f0c5bc 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html
@@ -4,7 +4,7 @@
<head>
<title>Test Actions</title>
<style>
- div { padding:0px; margin: 0px; }
+ div { padding: 0; margin: 0; }
#trackPointer { position: fixed; }
#resultContainer { width: 600px; height: 60px; }
.area { width: 100px; height: 50px; background-color: #ccc; }
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html
index b6e281e5818..cc9278954a0 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html
@@ -4,7 +4,7 @@
<head>
<title>Test Actions</title>
<style>
- div { padding:0px; margin: 0px; }
+ div { padding: 0; margin: 0; }
.area { width: 100px; height: 50px; background-color: #ccc; }
#scrollable { width: 100px; height: 100px; overflow: scroll; }
#scrollContent { width: 600px; height: 1000px; background-color: blue; }
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py
index 62067dd1667..db247af610a 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py
@@ -1,7 +1,7 @@
from urllib.parse import urlencode
-def basic_authentication(url, username=None, password=None, protocol="http"):
+def basic_authentication(url, protocol="http"):
query = {}
return url("/webdriver/tests/support/http_handlers/authentication.py",
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py
index ddae62dc6af..71c4901c445 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py
@@ -11,8 +11,8 @@ def main(request, response):
try:
headers = request.GET.get_list(b"header")
for header in headers:
- header_parts = header.split(b":")
- response.headers.set(header_parts[0], header_parts[1])
+ header_parts = header.split(b":")
+ response.headers.set(header_parts[0], header_parts[1])
except ValueError:
pass
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py b/tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py
index 242dc9c9188..a936d7f1f04 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py
@@ -5,21 +5,21 @@ from http.client import HTTPConnection
class HTTPRequest(object):
- def __init__(self, host, port):
+ def __init__(self, host: str, port: int):
self.host = host
self.port = port
- def head(self, path):
+ def head(self, path: str):
return self._request("HEAD", path)
- def get(self, path):
+ def get(self, path: str):
return self._request("GET", path)
- def post(self, path, body):
+ def post(self, path: str, body):
return self._request("POST", path, body)
@contextlib.contextmanager
- def _request(self, method, path, body=None):
+ def _request(self, method: str, path: str, body=None):
payload = None
if body is not None:
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/image.py b/tests/wpt/web-platform-tests/webdriver/tests/support/image.py
index 055ebe71fbc..9597b05a22f 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/image.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/image.py
@@ -1,4 +1,5 @@
import struct
+from typing import NamedTuple, Tuple
from tests.support.asserts import assert_png
@@ -7,31 +8,28 @@ PPI = 96
inch_in_cm = 2.54
-def cm_to_px(cm):
+def cm_to_px(cm: float) -> float:
return round(cm * PPI / inch_in_cm)
-def px_to_cm(px):
+def px_to_cm(px: float) -> float:
return px * inch_in_cm / PPI
-def png_dimensions(screenshot):
+def png_dimensions(screenshot) -> Tuple[int, int]:
image = assert_png(screenshot)
width, height = struct.unpack(">LL", image[16:24])
return int(width), int(height)
-class ImageDifference:
- """Summary of the pixel-level differences between two images.
+class ImageDifference(NamedTuple):
+ """Summary of the pixel-level differences between two images."""
- :param total_pixels: The total number of pixel differences between the images
- :param max_difference: The maximum difference between any corresponding color channels across
- all pixels of the image.
- """
+ """The total number of pixel differences between the images"""
+ total_pixels: int
- def __init__(self, total_pixels, max_difference):
- self.total_pixels = total_pixels
- self.max_difference = max_difference
+ """The maximum difference between any corresponding color channels across all pixels of the image"""
+ max_difference: int
- def equal(self):
+ def equal(self) -> bool:
return self.total_pixels == 0
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py b/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py
index 494ca74f926..a0a8d3881ef 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py
@@ -1,5 +1,6 @@
"""Helpers for inlining extracts of documents in tests."""
+from typing import Literal, Optional
from urllib.parse import urlencode
@@ -25,14 +26,22 @@ MIME_TYPES = {
}
-def build_inline(build_url, src, doctype="html", mime=None, charset=None, **kwargs):
+def build_inline(build_url, src,
+ doctype: Literal["html", "xhtml", "xml"] = "html",
+ mime: Optional[str] = None, charset: Optional[str] = None,
+ parameters = None, **kwargs):
if mime is None:
mime = MIME_TYPES[doctype]
if charset is None:
charset = "UTF-8"
+ if parameters is None:
+ parameters = {}
+
doc = BOILERPLATES[doctype].format(charset=charset, src=src)
query = {"doc": doc, "mime": mime, "charset": charset}
+ query.update(parameters)
+
return build_url(
"/webdriver/tests/support/inline.py",
query=urlencode(query),
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/keys.py b/tests/wpt/web-platform-tests/webdriver/tests/support/keys.py
index e835a6a596f..c353644dddf 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/keys.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/keys.py
@@ -17,11 +17,10 @@
"""The Keys implementation."""
-import sys
-
from collections import OrderedDict
from inspect import getmembers
+
class Keys(object):
"""
Set of special keys codes.
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/merge_dictionaries.py b/tests/wpt/web-platform-tests/webdriver/tests/support/merge_dictionaries.py
deleted file mode 100644
index 72f1cab352d..00000000000
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/merge_dictionaries.py
+++ /dev/null
@@ -1,42 +0,0 @@
-def merge_dictionaries(first, second):
- """Given two dictionaries, create a third that defines all specified
- key/value pairs. This merge_dictionaries is performed "deeply" on any nested
- dictionaries. If a value is defined for the same key by both dictionaries,
- an exception will be raised."""
- result = dict(first)
-
- for key, value in second.items():
- if key in result and result[key] != value:
- if isinstance(result[key], dict) and isinstance(value, dict):
- result[key] = merge_dictionaries(result[key], value)
- elif result[key] != value:
- raise TypeError("merge_dictionaries: refusing to overwrite " +
- "attribute: `%s`" % key)
- else:
- result[key] = value
-
- return result
-
-if __name__ == "__main__":
- assert merge_dictionaries({}, {}) == {}
- assert merge_dictionaries({}, {"a": 23}) == {"a": 23}
- assert merge_dictionaries({"a": 23}, {"b": 45}) == {"a": 23, "b": 45}
-
- e = None
- try:
- merge_dictionaries({"a": 23}, {"a": 45})
- except Exception as _e:
- e = _e
- assert isinstance(e, TypeError)
-
- assert merge_dictionaries({"a": 23}, {"a": 23}) == {"a": 23}
-
- assert merge_dictionaries({"a": {"b": 23}}, {"a": {"c": 45}}) == {"a": {"b": 23, "c": 45}}
- assert merge_dictionaries({"a": {"b": 23}}, {"a": {"b": 23}}) == {"a": {"b": 23}}
-
- e = None
- try:
- merge_dictionaries({"a": {"b": 23}}, {"a": {"b": 45}})
- except Exception as _e:
- e = _e
- assert isinstance(e, TypeError)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/pdf.py b/tests/wpt/web-platform-tests/webdriver/tests/support/pdf.py
deleted file mode 100644
index 573ec1af4b2..00000000000
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/pdf.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from base64 import decodebytes
-
-
-def assert_pdf(value):
- data = decodebytes(value.encode())
-
- assert data.startswith(b"%PDF-"), "Decoded data starts with the PDF signature"
- assert data.endswith(b"%%EOF\n"), "Decoded data ends with the EOF flag"
diff --git a/tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html b/tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html
index f2e20846234..b47cd30eaf4 100644
--- a/tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html
@@ -9,8 +9,7 @@
<div id="log"></div>
<div>
<video id="local-view" muted autoplay="autoplay"></video>
- <video id="remote-view" muted autoplay="autoplay"/>
- </video>
+ <video id="remote-view" muted autoplay="autoplay"></video>
</div>
<!-- These files are in place when executing on W3C. -->
diff --git a/tests/wpt/web-platform-tests/webrtc/simplecall.https.html b/tests/wpt/web-platform-tests/webrtc/simplecall.https.html
index dbf6b9a5083..28c0c5c38bb 100644
--- a/tests/wpt/web-platform-tests/webrtc/simplecall.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/simplecall.https.html
@@ -9,8 +9,7 @@
<div id="log"></div>
<div>
<video id="local-view" muted autoplay="autoplay"></video>
- <video id="remote-view" muted autoplay="autoplay"/>
- </video>
+ <video id="remote-view" muted autoplay="autoplay"></video>
</div>
<!-- These files are in place when executing on W3C. -->
diff --git a/tests/wpt/web-platform-tests/websockets/handlers/receive-many-with-backpressure_wsh.py b/tests/wpt/web-platform-tests/websockets/handlers/receive-many-with-backpressure_wsh.py
new file mode 100644
index 00000000000..8e35beebdf5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/websockets/handlers/receive-many-with-backpressure_wsh.py
@@ -0,0 +1,23 @@
+# Sleep to build backpressure, receive messages, and send back their length.
+# Used by send-many-64K-messages-with-backpressure.any.js.
+
+
+import time
+
+
+def web_socket_do_extra_handshake(request):
+ # Compression will interfere with backpressure, so disable the
+ # permessage-delate extension.
+ request.ws_extension_processors = []
+
+
+def web_socket_transfer_data(request):
+ while True:
+ # Don't read the message immediately, so backpressure can build.
+ time.sleep(0.1)
+ line = request.ws_stream.receive_message()
+ if line is None:
+ return
+ # Send back the size of the message as acknowledgement that it was
+ # received.
+ request.ws_stream.send_message(str(len(line)), binary=False)
diff --git a/tests/wpt/web-platform-tests/websockets/send-many-64K-messages-with-backpressure.any.js b/tests/wpt/web-platform-tests/websockets/send-many-64K-messages-with-backpressure.any.js
new file mode 100644
index 00000000000..e93231f2df9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/websockets/send-many-64K-messages-with-backpressure.any.js
@@ -0,0 +1,49 @@
+// META: global=window,worker
+// META: script=constants.sub.js
+// META: timeout=long
+// META: variant=
+// META: variant=?wss
+// META: variant=?wpt_flags=h2
+
+// This is a repro for Chromium bug https://crbug.com/1286909. It will timeout
+// if the bug is present.
+
+// With 0.1 second server-side delay per message, sending 50 messages will take
+// around 5 seconds.
+const MESSAGES_TO_SEND = 50;
+
+// 65536 is the magic number that triggers the bug, as it precisely fills the
+// mojo pipe.
+const MESSAGE_SIZE = 65536;
+
+promise_test(async t => {
+ const message = new Uint8Array(MESSAGE_SIZE);
+ const ws =
+ new WebSocket(SCHEME_DOMAIN_PORT + '/receive-many-with-backpressure');
+ let opened = false;
+ ws.onopen = t.step_func(() => {
+ opened = true;
+ for (let i = 0; i < MESSAGES_TO_SEND; i++) {
+ ws.send(message);
+ }
+ });
+ let responsesReceived = 0;
+ ws.onmessage = t.step_func(({data}) => {
+ assert_equals(data, String(MESSAGE_SIZE), 'size must match');
+ if (++responsesReceived == MESSAGES_TO_SEND) {
+ ws.close();
+ }
+ });
+ let resolvePromise;
+ const promise = new Promise(resolve => {
+ resolvePromise = resolve;
+ });
+ ws.onclose = t.step_func(({wasClean}) => {
+ assert_true(opened, 'connection should have been opened');
+ assert_true(wasClean, 'close should be clean');
+ resolvePromise();
+ });
+ return promise;
+},
+ `sending ${MESSAGES_TO_SEND} messages of size ${MESSAGE_SIZE} with ` +
+ 'backpressure applied should not hang');
diff --git a/tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html b/tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html
index 9146dd88f05..e47677c8e2c 100644
--- a/tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html
+++ b/tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html
@@ -3,7 +3,7 @@
<script src="/resources/testharnessreport.js"></script>
<script src="resources/webxr_util.js"></script>
<script src="resources/webxr_test_constants.js"></script>
-<canvas />
+<canvas></canvas>
<script>
xr_promise_test(
diff --git a/tests/wpt/web-platform-tests/window-placement/META.yml b/tests/wpt/web-platform-tests/window-management/META.yml
index 2c6d60f4e71..74f926f230f 100644
--- a/tests/wpt/web-platform-tests/window-placement/META.yml
+++ b/tests/wpt/web-platform-tests/window-management/META.yml
@@ -1,4 +1,4 @@
-spec: https://w3c.github.io/window-placement/
+spec: https://w3c.github.io/window-management/
suggested_reviewers:
- michaelwasserman
- bradtriebwasser
diff --git a/tests/wpt/web-platform-tests/window-management/README.md b/tests/wpt/web-platform-tests/window-management/README.md
new file mode 100644
index 00000000000..e96a8a00b8b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/window-management/README.md
@@ -0,0 +1,7 @@
+# Window Management Testing
+
+[Window Management Specification](https://w3c.github.io/window-management/)
+
+The tests in this directory require at least 2 displays on the host machine to
+yield meaningful results. An example configuration is 2 displays with 1920x1080
+resolution arranged horizontally (primary on the left, secondary on the right).
diff --git a/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-companion.tentative.https.html b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-companion.tentative.https.html
new file mode 100644
index 00000000000..a4b09f3d5a8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-companion.tentative.https.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<meta name="timeout" content="long">
+<!-- user agents are not required to support open features other than `noopener`
+ and on some platforms position and size features don't make sense -->
+<meta name="flags" content="may">
+<title>Window Management test: Fullscreen Companion Window</title>
+<link rel="help" href="https://w3c.github.io/window-management/">
+Tests use of multi-screen details to enter fullscreen and open a 'companion'
+popup window in the same user activation.<br>
+The host device must have 2+ screens to yield meaningful results.<br><br>
+<button id="closeButton" onclick="closePopups">Close popups</button><br>
+<input id="autoClose" type="checkbox" checked=true>Auto-close popups</input>
+<ul id="list"></ul>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/helpers.js"></script>
+<script>
+'use strict';
+
+let popups = [];
+function closePopups() {
+ popups.forEach(p => p.close());
+ popups = [];
+}
+
+promise_test(async setUpTest => {
+ await setUpWindowManagement(setUpTest);
+ const screens = window.screenDetails.screens;
+ const originalScreen = window.screenDetails.currentScreen;
+ for (const [i, screenA] of screens.entries()) {
+ const screenB = screens[(i + 1) % screens.length];
+ let name = `Fullscreen on '${screenA.label}'; popup on '${screenB.label}'`;
+ promise_test(async test => {
+ await buttonClick(test, name);
+ await document.documentElement.requestFullscreen({ screen: screenA });
+ await assertWindowOnScreen(window, screenA);
+ // Expect the popup to open if multiple screens are available.
+ const assertPlacement = screens.length > 1;
+ const popup = await openPopupOnScreen(screenB, assertPlacement);
+ if (!!popup)
+ popups.push(popup);
+ // Exit fullscreen; `window` should move back to `originalScreen`.
+ await buttonClick(test, `Exit fullscreen`);
+ await document.exitFullscreen();
+ await assertWindowOnScreen(window, originalScreen);
+ assert_false(!!document.fullscreenElement);
+ if (autoClose.checked)
+ closePopups();
+ }, name);
+ }
+}, 'Enter fullscreen and open a popup from one transient activation.');
+</script>
diff --git a/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-enter.tentative.https.html b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-enter.tentative.https.html
new file mode 100644
index 00000000000..b67907807b4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-enter.tentative.https.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta name="timeout" content="long">
+<title>Window Management test: target-screen element.requestFullscreen()</title>
+<link rel="help" href="https://w3c.github.io/window-management/">
+Tests use of multi-screen details to enter fullscreen on specific screens.<br>
+The host device must have 2+ screens to yield meaningful results.<br><br>
+<ul id="list"></ul>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/helpers.js"></script>
+<script>
+'use strict';
+
+promise_test(async setUpTest => {
+ await setUpWindowManagement(setUpTest);
+ const originalScreen = window.screenDetails.currentScreen;
+ for (const s of window.screenDetails.screens) {
+ const name = `Request fullscreen on '${s.label}`;
+ await promise_test(async test => {
+ // Request fullscreen on screen `s`; `window` should move there.
+ await buttonClick(test, name);
+ await document.documentElement.requestFullscreen({ screen: s });
+ await assertWindowOnScreen(window, s);
+ assert_true(!!document.fullscreenElement);
+
+ // Exit fullscreen; `window` should move back to `originalScreen`.
+ await buttonClick(test, `Exit fullscreen`);
+ await document.exitFullscreen();
+ await assertWindowOnScreen(window, originalScreen);
+ assert_false(!!document.fullscreenElement);
+ }, name);
+ }
+}, 'Use multi-screen details to enter fullscreen on specific screens');
+</script>
diff --git a/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-move.tentative.https.html b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-move.tentative.https.html
new file mode 100644
index 00000000000..b91ee4cdc4b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-move.tentative.https.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta name="timeout" content="long">
+<title>Window Management test: target-screen element.requestFullscreen()</title>
+<link rel="help" href="https://w3c.github.io/window-management/">
+Tests use of multi-screen details to move fullscreen between screens.<br>
+The host device must have 2+ screens to yield meaningful results.<br><br>
+<ul id="list"></ul>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/helpers.js"></script>
+<script>
+'use strict';
+
+promise_test(async test => {
+ await setUpWindowManagement(test);
+ const originalScreen = window.screenDetails.currentScreen;
+ // Request fullscreen on the current screen; the window should stay there.
+ await buttonClick(test, `Request fullscreen on '${originalScreen.label}'`);
+ await document.documentElement.requestFullscreen({ screen: originalScreen });
+ await assertWindowOnScreen(window, originalScreen);
+ assert_true(!!document.fullscreenElement);
+
+ for (const s of window.screenDetails.screens) {
+ // Request fullscreen on screen `s`; `window` should move there.
+ await buttonClick(test, `Request fullscreen on '${s.label}'`);
+ await document.documentElement.requestFullscreen({ screen: s });
+ await assertWindowOnScreen(window, s);
+ assert_true(!!document.fullscreenElement);
+ }
+
+ // Exit fullscreen; `window` should move back to `originalScreen`.
+ await buttonClick(test, `Exit fullscreen`);
+ await document.exitFullscreen();
+ await assertWindowOnScreen(window, originalScreen);
+ assert_false(!!document.fullscreenElement);
+}, 'Use multi-screen details to move fullscreen between screens');
+</script>
diff --git a/tests/wpt/web-platform-tests/window-management/multi-screen-window-open.tentative.https.html b/tests/wpt/web-platform-tests/window-management/multi-screen-window-open.tentative.https.html
new file mode 100644
index 00000000000..708e571c27f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/window-management/multi-screen-window-open.tentative.https.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta name="timeout" content="long">
+<!-- user agents are not required to support open features other than `noopener`
+ and on some platforms position and size features don't make sense -->
+<meta name="flags" content="may">
+<title>Window Management test: target-screen window.open()</title>
+<link rel="help" href="https://w3c.github.io/window-management/">
+Tests use of multi-screen details to open a popup window on each screen.<br>
+The host device must have 2+ screens to yield meaningful results.<br><br>
+<button id="closeButton" onclick="closePopups">Close popups</button><br>
+<input id="autoClose" type="checkbox" checked=true>Auto-close popups</input>
+<ul id="list"></ul>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/helpers.js"></script>
+<script>
+'use strict';
+
+let popups = [];
+function closePopups() {
+ popups.forEach(p => p.close());
+ popups = [];
+}
+
+promise_test(async setUpTest => {
+ await setUpWindowManagement(setUpTest);
+ for (const s of window.screenDetails.screens) {
+ const name = `Open a popup on '${s.label}'`;
+ await promise_test(async test => {
+ await buttonClick(test, name);
+ popups.push(await openPopupOnScreen(s));
+ if (autoClose.checked)
+ closePopups();
+ }, name);
+ }
+}, 'Use multi-screen details to open a popup window on each screen');
+</script>
diff --git a/tests/wpt/web-platform-tests/window-management/resources/helpers.js b/tests/wpt/web-platform-tests/window-management/resources/helpers.js
new file mode 100644
index 00000000000..3c869f168e1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/window-management/resources/helpers.js
@@ -0,0 +1,123 @@
+// Appends a list item with `innerHTML` to the document's 'list' element.
+function log(innerHTML) {
+ const li = document.createElement('li');
+ li.innerHTML = innerHTML;
+ document.getElementById('list').appendChild(li);
+}
+
+// Returns a string with the label and bounds of screen `s` for logging.
+function screenLog(s) {
+ return `'${s.label}': (${s.left},${s.top} ${s.width}x${s.height})`;
+}
+
+// Returns a string with the bounds of window `w` for logging.
+function windowLog(w) {
+ return `(${w.screenLeft},${w.screenTop} ${w.outerWidth}x${w.outerHeight})`;
+}
+
+// Appends a button with `innerHTML` to the document's `list` element.
+// Waits for a test driver or manual click, and disables the button afterwards.
+async function buttonClick(test, innerHTML) {
+ const button = document.createElement('button');
+ button.innerHTML = innerHTML;
+ const li = document.createElement('li');
+ li.appendChild(button)
+ document.getElementById('list').appendChild(li);
+ const click = new EventWatcher(test, button, ['click']).wait_for('click');
+ try { // Support manual testing where test_driver is not running.
+ await test_driver.click(button);
+ } catch {
+ }
+ await click;
+ button.disabled = true;
+}
+
+// Grants `window-management` permission and caches `window.screenDetails`.
+async function setUpWindowManagement(test) {
+ assert_true(
+ 'getScreenDetails' in self && 'isExtended' in screen,
+ `API not supported; use Chrome or Chromium (not content_shell)`);
+ if (!screen.isExtended)
+ log(`WARNING: Use multiple screens for full test coverage`);
+ if (window.location.href.startsWith('file'))
+ log(`WARNING: Run via 'wpt serve'; file URLs lack permission support`);
+
+ try { // Support manual testing where test_driver is not running.
+ await test_driver.set_permission({ name: 'window-management' }, 'granted');
+ } catch {
+ }
+ await buttonClick(test, 'Request screen details');
+ window.screenDetails = await window.getScreenDetails();
+ assert_true(!!window.screenDetails, 'Error getting screen details');
+}
+
+// Polls until `condition` is true, with the given `interval` and `duration`.
+// Returns a promise that will be resolved on success or timeout.
+async function poll(condition, interval = 100, duration = 3000) {
+ const timeout = Date.now() + duration;
+ const loop = async (resolve) => {
+ if (condition() || Date.now() > timeout)
+ resolve();
+ else
+ step_timeout(loop, interval, resolve);
+ }
+ return new Promise(loop);
+}
+
+// Open and return a popup on `screen`, optionally asserting placement.
+async function openPopupOnScreen(screen, assertPlacement = true) {
+ const left = screen.availLeft + Math.floor(screen.availWidth / 2) - 150;
+ const top = screen.availTop + Math.floor(screen.availHeight / 2) - 50;
+ const features = `left=${left},top=${top},width=300,height=100`;
+ log(`Opening a popup with features '${features}' on ${screenLog(screen)}`);
+ // Window.open() synchronously returns a Window with estimated screenLeft|Top,
+ // which may be clamped to the opener's screen or incompletely initialized.
+ let popup = window.open('/resources/blank.html', '', features);
+
+ if (assertPlacement) {
+ // Assert the popup is eventually placed at the expected location.
+ // This may occur after window load, document ready and visible, etc.
+ const initialBounds = windowLog(popup);
+ log(`<div style='margin-left: 40px'>Initial: ${initialBounds}</div>`);
+ await poll(() => { return popup.screenLeft == left &&
+ popup.screenTop == top });
+ popup.document.write(`Requested: (${left},${top} 300x100) <br> \
+ Initial: ${initialBounds} <br> \
+ Resolved: ${windowLog(popup)}`);
+ log(`<div style='margin-left: 40px'>Resolved: ${windowLog(popup)}</div>`);
+ const context = `popup: ${windowLog(popup)}, ${screenLog(screen)}`;
+ assert_equals(popup.screenLeft, left, context);
+ assert_equals(popup.screenTop, top, context);
+ }
+
+ return popup;
+}
+
+// Returns true if window `w` bounds are on screen `s` with threshold `t`.
+function isWindowOnScreen(w, s, t = 100) {
+ return (w.screenLeft >= s.left - t) && (w.screenTop >= s.top - t) &&
+ (w.screenLeft + w.outerWidth <= s.left + s.width + t) &&
+ (w.screenTop + w.outerHeight <= s.top + s.height + t);
+}
+
+// Asserts window `w` currentScreen matches screen `s`. Awaits pending changes,
+// e.g. fullscreen promises may resolve before screen change: crbug.com/1330724.
+async function assertWindowHasCurrentScreen(w, s) {
+ log(`assertWindowHasCurrentScreen w: ${windowLog(w)} s: ${screenLog(s)}`);
+ await poll(() => { return s === w.screenDetails.currentScreen; });
+ assert_equals(screenLog(s), screenLog(w.screenDetails.currentScreen));
+}
+
+// Asserts window `w` bounds roughly match screen `s`. Awaits pending changes,
+// e.g. fullscreen promises may resolve before bounds change: crbug.com/1330724.
+async function assertWindowBoundsOnScreen(w, s) {
+ log(`assertWindowBoundsOnScreen w: ${windowLog(w)} s: ${screenLog(s)}`);
+ await poll(() => { return isWindowOnScreen(w, s); });
+ assert_true(isWindowOnScreen(w, s), `${windowLog(w)} on ${screenLog(s)}`);
+}
+
+// Asserts window `w` bounds and currentScreen match screen `s`.
+async function assertWindowOnScreen(w, s) {
+ await assertWindowHasCurrentScreen(w, s);
+ await assertWindowBoundsOnScreen(w, s);
+}
diff --git a/tests/wpt/web-platform-tests/window-placement/README.md b/tests/wpt/web-platform-tests/window-placement/README.md
deleted file mode 100644
index d9e324c9118..00000000000
--- a/tests/wpt/web-platform-tests/window-placement/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Window Management Testing
-
-[Window Management Specification](https://w3c.github.io/window-placement/)
-
-The tests in this directory require at least 2 displays on the host machine to yield meaningful results. A well-supported configuration is 2 displays at 1920x1080 resolution arranged horizonally (primary on the left, secondary on the right).
diff --git a/tests/wpt/web-platform-tests/window-placement/fullscreen-companion-window-manual.tentative.https.html b/tests/wpt/web-platform-tests/window-placement/fullscreen-companion-window-manual.tentative.https.html
deleted file mode 100644
index 10f30a19060..00000000000
--- a/tests/wpt/web-platform-tests/window-placement/fullscreen-companion-window-manual.tentative.https.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<meta name="timeout" content="long">
-<!-- user agents are not required to support open features other than `noopener`
- and on some platforms position and size features don't make sense -->
-<meta name="flags" content="may">
-<title>Multi-Screen Window Management test: Fullscreen Companion Window</title>
-<link rel="help" href="https://w3c.github.io/window-placement/">
-This test uses multi-screen details to request fullscreen and open a pop-up<br>
-(companion window) in the same user activation.<br>
-It runs manually with `wpt serve` and a compatible browser.<br><br>
-<button id="setUpButton">Request screen details</button>
-<ul id="popupButtons"></ul>
-<button id="cleanUpButton">Close any open popups</button><br>
-<input id="autoCleanUp" type="checkbox" checked=true>Auto-close popups</input>
-<ul id="logger"></ul>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/testdriver.js"></script>
-<script src="/resources/testdriver-vendor.js"></script>
-<script src="resources/helpers.js"></script>
-
-<script>
-'use strict';
-let popups = [];
-
-cleanUpButton.addEventListener('click', async () => {
- popups.forEach(p => p.close());
-});
-
-// expectPopup should be true if the test should expect the pop-up to be
-// created, or false if the popup is not expected to be created (blocked).
-async function testPopupOnScreen(popupTest, screen, expectPopup) {
- // Show a popup child window on the associated screen.
- const left = screen.availLeft + Math.floor(screen.availWidth / 2) - 150;
- const top = screen.availTop + Math.floor(screen.availHeight / 2) - 50;
- log(`Opening a popup on '${screen.label}' at (${left}, ${top})`);
- let popup = window.open(
- '/resources/blank.html', '',
- `left=${left},top=${top},width=300,height=100`);
- assert_equals(!!popup, expectPopup, 'Popup reference');
- if (popup === null)
- return;
- assert_equals(!popup.closed, expectPopup, 'Popup open');
- popups.push(popup);
- if (autoCleanUp.checked) {
- // TODO(crbug.com/1338645): Remove this workaround (delay) after browser code is
- // fixed.
- popupTest.add_cleanup(()=>{
- setTimeout(popup.close, 1000);
- });
- }
-}
-
-promise_test(async setUpTest => {
- await setUpWindowManagement(setUpTest, setUpButton);
- const screenDetails = await getScreenDetails();
- assert_true(!!screenDetails, 'Error getting screen details');
- for (const [i, fullscreenScreen] of screenDetails.screens.entries()) {
- const popupScreen =
- screenDetails.screens[(i + 1) % screenDetails.screens.length];
- let testName =
- `Fullscreen on '${fullscreenScreen.label}' and open popup on '${popupScreen.label}'`;
- promise_test(async popupTest => {
- await addTestTriggerButtonAndAwaitClick(popupButtons,
- testName,
- popupTest);
- await document.documentElement.requestFullscreen(
- { screen: fullscreenScreen }
- );
- await testPopupOnScreen(popupTest, popupScreen,
- /*expectPopup=*/screenDetails.screens.length > 1);
- }, testName);
- }
-}, 'Use multi-screen details to request fullscreen and open a pop-up in the same user activation.');
-</script>
diff --git a/tests/wpt/web-platform-tests/window-placement/multi-screen-fullscreen-manual.tentative.https.html b/tests/wpt/web-platform-tests/window-placement/multi-screen-fullscreen-manual.tentative.https.html
deleted file mode 100644
index 620cd6e507d..00000000000
--- a/tests/wpt/web-platform-tests/window-placement/multi-screen-fullscreen-manual.tentative.https.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<meta name="timeout" content="long">
-<title>Multi-Screen Window Placement test: element.requestFullscreen()</title>
-<link rel="help" href="https://w3c.github.io/window-placement/">
-This test uses multi-screen details to request fullscreen on different
-displays and swap between them.<br>
-It runs manually with `wpt serve` and a compatible browser.<br><br>
-<button id="setUpButton">Request screen details</button>
-<ul id="testButtons"></ul>
-<ul id="logger"></ul>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/testdriver.js"></script>
-<script src="/resources/testdriver-vendor.js"></script>
-<script src="resources/helpers.js"></script>
-
-<script>
-'use strict';
-
-// Waits until `window` is located on `screen` or until 3 seconds elapses.
-async function ensureWindowOnScreen(window, screen) {
- // Returns true if window `w` in on screen `s`.
- const isWindowOnScreen = async (w, s) => {
- const center = {
- x: w.screenLeft + w.outerWidth / 2,
- y: w.screenTop + w.outerHeight / 2
- };
- return center.x >= s.left && (center.x < s.left + s.width) &&
- center.y >= s.top && (center.y < s.top + s.height) &&
- (await w.getScreenDetails()).currentScreen == s;
- }
- // Checks every 100ms if window `w` is on screen `s` up to 3s maximum.
- const waitForWindowOnScreen = async (w, s, resolve, timestamp = Date.now()) => {
- if (!w || w.closed || Date.now() - timestamp > 3000)
- resolve(false);
- else if (await isWindowOnScreen(w, s))
- resolve(true);
- else
- setTimeout(waitForWindowOnScreen.bind(this, w, s, resolve, timestamp), 100);
- }
- return new Promise(resolve => { waitForWindowOnScreen(window, screen, resolve); });
-}
-
-// Asserts that the browser window is correctly positioned on `screen`.
-// `expectFullscreen` specifies whether to expect the window to be
-// fullscreen or not.
-async function testWindowOnScreen(test, screen, expectFullscreen) {
-
- // In chrome, the requestFullscreen promise may resolve before the
- // transition completes and the bounds may be incorect in the meantime.
- // Wait until the window is on the expected screen.
- // TODO(crbug.com/1330724) Remove this.
- await ensureWindowOnScreen(window, screen);
-
- assert_equals(!!document.fullscreenElement, expectFullscreen);
- assert_equals((await window.getScreenDetails()).currentScreen, screen);
-
- if (expectFullscreen) {
- // Window bounds should equal the bounds of the screen when in fullscreen.
- assert_equals(window.screenX, screen.left);
- assert_equals(window.screenY, screen.top);
- assert_equals(window.innerWidth, screen.width);
- assert_equals(window.innerHeight, screen.height);
- } else {
- // Verify the window is somewhere within the specified screen
- assert_true(window.screenX >= screen.left);
- assert_true(window.screenY >= screen.top);
- assert_true(window.screenX + window.outerWidth <= screen.left + screen.width);
- assert_true(window.screenY + window.outerHeight <= screen.top + screen.height);
- }
-}
-
-promise_test(async setUpTest => {
- await setUpWindowPlacement(setUpTest, setUpButton);
- const screenDetails = await getScreenDetails();
- assert_true(!!screenDetails, 'Error getting screen details');
- for (const [i, fullscreenScreen] of screenDetails.screens.entries()) {
- const originalScreen = screenDetails.currentScreen;
- const swapFullscreen =
- screenDetails.screens[(i + 1) % screenDetails.screens.length];
- let testName =
- `Fullscreen on '${fullscreenScreen.label}' and swap to ${swapFullscreen.label}`;
- promise_test(async fullscreenTest => {
- // Step 1: Enter Fullscreen.
- await addTestTriggerButtonAndAwaitClick(testButtons,
- `Step 1: ${testName} (Enter Fullscreen)`,
- fullscreenTest);
- log(`Requesting fullscreen on screen: ${fullscreenScreen.label}`);
- await document.documentElement.requestFullscreen(
- { screen: fullscreenScreen }
- );
- await testWindowOnScreen(fullscreenTest, fullscreenScreen,
- /*expectFullscreen*/true);
- // Step 2: Swap to another screen.
- await addTestTriggerButtonAndAwaitClick(testButtons,
- `Step 2: ${testName} (Swap screens)`,
- fullscreenTest);
- log(`Swapping fullscreen to screen: ${swapFullscreen.label}`);
- await document.documentElement.requestFullscreen(
- { screen: swapFullscreen }
- );
- await testWindowOnScreen(fullscreenTest, swapFullscreen,
- /*expectFullscreen*/true);
- // Step 3: Exit fullscreen. Should restore window to `originalScreen`.
- await addTestTriggerButtonAndAwaitClick(testButtons,
- `Step 3: ${testName} (Exit Fullscreen)`,
- fullscreenTest);
- log(`Exiting fullscreen. Window should restore to ${originalScreen.label}.`);
- await document.exitFullscreen();
- await testWindowOnScreen(fullscreenTest, originalScreen,
- /*expectFullscreen*/false);
- }, testName);
- }
-}, 'Use multi-screen details to request fullscreen on target displays and swap between them');
-</script>
diff --git a/tests/wpt/web-platform-tests/window-placement/multi-screen-window-open.tentative.https.html b/tests/wpt/web-platform-tests/window-placement/multi-screen-window-open.tentative.https.html
deleted file mode 100644
index c453107d568..00000000000
--- a/tests/wpt/web-platform-tests/window-placement/multi-screen-window-open.tentative.https.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<meta name="timeout" content="long">
-<!-- user agents are not required to support open features other than `noopener`
- and on some platforms position and size features don't make sense -->
-<meta name="flags" content="may">
-<title>Multi-Screen Window Management test: window.open()</title>
-<link rel="help" href="https://w3c.github.io/window-placement/">
-This test uses multi-screen details to open a popup window on each screen.<br>
-It runs automated or manually with `wpt serve` and a compatible browser.<br><br>
-<button id="setUpButton">Request screen details</button>
-<ul id="popupButtons"></ul>
-<button id="cleanUpButton">Close any open popups</button><br>
-<input id="autoCleanUp" type="checkbox" checked=true>Auto-close popups</input>
-<ul id="logger"></ul>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/testdriver.js"></script>
-<script src="/resources/testdriver-vendor.js"></script>
-<script src="resources/helpers.js"></script>
-
-<script>
-'use strict';
-let popups = [];
-
-cleanUpButton.addEventListener('click', async () => {
- popups.forEach(p => p.close());
-});
-
-function checkPopupPlacement(popup, x, y, allowSameScreenClamping) {
- // Window.screenX|Y may be zero, if the user agent wishes to hide information
- // about the screen of the output device. They also may incorrectly reflect
- // the origin of content viewport; in that case, estimate window coordinates
- // by subtracing estimated frame insets (top-heavy, horizontally centered).
- // Synchronous estimated placements may be clamped to the current screen.
- const error = 10;
- const dX = popup.screenX - x - (popup.outerWidth - popup.innerWidth) / 2;
- const dY = popup.screenY - y - (popup.outerHeight - popup.innerHeight);
-
- assert_true(!popup.screenX || popup.screenX == x || Math.abs(dX) <= error ||
- (allowSameScreenClamping && popup.screenX >= screen.availLeft &&
- popup.screenX < screen.availLeft + screen.availWidth));
- assert_true(!popup.screenY || popup.screenY == y || Math.abs(dY) <= error ||
- (allowSameScreenClamping && popup.screenY >= screen.availTop &&
- popup.screenY < screen.availTop + screen.availHeight));
-}
-
-async function testPopupOnScreen(popupTest, screen) {
- // Show a popup child window on the associated screen.
- const left = screen.availLeft + Math.floor(screen.availWidth / 2) - 150;
- const top = screen.availTop + Math.floor(screen.availHeight / 2) - 50;
- log(`Opening a popup on '${screen.label}' at (${left}, ${top})`);
- let popup = window.open(
- '/resources/blank.html', '',
- `left=${left},top=${top},width=300,height=100`);
- popups.push(popup);
- if (autoCleanUp.checked)
- popupTest.add_cleanup(popup.close);
-
- // Window.open() synchronously returns a Window with estimated screenX|Y.
- // Initial `screenX` and `screenY` values should match `left` and `top`.
- log(`<div style='margin-left: 40px'>Initial bounds:
- (${popup.screenX}, ${popup.screenY})
- </div>`);
- // Allow synchronous estimated placements to be clamped to the current screen.
- checkPopupPlacement(popup, left, top, true);
- popup.initialScreenX = popup.screenX;
- popup.initialScreenY = popup.screenY;
-
- // Await document.visibilitychange to check resolved Window.screenX|Y values
- // after asynchronous window creation and clamped placement has occurred.
- const visibilitychangeWatcher =
- new EventWatcher(popupTest, popup.document, ['visibilitychange']);
- await visibilitychangeWatcher.wait_for('visibilitychange');
- popup.document.write(`Expected: (${left}, ${top}) <br> \
- Initial: (${popup.initialScreenX}, ${popup.initialScreenY}) <br> \
- Resolved: (${popup.screenX}, ${popup.screenY}) `);
- log(`<div style='margin-left: 40px'>Resolved bounds:
- (${popup.screenX}, ${popup.screenY})
- </div>`);
- // Do not allow resolved placements to be clamped to the current screen.
- checkPopupPlacement(popup, left, top, false);
-}
-
-promise_test(async setUpTest => {
- await setUpWindowManagement(setUpTest, setUpButton);
- const screenDetails = await getScreenDetails();
- assert_true(!!screenDetails, 'Error getting screen details');
- assert_greater_than(screenDetails.screens.length, 0, 'Connect a screen');
- for (const s of screenDetails.screens) {
- promise_test(async popupTest => {
- await addTestTriggerButtonAndAwaitClick(popupButtons,
- `Open a popup on '${s.label}'`,
- popupTest);
- await testPopupOnScreen(popupTest, s);
- }, `Open a popup on '${s.label}'`);
- }
-}, 'Use multi-screen details to open a popup window on each screen');
-</script>
diff --git a/tests/wpt/web-platform-tests/window-placement/resources/helpers.js b/tests/wpt/web-platform-tests/window-placement/resources/helpers.js
deleted file mode 100644
index 92442f91332..00000000000
--- a/tests/wpt/web-platform-tests/window-placement/resources/helpers.js
+++ /dev/null
@@ -1,68 +0,0 @@
-
-// Logs (appends) an HTML string to a logger element in a list format.
-// An element in the document with id "logger" will be used as the log
-// container.
-function log(str) {
- const entry = document.createElement('li');
- entry.innerHTML = str;
- const loggerElement = document.getElementById('logger');
- loggerElement.appendChild(entry);
- return entry;
-}
-
-// Common setup for window management tests. Performs some basic assertions, and
-// then waits for a click on the `setUpButton` element (for manual tests).
-// Example usage:
-// promise_test(async setUpTest => {
-// await setUpWindowManagement(setUpTest, setUpButton);
-// ...
-// });
-async function setUpWindowManagement(setUpTest, setUpButton) {
- assert_true(
- 'getScreenDetails' in self && 'isExtended' in screen,
- `API not supported; use Chromium (not content_shell) and enable
- chrome://flags/#enable-experimental-web-platform-features`);
- if (!screen.isExtended)
- log(`WARNING: Use multiple screens for full test coverage`);
- if (window.location.href.startsWith('file'))
- log(`WARNING: Run via 'wpt serve'; file URLs lack permission support`);
-
- try { // Support manual testing where test_driver is not running.
- await test_driver.set_permission({ name: 'window-management' }, 'granted');
- } catch {
- }
- const setUpWatcher = new EventWatcher(setUpTest, setUpButton, ['click']);
- const setUpClick = setUpWatcher.wait_for('click');
- try { // Support manual testing where test_driver is not running.
- await test_driver.click(setUpButton);
- } catch {
- }
- await setUpClick;
- setUpButton.disabled = true;
-}
-
-
-// Adds a button to the given `buttonContainer` element with the contents of
-// `name`. Attaches an event watcher to the given test and waits for a signal
-// from the test driver to click the button. If no test driver is available
-// (manual testing) then awaits an actual click from the user instead. If
-// `disableOnClick` is true, the button will also be disabled after it is
-// clicked.
-async function addTestTriggerButtonAndAwaitClick(buttonContainer, name, test) {
- const button = document.createElement('button');
- button.innerHTML = name;
- const entry = document.createElement('li');
- entry.appendChild(button);
- buttonContainer.appendChild(entry);
- const testWatcher = new EventWatcher(test, button, ['click']);
- const buttonClick = testWatcher.wait_for('click');
- // Disable the button when it is clicked.
- button.onclick = function() {
- button.disabled = true;
- };
- try { // Support manual testing where test_driver is not running.
- await test_driver.click(button);
- } catch {
- }
- await buttonClick;
-}
diff --git a/tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm b/tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm
index 8417adbefda..a3e49df79ad 100644
--- a/tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm
+++ b/tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm
@@ -6,26 +6,16 @@
<div id=log></div>
<script>
async_test(function(t) {
- try {
var w = new Worker("ftp://example.org/support/WorkerBasic.js");
w.onerror = t.step_func_done(function(e) {
assert_true(e instanceof Event);
});
- } catch (e) {
- assert_throws_dom("SecurityError", () => {throw e}, "DOMExceptions thrown on cross-origin Worker construction must be SecurityErrors");
- t.done();
- }
-}, "Cross-origin classic workers should fail to fetch");
+ }, "Cross-origin classic workers should fail to fetch");
async_test(function(t) {
- try {
var w = new Worker("ftp://example.org/support/WorkerBasic.js", {type: "module"});
w.onerror = t.step_func_done(function(e) {
assert_true(e instanceof Event);
});
- } catch (e) {
- assert_throws_dom("SecurityError", () => {throw e}, "DOMExceptions thrown on cross-origin module Worker construction must be SecurityErrors");
- t.done();
- }
}, "Cross-origin module workers should fail to fetch");
</script>
diff --git a/tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html b/tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html
index 0bfc503d06f..ad464ad50d1 100644
--- a/tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html
+++ b/tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html
@@ -10,15 +10,10 @@
setup({allow_uncaught_exception: true});
testSharedWorkerHelper = (t, script) => {
- try {
- const worker = new SharedWorker(script, '');
- worker.onerror = t.step_func_done(e => {
- assert_true(e instanceof Event);
- });
- } catch (e) {
- assert_throws_dom("SecurityError", () => {throw e}, "DOMExceptions thrown on cross-origin SharedWorker construction must be SecurityErrors");
- t.done();
- }
+ const worker = new SharedWorker(script, '');
+ worker.onerror = t.step_func_done(e => {
+ assert_true(e instanceof Event);
+ });
}
test(() => {
diff --git a/tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html b/tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html
index cdc36c17183..7c86319c14d 100644
--- a/tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html
+++ b/tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html
@@ -12,15 +12,10 @@
setup({allow_uncaught_exception: true});
function testWorkerHelper(t, script) {
- try {
- var worker = new Worker(script);
- worker.onerror = t.step_func_done(function(e) {
- assert_true(e instanceof Event);
- });
- } catch (e) {
- assert_throws_dom("SecurityError", () => {throw e}, "DOMExceptions thrown on cross-origin Worker construction must be SecurityErrors");
- t.done();
- }
+ var worker = new Worker(script);
+ worker.onerror = t.step_func_done(function(e) {
+ assert_true(e instanceof Event);
+ });
}
test(function() {
diff --git a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html
index 4c705e73251..d4e104760e0 100644
--- a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html
+++ b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html
@@ -46,9 +46,12 @@ test(() => {
assert_throws_dom('SyntaxError', () => new Worker(scriptURL, { type: 'module' }));
}, 'Worker construction for an invalid URL should throw an exception.');
-test(() => {
+async_test((t) => {
const scriptURL = 'file:///static-import-worker.js';
- assert_throws_dom('SecurityError', () => new Worker(scriptURL, { type: 'module' }));
-}, 'Worker construction for a file URL should throw an exception.');
+ const worker = new Worker(scriptURL, { type: 'module' });
+ worker.onerror = t.step_func_done(function(e) {
+ assert_true(e instanceof Event);
+ });
+}, 'Worker construction for a file URL should fail');
</script>