aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2023-03-22 01:34:08 +0000
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2023-03-22 01:37:18 +0000
commit90b96becef7f6dd66717c663e4e4d87f6f0ac843 (patch)
tree4b07bf58110c52e584e2530b039927ff1d90b572
parent886032fc74c7d953765f6d00211dc5d2d018f6f0 (diff)
downloadservo-90b96becef7f6dd66717c663e4e4d87f6f0ac843.tar.gz
servo-90b96becef7f6dd66717c663e4e4d87f6f0ac843.zip
Update web-platform-tests to revision b'62c17eac9f99db2ea4e213328c9c6122136694cc'
-rw-r--r--tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/hittest-anonymous-box.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/hittest-before-pseudo.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini15
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini300
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-ui/appearance-cssom-001.html.ini169
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini1
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-float-in-relative.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-list-001.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/api/basic/keepalive.any.js.ini1
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/api/redirect/redirect-keepalive.any.js.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/metadata/generated/css-images.sub.tentative.html.ini7
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini9
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini1
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/non-active-document.html.ini6
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/popovers/popover-target-element-disabled.html.ini24
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/syntax/parsing/DOMContentLoaded-defer.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini5
-rw-r--r--tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/resource-timing/response-status-code.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata-layout-2020/webmessaging/with-ports/018.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini2
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini2
-rw-r--r--tests/wpt/metadata/MANIFEST.json549
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini3
-rw-r--r--tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini3
-rw-r--r--tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-flexbox/hittest-before-pseudo.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-ui/appearance-cssom-001.html.ini98
-rw-r--r--tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini1
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini3
-rw-r--r--tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini1
-rw-r--r--tests/wpt/metadata/fetch/api/redirect/redirect-keepalive.any.js.ini2
-rw-r--r--tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini7
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini2
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini9
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini3
-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/the-window-object/open-close/creating_browsing_context_test_01.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.html.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini4
-rw-r--r--tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini3
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini3
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini3
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini5
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini3
-rw-r--r--tests/wpt/metadata/resource-timing/response-status-code.html.ini4
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata/webmessaging/with-ports/018.html.ini4
-rw-r--r--tests/wpt/metadata/webmessaging/without-ports/017.html.ini4
-rw-r--r--tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini3
-rw-r--r--tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini6
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/storage-buckets.https.any.js7
-rw-r--r--tests/wpt/web-platform-tests/annotation-model/tools/make_tests.py2
-rw-r--r--tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py2
-rw-r--r--tests/wpt/web-platform-tests/annotation-vocab/tools/vocab_tester.py2
-rwxr-xr-xtests/wpt/web-platform-tests/common/security-features/tools/generate.py2
-rwxr-xr-xtests/wpt/web-platform-tests/common/security-features/tools/spec_validator.py2
-rw-r--r--tests/wpt/web-platform-tests/common/security-features/tools/util.py2
-rw-r--r--tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets-vertical-lr.tentative.html141
-rw-r--r--tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets-vertical-rl.tentative.html141
-rw-r--r--tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets.tentative.html140
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/support/fonts/makegsubfonts.py2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-line-height-tests.py2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-position-property-tests.py2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-ruby-tests.py2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-style-property-tests.py2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-breaking/tools/generate-segment-break-transformation-rules-tests.py2
-rw-r--r--tests/wpt/web-platform-tests/css/css-transitions/all-with-discrete.tentative.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-ui/appearance-cssom-001.html11
-rw-r--r--tests/wpt/web-platform-tests/docs/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js4
-rwxr-xr-xtests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/generate.py2
-rw-r--r--tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py2
-rw-r--r--tests/wpt/web-platform-tests/fetch/local-network-access/redirect.https.window.js2
-rw-r--r--tests/wpt/web-platform-tests/fetch/local-network-access/resources/support.sub.js1
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/TODO33
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/join-leave-ad-interest-group.https.sub.window.js542
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/no-winner.https.sub.window.js76
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/reporting-arguments.https.sub.window.js289
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/resources/bidding-logic.sub.py50
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/resources/decision-logic.sub.py47
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/resources/fenced_frame.sub.html5
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/resources/fenced_frame.sub.html.headers2
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/resources/fledge-util.js275
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/resources/request_tracker.py78
-rw-r--r--tests/wpt/web-platform-tests/fledge/tentative/send-report-to.https.sub.window.js161
-rw-r--r--tests/wpt/web-platform-tests/fs/FileSystemBaseHandle-buckets.https.any.js1
-rw-r--r--tests/wpt/web-platform-tests/fs/script-tests/FileSystemBaseHandle-buckets.js4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html17
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html17
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.alpha.html11
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html11
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.broken.html16
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.clip.html15
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.composite.html11
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.floatsource.html14
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedest.html31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedir.html31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativesource.html31
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html612
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nowrap.html15
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.path.html14
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html12
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.transform.html11
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.html16
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html15
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js23
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js21
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js27
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js30
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/compositing.yaml70
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml724
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html20
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.html50
-rw-r--r--tests/wpt/web-platform-tests/html/tools/update_html5lib_tests.py2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/assumptions/tools/ahem-generate-table.py2
-rw-r--r--tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-event-listener.html13
-rw-r--r--tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-first-ui-event.html2
-rw-r--r--tests/wpt/web-platform-tests/png/cicp-chunk.html2
-rw-r--r--tests/wpt/web-platform-tests/png/support/cicp-display-p3.png (renamed from tests/wpt/web-platform-tests/images/cicp.png)bin143 -> 143 bytes
-rw-r--r--tests/wpt/web-platform-tests/png/support/trns-high-bits-set.png (renamed from tests/wpt/web-platform-tests/images/trns.png)bin205 -> 205 bytes
-rw-r--r--tests/wpt/web-platform-tests/png/trns-chunk.html2
-rw-r--r--tests/wpt/web-platform-tests/scheduler/tentative/yield/yield-priority-idle-callbacks.html60
-rw-r--r--tests/wpt/web-platform-tests/service-workers/cache-storage/cache-storage-buckets.https.any.js15
-rw-r--r--tests/wpt/web-platform-tests/speculation-rules/prerender/resources/presentation-request.html1
-rw-r--r--tests/wpt/web-platform-tests/speech-api/SpeechSynthesisEvent-properties.html25
-rw-r--r--tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js27
-rw-r--r--tests/wpt/web-platform-tests/storage/buckets/buckets_storage_policy.tentative.https.any.js8
-rw-r--r--tests/wpt/web-platform-tests/storage/buckets/resources/util.js15
-rw-r--r--tests/wpt/web-platform-tests/streams/piping/general.any.js13
-rw-r--r--tests/wpt/web-platform-tests/subresource-integrity/tools/generate_javascript.py2
-rw-r--r--tests/wpt/web-platform-tests/subresource-integrity/tools/list_hashes.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt4
-rw-r--r--tests/wpt/web-platform-tests/tools/docker/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/manifest/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/requirements_mypy.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/requirements_pytest.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/requirements_tests.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wave/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/webtransport/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/testfiles.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_chromium.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt4
-rw-r--r--tests/wpt/web-platform-tests/web-locks/storage-buckets.tentative.https.any.js5
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py3
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached_tentative.py207
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/cached.py14
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/must-revalidate.py17
317 files changed, 4745 insertions, 2272 deletions
diff --git a/tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini
index 62c2d998e8f..68bf21994e8 100644
--- a/tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -4,7 +4,7 @@
expected: TIMEOUT
[Opening a blob URL in a new window immediately before revoking it works.]
- expected: FAIL
+ expected: TIMEOUT
[Fetching a blob URL immediately before revoking it works in an iframe.]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
index 51432362d66..ee34bc91078 100644
--- a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
@@ -1,3 +1,6 @@
[block-in-inline-hittest-002.html]
[elementsFromPoint]
expected: FAIL
+
+ [elementFromPoint]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini
deleted file mode 100644
index 3e5096beef3..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[block-in-inline-hittest-float-002.html]
- [block-in-inline-hittest-float-002]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/hittest-anonymous-box.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/hittest-anonymous-box.html.ini
new file mode 100644
index 00000000000..b8f8d45a31f
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/hittest-anonymous-box.html.ini
@@ -0,0 +1,3 @@
+[hittest-anonymous-box.html]
+ [Hit-testing within an anonymous flex-item should return the flexbox as the hittest result.]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/hittest-before-pseudo.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/hittest-before-pseudo.html.ini
deleted file mode 100644
index 5b685485f3c..00000000000
--- a/tests/wpt/metadata-layout-2020/css/css-flexbox/hittest-before-pseudo.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[hittest-before-pseudo.html]
- [Hit-testing text within a pseudo-element flex-item should return the flexbox as the hittest result.]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini
index bf767066a79..e75a38dad1d 100644
--- a/tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini
@@ -173,9 +173,6 @@
[Matching font-style: 'oblique -10deg' should prefer 'oblique -60deg -30deg' over 'oblique -50deg -40deg']
expected: FAIL
- [Matching font-style: 'oblique -10deg' should prefer 'italic' over 'oblique 0deg 10deg']
- expected: FAIL
-
[Matching font-stretch: '110%' should prefer '105%' over '100%']
expected: FAIL
@@ -293,9 +290,6 @@
[Matching font-weight: '399' should prefer '350 399' over '340 360']
expected: FAIL
- [Matching font-style: 'italic' should prefer 'oblique 0deg' over 'oblique -60deg -30deg']
- expected: FAIL
-
[Matching font-style: 'oblique 21deg' should prefer 'italic' over 'oblique 0deg']
expected: FAIL
@@ -313,3 +307,12 @@
[Matching font-style: 'oblique 20deg' should prefer 'italic' over 'oblique 0deg']
expected: FAIL
+
+ [Matching font-weight: '430' should prefer '450 460' over '500']
+ expected: FAIL
+
+ [Matching font-stretch: '110%' should prefer '110% 120%' over '115% 116%']
+ expected: FAIL
+
+ [Matching font-style: 'italic' should prefer 'italic' over 'oblique 20deg']
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini
index c83b87a483a..f68eb40c074 100644
--- a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini
@@ -325,3 +325,303 @@
[margin-right length(mm) / values]
expected: FAIL
+
+ [margin-right length(cm) / values]
+ expected: FAIL
+
+ [margin-right length(in) / values]
+ expected: FAIL
+
+ [margin-top length(pt) / values]
+ expected: FAIL
+
+ [margin-top length(pc) / values]
+ expected: FAIL
+
+ [margin-top length(px) / values]
+ expected: FAIL
+
+ [margin-top length(em) / values]
+ expected: FAIL
+
+ [margin-top length(ex) / values]
+ expected: FAIL
+
+ [margin-top length(mm) / values]
+ expected: FAIL
+
+ [margin-top length(cm) / values]
+ expected: FAIL
+
+ [margin-top length(in) / values]
+ expected: FAIL
+
+ [height length(pt) / values]
+ expected: FAIL
+
+ [height length(pc) / values]
+ expected: FAIL
+
+ [height length(px) / values]
+ expected: FAIL
+
+ [height length(em) / values]
+ expected: FAIL
+
+ [height length(ex) / values]
+ expected: FAIL
+
+ [height length(mm) / values]
+ expected: FAIL
+
+ [height length(cm) / values]
+ expected: FAIL
+
+ [height length(in) / values]
+ expected: FAIL
+
+ [height percentage(%) / values]
+ expected: FAIL
+
+ [width length(pt) / values]
+ expected: FAIL
+
+ [width length(pc) / values]
+ expected: FAIL
+
+ [width length(px) / values]
+ expected: FAIL
+
+ [width length(em) / values]
+ expected: FAIL
+
+ [width length(ex) / values]
+ expected: FAIL
+
+ [width length(mm) / values]
+ expected: FAIL
+
+ [width length(cm) / values]
+ expected: FAIL
+
+ [width length(in) / values]
+ expected: FAIL
+
+ [width percentage(%) / values]
+ expected: FAIL
+
+ [min-height length(pt) / values]
+ expected: FAIL
+
+ [min-height length(pc) / values]
+ expected: FAIL
+
+ [min-height length(px) / values]
+ expected: FAIL
+
+ [min-height length(em) / values]
+ expected: FAIL
+
+ [min-height length(ex) / values]
+ expected: FAIL
+
+ [min-height length(mm) / values]
+ expected: FAIL
+
+ [min-height length(cm) / values]
+ expected: FAIL
+
+ [min-height length(in) / values]
+ expected: FAIL
+
+ [min-height percentage(%) / values]
+ expected: FAIL
+
+ [min-width length(pt) / values]
+ expected: FAIL
+
+ [min-width length(pc) / values]
+ expected: FAIL
+
+ [min-width length(px) / values]
+ expected: FAIL
+
+ [min-width length(em) / values]
+ expected: FAIL
+
+ [min-width length(ex) / values]
+ expected: FAIL
+
+ [min-width length(mm) / values]
+ expected: FAIL
+
+ [min-width length(cm) / values]
+ expected: FAIL
+
+ [min-width length(in) / values]
+ expected: FAIL
+
+ [min-width percentage(%) / values]
+ expected: FAIL
+
+ [max-height length(pt) / values]
+ expected: FAIL
+
+ [max-height length(pc) / values]
+ expected: FAIL
+
+ [max-height length(px) / values]
+ expected: FAIL
+
+ [max-height length(em) / values]
+ expected: FAIL
+
+ [color color(rgba) / values]
+ expected: FAIL
+
+ [font-size length(pt) / values]
+ expected: FAIL
+
+ [font-size length(pc) / values]
+ expected: FAIL
+
+ [font-size length(px) / values]
+ expected: FAIL
+
+ [font-size length(em) / values]
+ expected: FAIL
+
+ [font-size length(ex) / values]
+ expected: FAIL
+
+ [font-size length(mm) / values]
+ expected: FAIL
+
+ [font-size length(cm) / values]
+ expected: FAIL
+
+ [font-size length(in) / values]
+ expected: FAIL
+
+ [font-size percentage(%) / values]
+ expected: FAIL
+
+ [font-weight font-weight(keyword) / values]
+ expected: FAIL
+
+ [font-weight font-weight(numeric) / values]
+ expected: FAIL
+
+ [line-height number(integer) / values]
+ expected: FAIL
+
+ [line-height number(decimal) / values]
+ expected: FAIL
+
+ [line-height length(pt) / values]
+ expected: FAIL
+
+ [line-height length(pc) / values]
+ expected: FAIL
+
+ [line-height length(px) / values]
+ expected: FAIL
+
+ [line-height length(em) / values]
+ expected: FAIL
+
+ [line-height length(ex) / values]
+ expected: FAIL
+
+ [line-height length(mm) / values]
+ expected: FAIL
+
+ [line-height length(cm) / values]
+ expected: FAIL
+
+ [line-height length(in) / values]
+ expected: FAIL
+
+ [line-height percentage(%) / values]
+ expected: FAIL
+
+ [letter-spacing length(pt) / values]
+ expected: FAIL
+
+ [letter-spacing length(pc) / values]
+ expected: FAIL
+
+ [letter-spacing length(px) / values]
+ expected: FAIL
+
+ [letter-spacing length(em) / values]
+ expected: FAIL
+
+ [letter-spacing length(ex) / values]
+ expected: FAIL
+
+ [letter-spacing length(mm) / values]
+ expected: FAIL
+
+ [letter-spacing length(cm) / values]
+ expected: FAIL
+
+ [letter-spacing length(in) / values]
+ expected: FAIL
+
+ [word-spacing length(pt) / values]
+ expected: FAIL
+
+ [word-spacing length(pc) / values]
+ expected: FAIL
+
+ [word-spacing length(px) / values]
+ expected: FAIL
+
+ [word-spacing length(em) / values]
+ expected: FAIL
+
+ [word-spacing length(ex) / values]
+ expected: FAIL
+
+ [word-spacing length(mm) / values]
+ expected: FAIL
+
+ [word-spacing length(cm) / values]
+ expected: FAIL
+
+ [word-spacing length(in) / values]
+ expected: FAIL
+
+ [word-spacing percentage(%) / values]
+ expected: FAIL
+
+ [text-indent length(pt) / values]
+ expected: FAIL
+
+ [text-indent length(pc) / values]
+ expected: FAIL
+
+ [text-indent length(px) / values]
+ expected: FAIL
+
+ [text-indent length(em) / values]
+ expected: FAIL
+
+ [text-indent length(ex) / values]
+ expected: FAIL
+
+ [text-indent length(mm) / values]
+ expected: FAIL
+
+ [text-indent length(cm) / values]
+ expected: FAIL
+
+ [text-indent length(in) / values]
+ expected: FAIL
+
+ [text-indent percentage(%) / values]
+ expected: FAIL
+
+ [text-shadow shadow(shadow) / values]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/css-ui/appearance-cssom-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-ui/appearance-cssom-001.html.ini
index 0881e7f64be..feca770c995 100644
--- a/tests/wpt/metadata-layout-2020/css/css-ui/appearance-cssom-001.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/css-ui/appearance-cssom-001.html.ini
@@ -983,3 +983,172 @@
[-webkit-appearance: tab-scroll-arrow-forward (invalid)]
expected: FAIL
+ [-webkit-appearance: button (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: checkbox (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: listbox (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: menulist (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: meter (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: progress-bar (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: radio (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: searchfield (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: textarea (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: slider-horizontal (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: push-button (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: square-button (compat)]
+ expected: FAIL
+
+ [appearance: button (compat)]
+ expected: FAIL
+
+ [appearance: checkbox (compat)]
+ expected: FAIL
+
+ [appearance: listbox (compat)]
+ expected: FAIL
+
+ [appearance: menulist (compat)]
+ expected: FAIL
+
+ [appearance: meter (compat)]
+ expected: FAIL
+
+ [appearance: progress-bar (compat)]
+ expected: FAIL
+
+ [appearance: radio (compat)]
+ expected: FAIL
+
+ [appearance: searchfield (compat)]
+ expected: FAIL
+
+ [appearance: textarea (compat)]
+ expected: FAIL
+
+ [appearance: slider-horizontal (compat)]
+ expected: FAIL
+
+ [appearance: push-button (compat)]
+ expected: FAIL
+
+ [appearance: square-button (compat)]
+ expected: FAIL
+
+
+[appearance-cssom-001.html?exclude=Invalid]
+ [-webkit-appearance: none]
+ expected: FAIL
+
+ [-webkit-appearance: auto]
+ expected: FAIL
+
+ [-webkit-appearance: textfield]
+ expected: FAIL
+
+ [-webkit-appearance: menulist-button]
+ expected: FAIL
+
+ [-webkit-appearance: button (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: checkbox (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: listbox (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: menulist (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: meter (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: progress-bar (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: radio (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: searchfield (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: textarea (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: slider-horizontal (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: push-button (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: square-button (compat)]
+ expected: FAIL
+
+ [appearance: none]
+ expected: FAIL
+
+ [appearance: auto]
+ expected: FAIL
+
+ [appearance: textfield]
+ expected: FAIL
+
+ [appearance: menulist-button]
+ expected: FAIL
+
+ [appearance: button (compat)]
+ expected: FAIL
+
+ [appearance: checkbox (compat)]
+ expected: FAIL
+
+ [appearance: listbox (compat)]
+ expected: FAIL
+
+ [appearance: menulist (compat)]
+ expected: FAIL
+
+ [appearance: meter (compat)]
+ expected: FAIL
+
+ [appearance: progress-bar (compat)]
+ expected: FAIL
+
+ [appearance: radio (compat)]
+ expected: FAIL
+
+ [appearance: searchfield (compat)]
+ expected: FAIL
+
+ [appearance: textarea (compat)]
+ expected: FAIL
+
+ [appearance: slider-horizontal (compat)]
+ expected: FAIL
+
+ [appearance: push-button (compat)]
+ expected: FAIL
+
+ [appearance: square-button (compat)]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini
new file mode 100644
index 00000000000..f18b8d2fcf9
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini
@@ -0,0 +1,3 @@
+[CaretPosition-001.html]
+ [Element at (400, 100)]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini
index cf67b5d03dd..80ed711305d 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini
@@ -1,3 +1,4 @@
[elementFromPoint-dynamic-anon-box.html]
+ expected: CRASH
[Link should be clickable after hiding a scrollbox with an anonymous table inside]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini
deleted file mode 100644
index b905fe70fcb..00000000000
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[elementFromPoint-ellipsis-in-inline-box.html]
- [elementFromPoint-ellipsis-in-inline-box]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-float-in-relative.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-float-in-relative.html.ini
deleted file mode 100644
index 7e9331b6bc2..00000000000
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-float-in-relative.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[elementFromPoint-float-in-relative.html]
- [elementFromPoint-float-in-relative]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-list-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-list-001.html.ini
index 1f892861935..f50036a37ba 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-list-001.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-list-001.html.ini
@@ -13,3 +13,6 @@
[<li>Outside 1</li>]
expected: FAIL
+
+ [<li>Image Inside 2</li>]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
index 1bf6ea475bf..3ddd598f5c4 100644
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini
@@ -16,3 +16,6 @@
[test the top of layer]
expected: FAIL
+
+ [test some point of the element: top left corner]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/fetch/api/basic/keepalive.any.js.ini b/tests/wpt/metadata-layout-2020/fetch/api/basic/keepalive.any.js.ini
index e9ab91fc80e..4c1c78640bb 100644
--- a/tests/wpt/metadata-layout-2020/fetch/api/basic/keepalive.any.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/api/basic/keepalive.any.js.ini
@@ -1,3 +1,4 @@
[keepalive.any.html]
+ expected: TIMEOUT
[keepalive in onunload in nested frame in another window]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/fetch/api/redirect/redirect-keepalive.any.js.ini b/tests/wpt/metadata-layout-2020/fetch/api/redirect/redirect-keepalive.any.js.ini
new file mode 100644
index 00000000000..c57e48f2078
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/fetch/api/redirect/redirect-keepalive.any.js.ini
@@ -0,0 +1,2 @@
+[redirect-keepalive.any.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/metadata-layout-2020/fetch/metadata/generated/css-images.sub.tentative.html.ini
index ed2ce3392d0..0d48169e3cc 100644
--- a/tests/wpt/metadata-layout-2020/fetch/metadata/generated/css-images.sub.tentative.html.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/metadata/generated/css-images.sub.tentative.html.ini
@@ -147,8 +147,5 @@
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
expected: FAIL
- [border-image sec-fetch-mode - Not sent to non-trustworthy cross-site destination]
- expected: FAIL
-
- [border-image sec-fetch-site - HTTPS downgrade (header not sent)]
- expected: FAIL
+ [background-image sec-fetch-site - HTTPS downgrade (header not sent)]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini
index a3f473a9557..1f528be38ef 100644
--- a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini
@@ -1,4 +1,4 @@
[scroll-restoration-fragment-scrolling-cross-origin.html]
- expected: TIMEOUT
+ expected: ERROR
[Manual scroll restoration should take precedent over scrolling to fragment in cross origin navigation]
expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini
index 149bcb4ff8c..b8fd22e2b81 100644
--- a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini
@@ -10,3 +10,6 @@
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank']
expected: FAIL
+
+ [load & pageshow events do not fire on contentWindow of <iframe> element created with src='']
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini
index 5aef7ce66ce..324db3d9b35 100644
--- a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini
@@ -10,6 +10,3 @@
[load event does not fire on window.open('about:blank?foo')]
expected: FAIL
-
- [load event does not fire on window.open('about:blank')]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini
index 8ae58f9f1e2..b169452e04a 100644
--- a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini
@@ -10,12 +10,3 @@
[0080 00FF set in href="" targeting a frame and clicked]
expected: FAIL
-
- [0080 00FF 0100 set in href="" targeting a frame and clicked]
- expected: FAIL
-
- [D83D DE0D set in href="" targeting a frame and clicked]
- expected: FAIL
-
- [DE0D 0041 set in href="" targeting a frame and clicked]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
new file mode 100644
index 00000000000..7dc346632a4
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
@@ -0,0 +1,3 @@
+[navigation-unload-same-origin.window.html]
+ [Same-origin navigation started from unload handler must be ignored]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini
deleted file mode 100644
index 60a4fa51f8a..00000000000
--- a/tests/wpt/metadata-layout-2020/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[a-click.html]
- [aElement.click() before the load event must NOT replace]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini
new file mode 100644
index 00000000000..ca84728f1e9
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini
@@ -0,0 +1,4 @@
+[creating_browsing_context_test_01.html]
+ expected: TIMEOUT
+ [first argument: absolute url]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini
deleted file mode 100644
index adaff1bb3fe..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.svg.html]
- [drawImage() of an SVG image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
index 76d431df3a0..bea609ed103 100644
--- a/tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.image.html]
[drawImage with zero-sized source rectangle from image throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle from image draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html.ini
deleted file mode 100644
index 844abdcced8..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.composite.globalAlpha.image.html]
- [OffscreenCanvas test: 2d.composite.globalAlpha.image]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js.ini
deleted file mode 100644
index a66bd4c9607..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.composite.globalAlpha.image.worker.html]
- [2d]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html.ini
deleted file mode 100644
index 5dd24f42848..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.composite.globalAlpha.imagepattern.html]
- [OffscreenCanvas test: 2d.composite.globalAlpha.imagepattern]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js.ini
deleted file mode 100644
index 1718e787f1c..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.composite.globalAlpha.imagepattern.worker.html]
- [2d]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html.ini
deleted file mode 100644
index f312f1589b8..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.basic.html]
- [OffscreenCanvas test: 2d.drawImage.9arg.basic]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js.ini
deleted file mode 100644
index 2ff0b98dcb5..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.basic.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html.ini
deleted file mode 100644
index 3e8e707a8be..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.sourcepos.html]
- [OffscreenCanvas test: 2d.drawImage.9arg.sourcepos]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js.ini
deleted file mode 100644
index 3ec5cbbadc9..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.sourcepos.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html.ini
deleted file mode 100644
index 44ad1e2efb0..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.sourcesize.html]
- [OffscreenCanvas test: 2d.drawImage.9arg.sourcesize]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js.ini
deleted file mode 100644
index 150dc88d58e..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.sourcesize.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html.ini
deleted file mode 100644
index 0b04a0d852d..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.alpha.html]
- [OffscreenCanvas test: 2d.drawImage.alpha]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js.ini
deleted file mode 100644
index 93ca873d5aa..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.alpha.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini
deleted file mode 100644
index dba65871688..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.animated.poster.html]
- [drawImage() of an APNG draws the poster frame]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js.ini
deleted file mode 100644
index 19ec8e5782b..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.animated.poster.worker.html]
- [drawImage() of an APNG draws the poster frame]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html.ini
deleted file mode 100644
index 38c46fe7e71..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.broken.html]
- [OffscreenCanvas test: 2d.drawImage.broken]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js.ini
deleted file mode 100644
index b85d2727a7a..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.broken.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html.ini
deleted file mode 100644
index ddc364f4b22..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.clip.html]
- [OffscreenCanvas test: 2d.drawImage.clip]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js.ini
deleted file mode 100644
index f387c1acd65..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.clip.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini
deleted file mode 100644
index 0d1eb846146..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.composite.html]
- [OffscreenCanvas test: 2d.drawImage.composite]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js.ini
deleted file mode 100644
index 14975992b26..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.composite.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html.ini
deleted file mode 100644
index e3c09955f13..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.floatsource.html]
- [OffscreenCanvas test: 2d.drawImage.floatsource]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js.ini
deleted file mode 100644
index 5186c30c1a7..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.floatsource.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html.ini
deleted file mode 100644
index d9c00e020cb..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativedest.html]
- [Negative destination width/height represents the correct rectangle]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js.ini
deleted file mode 100644
index 31b9ec54018..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativedest.worker.html]
- [Negative destination width/height represents the correct rectangle]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html.ini
deleted file mode 100644
index cf30b485857..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativedir.html]
- [Negative dimensions do not affect the direction of the image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js.ini
deleted file mode 100644
index b789fbb639b..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativedir.worker.html]
- [Negative dimensions do not affect the direction of the image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html.ini
deleted file mode 100644
index fe6fe1317b3..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativesource.html]
- [Negative source width/height represents the correct rectangle]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js.ini
deleted file mode 100644
index d20b4175b81..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativesource.worker.html]
- [Negative source width/height represents the correct rectangle]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html.ini
deleted file mode 100644
index 968631ac458..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.nonfinite.html]
- [drawImage() with Infinity/NaN is ignored]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js.ini
deleted file mode 100644
index d88e35b08a4..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.nonfinite.worker.html]
- [drawImage() with Infinity/NaN is ignored]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html.ini
deleted file mode 100644
index aac6b35b06d..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.nowrap.html]
- [Stretched images do not get pixels wrapping around the edges]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js.ini
deleted file mode 100644
index 61d2ac9b727..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.nowrap.worker.html]
- [Stretched images do not get pixels wrapping around the edges]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html.ini
deleted file mode 100644
index 0a613ba46a2..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.path.html]
- [OffscreenCanvas test: 2d.drawImage.path]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js.ini
deleted file mode 100644
index e3dc6d5ad67..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.path.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini
deleted file mode 100644
index adaff1bb3fe..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.svg.html]
- [drawImage() of an SVG image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js.ini
deleted file mode 100644
index a97b8b37d07..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.svg.worker.html]
- [drawImage() of an SVG image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html.ini
deleted file mode 100644
index 43c1fd403c1..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.transform.html]
- [OffscreenCanvas test: 2d.drawImage.transform]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js.ini
deleted file mode 100644
index 864d3b3ba40..00000000000
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.transform.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini
index efa68741600..d6114b0db21 100644
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.html]
[drawImage with zero-sized source rectangle throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
index 76d431df3a0..bea609ed103 100644
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.image.html]
[drawImage with zero-sized source rectangle from image throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle from image draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini
index 6f5d45f8dd9..2e4d62fc879 100644
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini
+++ b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.image.worker.html]
[drawImage with zero-sized source rectangle from image throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle from image draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini
index a9d64261e96..a7f8c7ee0ce 100644
--- a/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini
+++ b/tests/wpt/metadata-layout-2020/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.worker.html]
[drawImage with zero-sized source rectangle throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini
new file mode 100644
index 00000000000..09c049e4b58
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini
@@ -0,0 +1,3 @@
+[media_fragment_seek.html]
+ [Video should seek to time specified in media fragment syntax]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index e8872b3585b..bbc1f35d8d9 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,4 +1,3 @@
[iframe_sandbox_popups_nonescaping-1.html]
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
index 31928ad3947..31745fdcdcf 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
@@ -1,5 +1,4 @@
[sandbox-top-navigation-child-special-cases.tentative.sub.window.html]
- expected: TIMEOUT
[Allow top with user activation + user activation]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
index 3cdeb8ebcbc..47b45e65a1c 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
@@ -1,3 +1,9 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
+
+ [createHTMLDocument]
+ expected: FAIL
+
+ [<template>]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html.ini
new file mode 100644
index 00000000000..693bd4e2994
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html.ini
@@ -0,0 +1,3 @@
+[selectmenu-value-option.tentative.html]
+ [selectmenu.value should reflect option.value]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/popovers/popover-target-element-disabled.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/popovers/popover-target-element-disabled.html.ini
new file mode 100644
index 00000000000..0273c7dae9a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/popovers/popover-target-element-disabled.html.ini
@@ -0,0 +1,24 @@
+[popover-target-element-disabled.html]
+ [Disabled popover*target buttons should not affect the popover heirarchy.]
+ expected: FAIL
+
+ [Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly outer popover is closed.]
+ expected: FAIL
+
+ [Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly inner popover is closed.]
+ expected: FAIL
+
+ [Setting the form attribute on popover*target buttons when popovers are open should close all popovers.]
+ expected: FAIL
+
+ [Changing the input type on a popover*target button when popovers are open should close all popovers.]
+ expected: FAIL
+
+ [Disconnecting popover*target buttons when popovers are open should close all popovers.]
+ expected: FAIL
+
+ [Changing the popovertarget attribute to break the chain should close all popovers.]
+ expected: FAIL
+
+ [Modifying popovertarget on a button which doesn't break the chain shouldn't close any popovers.]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini
deleted file mode 100644
index 2212b9d731f..00000000000
--- a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[async-script.html?reload]
- expected: ERROR
-
-[async-script.html]
diff --git a/tests/wpt/metadata-layout-2020/html/syntax/parsing/DOMContentLoaded-defer.html.ini b/tests/wpt/metadata-layout-2020/html/syntax/parsing/DOMContentLoaded-defer.html.ini
new file mode 100644
index 00000000000..b8bdf33cb65
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/syntax/parsing/DOMContentLoaded-defer.html.ini
@@ -0,0 +1,3 @@
+[DOMContentLoaded-defer.html]
+ [The end: DOMContentLoaded and defer scripts]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini
deleted file mode 100644
index fc0233f5241..00000000000
--- a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[module-delayed.html]
- [async document.write in a module]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini
new file mode 100644
index 00000000000..f9a4f08cd70
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini
@@ -0,0 +1,3 @@
+[module-tla-delayed.html]
+ [document.write in an imported module]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
index 7237f5792de..dbe1def99e3 100644
--- a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
@@ -1,10 +1,9 @@
[promise-job-entry-different-function-realm.html]
- expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
- expected: TIMEOUT
+ expected: FAIL
[Thenable resolution]
expected: FAIL
@@ -13,4 +12,4 @@
expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
index 1d71471b73c..4a48dd15a9d 100644
--- a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
@@ -1,7 +1,6 @@
[promise-rejection-events.html]
- expected: TIMEOUT
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
- expected: TIMEOUT
+ expected: FAIL
[unhandledrejection: from createImageBitmap which is UA triggered]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/resource-timing/response-status-code.html.ini b/tests/wpt/metadata-layout-2020/resource-timing/response-status-code.html.ini
index b84e3cf7b11..38df5f01300 100644
--- a/tests/wpt/metadata-layout-2020/resource-timing/response-status-code.html.ini
+++ b/tests/wpt/metadata-layout-2020/resource-timing/response-status-code.html.ini
@@ -265,10 +265,10 @@
expected: FAIL
[This test validates the response status of resources. 88]
- expected: TIMEOUT
+ expected: FAIL
[This test validates the response status of resources. 89]
- expected: NOTRUN
+ expected: TIMEOUT
[This test validates the response status of resources. 90]
expected: NOTRUN
diff --git a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index 20a8f9a4320..1f70062991c 100644
--- a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
- expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata-layout-2020/webmessaging/with-ports/018.html.ini
new file mode 100644
index 00000000000..b7b36c1d3a4
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/webmessaging/with-ports/018.html.ini
@@ -0,0 +1,4 @@
+[018.html]
+ expected: TIMEOUT
+ [origin of the script that invoked the method, javascript:]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini
deleted file mode 100644
index c7946fc91b4..00000000000
--- a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[017.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, about:blank]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini
new file mode 100644
index 00000000000..80f9a4f15b8
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini
@@ -0,0 +1,2 @@
+[Worker-constructor.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
index 282ab0b2525..cdeaf7f7080 100644
--- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
- expected: FAIL
+ expected: TIMEOUT
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 8dba53dd1ca..4425fa85278 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -324419,7 +324419,7 @@
},
"tools": {
"make_tests.py": [
- "e8bb1aec5a77e697bd9dbc2f23a301dd6ba2bae3",
+ "6890baa296170f05ac8e1eeef4c3e5e6813a62af",
[]
],
"samples": {
@@ -324751,7 +324751,7 @@
},
"tools": {
"protocol-server.py": [
- "e5d121000177a27176194d860bba9bd003b9bc20",
+ "fc8fa74997781164e49bb7fc00f62f2a324a761c",
[]
]
}
@@ -324771,7 +324771,7 @@
[]
],
"vocab_tester.py": [
- "7d9cc5b8a2e535ac48cf3c8c2c2c500df513f011",
+ "86453a7a2997d8874246b5deebd96d417ef28223",
[]
]
}
@@ -326740,7 +326740,7 @@
[]
],
"generate.py": [
- "176e0ebbebc07ac44cbf735c67a1b50ea028d0d7",
+ "409b4f195ff72c0427e51c523940302586243636",
[]
],
"spec.src.json": [
@@ -326748,7 +326748,7 @@
[]
],
"spec_validator.py": [
- "3ac3f530169e5461ae070a7568aaff2cdba9c398",
+ "f8a1390ef0d440d21986c8c34803dd34c5dcb815",
[]
],
"template": {
@@ -326770,7 +326770,7 @@
]
},
"util.py": [
- "72541c781429be479a02809bef14532a7c1900b3",
+ "5da06f9d51eb084770340c39d826079d2126b52a",
[]
]
},
@@ -381135,7 +381135,7 @@
[]
],
"makegsubfonts.py": [
- "e519b4936de26e9819419d91d5cc8c3254a4f783",
+ "b46fa0e632b0ca903513c2694e505ff7fb930863",
[]
],
"pass.woff": [
@@ -392785,7 +392785,7 @@
],
"tools": {
"generate-segment-break-transformation-rules-tests.py": [
- "fc894161bda1b4e3f5b643b6e668a6d1d0bcc614",
+ "6689ef5f18259e5b6e9fc6864db862825ac61691",
[]
]
}
@@ -395382,15 +395382,15 @@
},
"tools": {
"generate-text-emphasis-line-height-tests.py": [
- "12fb6a3ad850b357808c47a90a818dd73be2de5b",
+ "e2a4457f38e4659534fc35c794d2000e3c61635f",
[]
],
"generate-text-emphasis-position-property-tests.py": [
- "527959068762f5a7185bf11bdc2536054d2db258",
+ "f2baf023325ad45c7793d30a5eafcf2fde84bf06",
[]
],
"generate-text-emphasis-ruby-tests.py": [
- "fdbaec052e4e4bdfdcad1e9fc9731bf26a518509",
+ "f1158f5f843fcabda15aed4e2f6155303f8252a6",
[]
],
"generate-text-emphasis-style-property-010-tests.sh": [
@@ -395398,7 +395398,7 @@
[]
],
"generate-text-emphasis-style-property-tests.py": [
- "1b1d6fc16f24b91eef28cd99c428f426cc61c349",
+ "b6ad1f7291b2b91cc22f0096c169b7b844e295ed",
[]
]
}
@@ -404724,7 +404724,7 @@
[]
],
"requirements.txt": [
- "0ad8484f60b3f16d7318f6ad8983501d81f67eea",
+ "589a98eaa2ab33b4d330b5e355eb8b0bdc43d31f",
[]
],
"reviewing-tests": {
@@ -405262,7 +405262,7 @@
},
"scrolling": {
"scroll_support.js": [
- "74b531cd3dfedfe8409f1918afebdff7b73e48fa",
+ "f561b6995344432c7030790ba98417fafae3e590",
[]
]
}
@@ -405410,7 +405410,7 @@
[]
],
"generate.py": [
- "a0bca546c75fdba873b5a99d2e593acdda2e5499",
+ "20c866bee80b94d36863cbd724a7e4abfc1ff635",
[]
],
"mathml.html": [
@@ -407025,7 +407025,7 @@
[]
],
"make-polyfill-tests.py": [
- "532037e2a33226e31309a5838f4d7afd2c51227d",
+ "97c6fc74e93ba0f89f34c75cab3d4fb6ad183626",
[]
]
},
@@ -408592,7 +408592,7 @@
[]
],
"support.sub.js": [
- "c07fd2c2acee68967c57826fd093abb013b05761",
+ "0cf3d2532e7ffd5ff24d9dd3d1653cf60b62c071",
[]
],
"worker-blob-fetcher.html": [
@@ -409084,6 +409084,40 @@
]
}
},
+ "fledge": {
+ "tentative": {
+ "TODO": [
+ "839d286b38882f94bf97f0f6d749a33aa165cf46",
+ []
+ ],
+ "resources": {
+ "bidding-logic.sub.py": [
+ "dfc4d86be359d22783da86c2c38aa97b3f8060b8",
+ []
+ ],
+ "decision-logic.sub.py": [
+ "8d5303ac5a41c3540b6b1289346b3cd2d3cc6147",
+ []
+ ],
+ "fenced_frame.sub.html": [
+ "eaca3f49fd15840a3688a10a91b56524566893c5",
+ []
+ ],
+ "fenced_frame.sub.html.headers": [
+ "bc74b5851b6cb95c057d9787185f061b6357e4e0",
+ []
+ ],
+ "fledge-util.js": [
+ "9f95a59e43a3bbf6817cc541f9a796689834b1c9",
+ []
+ ],
+ "request_tracker.py": [
+ "5fedd727debf9c25321952fd0b053e7efb0550bd",
+ []
+ ]
+ }
+ }
+ },
"focus": {
"support": {
"activeelement-after-calling-window-focus-inner.html": [
@@ -410365,7 +410399,7 @@
[]
],
"FileSystemBaseHandle-buckets.js": [
- "98261995f9659b939027d914d9f9ce0d3c2a980e",
+ "01c41231808e2c18d707c0b4413c03d825918578",
[]
],
"FileSystemBaseHandle-getUniqueId.js": [
@@ -414337,7 +414371,7 @@
[]
],
"compositing.yaml": [
- "c0b7b83e001a0e93f381f7773b76ed4485658f55",
+ "e808206bdab407172413dc1dd518e431da4677ea",
[]
],
"conformance_requirements.yaml": [
@@ -414345,7 +414379,7 @@
[]
],
"drawing-images-to-the-canvas.yaml": [
- "e263bf0253dd121a97f32e3747c32e7799518ccd",
+ "4442f1ad481d65677b38b01616fc189ec6977d7c",
[]
],
"drawing-rectangles-to-the-canvas.yaml": [
@@ -425075,7 +425109,7 @@
[]
],
"update_html5lib_tests.py": [
- "f1a99416fc8a4a5cd4fd3b32b92cd23b72b521ce",
+ "7ad9bc6f862b724f73a32e688327f7f8206146b8",
[]
]
},
@@ -425767,10 +425801,6 @@
"2ff648a04905f9090df637f2140c1c092cc3a247",
[]
],
- "cicp.png": [
- "8fa0ce2123c4f876a71b1ca80e04931614f3b87f",
- []
- ],
"clear-100x50.png": [
"eeedd0ff05889ffd4468bf19a2e8e9e0a094201c",
[]
@@ -425921,10 +425951,6 @@
"55f8e69325bc61ff83f769a6524f7f9c3310be1f",
[]
],
- "trns.png": [
- "4e309a89a8a27a9f7afb6eee6a4a604a3ef7c249",
- []
- ],
"undecodable.png": [
"f2581017b43d44664e7137a78c0803554b50f3b1",
[]
@@ -426190,7 +426216,7 @@
},
"tools": {
"ahem-generate-table.py": [
- "8790da02e2793664f7e1f0808f8d2b998718d54a",
+ "314279f67105958badfa56b37a4bcc2625797f5d",
[]
]
}
@@ -431698,7 +431724,17 @@
"META.yml": [
"da174ac614d820479e25a9ae86217b128f2c63fa",
[]
- ]
+ ],
+ "support": {
+ "cicp-display-p3.png": [
+ "8fa0ce2123c4f876a71b1ca80e04931614f3b87f",
+ []
+ ],
+ "trns-high-bits-set.png": [
+ "4e309a89a8a27a9f7afb6eee6a4a604a3ef7c249",
+ []
+ ]
+ }
},
"pointerevents": {
"META.yml": [
@@ -438862,7 +438898,7 @@
[]
],
"presentation-request.html": [
- "62829556bb438c1396a0f17c7e3b45456f2bdad9",
+ "18475a3d67f7d8688269ee7b433617e1fbb5c6e6",
[]
],
"prompt-by-before-unload-inner-frame.html": [
@@ -439047,7 +439083,13 @@
"META.yml": [
"4f215060f5abf6ba31f55e1fbe5a41b1daaa7a47",
[]
- ]
+ ],
+ "resources": {
+ "util.js": [
+ "50abce14cdc520f81178d452d6f165e9401bfbd0",
+ []
+ ]
+ }
},
"helpers.js": [
"b524c1b82cfb7b7f8810d1150ff3df8b98f31017",
@@ -439267,11 +439309,11 @@
],
"tools": {
"generate_javascript.py": [
- "300e1703b177765ea3df7c35fbbfae3d0aa8817a",
+ "fed3e5445fe86ac5869b7b30e912be7ecdd08df3",
[]
],
"list_hashes.py": [
- "5f189ce44b2260ea2187a5b880868efd7f793542",
+ "52f46ffd74788e5940afebb3b8b8ba93fc0123b7",
[]
]
}
@@ -440511,7 +440553,7 @@
[]
],
"requirements_tc.txt": [
- "7189b7b58f9d6c2fd32424b4b30cf19bee1e1e5e",
+ "95753d91681e4a562226b47c17948668f4d8dbc2",
[]
],
"run_tc.py": [
@@ -440643,7 +440685,7 @@
[]
],
"requirements.txt": [
- "06d168a18d293effcb2c868ba01921ad9c3944cc",
+ "75dd52bde00438cc8dfa410be9f1fc48a85af4b8",
[]
],
"retry.py": [
@@ -440955,7 +440997,7 @@
[]
],
"requirements.txt": [
- "9f5bc8a143bffa934424eadab5fc34229f70362b",
+ "0236020bc1f52a5cf4944da6e5d28f3c05b2f9d1",
[]
],
"sourcefile.py": [
@@ -441022,15 +441064,15 @@
[]
],
"requirements_mypy.txt": [
- "af7bf35b21a3418dd8250cd283ee448089ab9644",
+ "48b6fecce53c66dbd1bd939ac41caa2ce6ed5a7c",
[]
],
"requirements_pytest.txt": [
- "e7678941a7f22320a60a0e4568974e82ae56626c",
+ "a724ff23e51d37d46041b5f80df9aeb5fd78161e",
[]
],
"requirements_tests.txt": [
- "4d8f2a5d22399568f3211c20add58c45e20887b5",
+ "27dea42bf5dabf7a6683b81f4d53e38c7e673da2",
[]
],
"runner": {
@@ -448683,7 +448725,7 @@
[]
],
"requirements.txt": [
- "5c0369b9f56b601663f0c54ce5925c5252b64a13",
+ "f814994b483e86b28d74de4bd5650295df420d2d",
[]
],
"resources": {
@@ -449099,7 +449141,7 @@
]
},
"requirements.txt": [
- "8743e0317d39a93908e2e9469a9dd253c65d9fc6",
+ "d3b88d7f0464318d610aa15f16fa7cc392af36b4",
[]
]
},
@@ -449137,7 +449179,7 @@
[]
],
"requirements.txt": [
- "a743bbe341f33f5668aef1fa28c8252af2fc8c00",
+ "ba07d192a2d5bcac1b60f3afa725e90a8146fe55",
[]
],
"requirements_install.txt": [
@@ -449153,7 +449195,7 @@
[]
],
"testfiles.py": [
- "172ad201fc8df1bb4b4973fc9592ee54c7f8c49b",
+ "74c97ceefe2e58746135e9cb516b6bb605e4b11c",
[]
],
"tests": {
@@ -449305,35 +449347,35 @@
]
},
"requirements.txt": [
- "202e80741333a46d53a26c9b4d73f550401be2c4",
+ "ccf09be728d5aefd44c3b2a484d636b3ad358bdf",
[]
],
"requirements_chromium.txt": [
- "8743e0317d39a93908e2e9469a9dd253c65d9fc6",
+ "d3b88d7f0464318d610aa15f16fa7cc392af36b4",
[]
],
"requirements_edge.txt": [
- "12920a9956a837724a9c35d2b033cb1b9a1ee7a2",
+ "dfbdc6d9e3471ebb301de7f7852849df11973c44",
[]
],
"requirements_firefox.txt": [
- "1f9033c09fe8db7e9684a3e336559af48d51331e",
+ "644df3bfd44aef4fe82b1d3eb60073ff258df609",
[]
],
"requirements_ie.txt": [
- "1726afa607908c45769c2c476a2cafa37c8c22cb",
+ "83948c668e4b9bfb9e7cb1a801a13cdedc8819c9",
[]
],
"requirements_opera.txt": [
- "1726afa607908c45769c2c476a2cafa37c8c22cb",
+ "83948c668e4b9bfb9e7cb1a801a13cdedc8819c9",
[]
],
"requirements_safari.txt": [
- "8d303aa45280f24149fd636551ca3af59d801258",
+ "e2e2f09f708592d511126d114c95019bf93c62ff",
[]
],
"requirements_sauce.txt": [
- "5089b0c1838d73d18ea3aa303160ef8b29d6e0f5",
+ "64fb1390c044d703a2d0865680b714b44f540925",
[]
],
"setup.py": [
@@ -452810,7 +452852,7 @@
},
"bidi": {
"__init__.py": [
- "6ac8c3394ce73797b351cd71acc7904075485948",
+ "625cd3a6304c4d7d9118aa8071b66aaa970d9182",
[]
],
"browsing_context": {
@@ -453510,7 +453552,7 @@
[]
],
"helpers.py": [
- "e79a31448a323d06f583d35c6ffc9cbeef6d6f44",
+ "b0c065dca1189b711c44d23454760fde0181244c",
[]
],
"html": {
@@ -453548,10 +453590,18 @@
"62067dd1667cd5535d4f90d35ae21474d4481666",
[]
],
+ "cached.py": [
+ "a43410f8856a861c8ad4633e40ea3ba298a5e31c",
+ []
+ ],
"headers.py": [
"ddae62dc6afabfaa9ceca93f5215d4afc5d002ed",
[]
],
+ "must-revalidate.py": [
+ "94f5a795a294c8b17aefb4e29e64cacb5c8e5ddf",
+ []
+ ],
"redirect.py": [
"f2fd1ebd51d4ad5f4ef0582510600eb3731fd2c7",
[]
@@ -463389,7 +463439,7 @@
]
],
"storage-buckets.https.any.js": [
- "24923ffcf8d7f224a525a34d1f110011370c8aee",
+ "4271722a425b7b52f50e53cb99dfa2d512f24d09",
[
"IndexedDB/storage-buckets.https.any.html",
{
@@ -463405,6 +463455,10 @@
[
"script",
"resources/support-promises.js"
+ ],
+ [
+ "script",
+ "/storage/buckets/resources/util.js"
]
]
}
@@ -463424,6 +463478,10 @@
[
"script",
"resources/support-promises.js"
+ ],
+ [
+ "script",
+ "/storage/buckets/resources/util.js"
]
]
}
@@ -463443,6 +463501,10 @@
[
"script",
"resources/support-promises.js"
+ ],
+ [
+ "script",
+ "/storage/buckets/resources/util.js"
]
]
}
@@ -463462,6 +463524,10 @@
[
"script",
"resources/support-promises.js"
+ ],
+ [
+ "script",
+ "/storage/buckets/resources/util.js"
]
]
}
@@ -495400,6 +495466,27 @@
null,
{}
]
+ ],
+ "table-parts-offsets-vertical-lr.tentative.html": [
+ "bdac1f40607d2f63dee3cb8aadf6ac93f450a58c",
+ [
+ null,
+ {}
+ ]
+ ],
+ "table-parts-offsets-vertical-rl.tentative.html": [
+ "9d4a472d4382825c13af35114acc48a3b5face2a",
+ [
+ null,
+ {}
+ ]
+ ],
+ "table-parts-offsets.tentative.html": [
+ "265d761ffb30fd3e99214927a34ee33e3811f977",
+ [
+ null,
+ {}
+ ]
]
},
"transform-010.html": [
@@ -516403,7 +516490,7 @@
]
],
"all-with-discrete.tentative.html": [
- "f12c14e4c55285fd0d5a4c541c7b8b37146165b0",
+ "a048bc7a1cc3958f5b2758369d30b3472771c388",
[
null,
{}
@@ -519527,10 +519614,14 @@
]
},
"appearance-cssom-001.html": [
- "1618c2b8a2825381661d470435f0dae4c3a40b8c",
+ "2da20a0ac923ea5bd975577c67976d63c82afe3b",
[
null,
{}
+ ],
+ [
+ "css/css-ui/appearance-cssom-001.html?exclude=Invalid",
+ {}
]
],
"appearance-initial-value-001.html": [
@@ -560106,7 +560197,7 @@
]
],
"redirect.https.window.js": [
- "f8a53ad1889e61712b98e0794de398307385b299",
+ "edbd5a19fbc963c7b37dedac88e31829d9268421",
[
"fetch/local-network-access/redirect.https.window.html",
{
@@ -562112,6 +562203,108 @@
]
]
},
+ "fledge": {
+ "tentative": {
+ "join-leave-ad-interest-group.https.sub.window.js": [
+ "e967d92618cfce83ad01c421202164bbe49f7a3a",
+ [
+ "fledge/tentative/join-leave-ad-interest-group.https.sub.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/common/utils.js"
+ ],
+ [
+ "script",
+ "resources/fledge-util.js"
+ ]
+ ]
+ }
+ ]
+ ],
+ "no-winner.https.sub.window.js": [
+ "4d24b5738eaaed58c9ef809a291d0a20021fc972",
+ [
+ "fledge/tentative/no-winner.https.sub.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/common/utils.js"
+ ],
+ [
+ "script",
+ "resources/fledge-util.js"
+ ]
+ ]
+ }
+ ]
+ ],
+ "reporting-arguments.https.sub.window.js": [
+ "69b7d2fddda4e2a12f42b9549da8177c5dc0ccf3",
+ [
+ "fledge/tentative/reporting-arguments.https.sub.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/common/utils.js"
+ ],
+ [
+ "script",
+ "resources/fledge-util.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ]
+ ],
+ "send-report-to.https.sub.window.js": [
+ "bb0e7873a7024a562794d257441b038e5256f853",
+ [
+ "fledge/tentative/send-report-to.https.sub.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/common/utils.js"
+ ],
+ [
+ "script",
+ "resources/fledge-util.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ]
+ ]
+ }
+ },
"focus": {
"activeelement-after-calling-window-focus.sub.html": [
"34579fb2a6301bacdc5e069e214d833f59564c59",
@@ -562677,7 +562870,7 @@
]
],
"FileSystemBaseHandle-buckets.https.any.js": [
- "6bb7d7711949de6fdbe014dc38b5a8f3cb77adff",
+ "cd78c5a9508d13912bd8420e52067dd9a1a71701",
[
"fs/FileSystemBaseHandle-buckets.https.any.html",
{
@@ -562692,6 +562885,10 @@
],
[
"script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
+ "script",
"script-tests/FileSystemBaseHandle-buckets.js"
]
]
@@ -562711,6 +562908,10 @@
],
[
"script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
+ "script",
"script-tests/FileSystemBaseHandle-buckets.js"
]
]
@@ -572706,7 +572907,7 @@
]
],
"2d.drawImage.9arg.basic.html": [
- "eddf3c1ea91686c8f8b7f8affc09723fc3548bfc",
+ "80cda234bb886fd868c3cddf483659a5087e9064",
[
null,
{}
@@ -572727,21 +572928,21 @@
]
],
"2d.drawImage.9arg.sourcepos.html": [
- "48ab9376ffbe42bb0c6e2739af696a32c031b58a",
+ "b7487e09991b6794b6ccd1e9cdcf34dd4101cb84",
[
null,
{}
]
],
"2d.drawImage.9arg.sourcesize.html": [
- "5946cb30c9aa6033cdc0b7dd4fe1f302269bc48d",
+ "567b4abfcff06d5a37aed6ae530c7f58673db829",
[
null,
{}
]
],
"2d.drawImage.alpha.html": [
- "36db82e4edb912e7b4ea92f2b5605c19f90c9526",
+ "8926a72c9da80ca7f80661d346fd755912785403",
[
null,
{}
@@ -572762,14 +572963,14 @@
]
],
"2d.drawImage.animated.poster.html": [
- "6afc4e713c4c5942e3cb0fe69cccb83b3094e381",
+ "779397f6b9b8bd5e3e9752e6db0bcea49107cafa",
[
null,
{}
]
],
"2d.drawImage.broken.html": [
- "4b22ffc8ba6a1795f11dba87fd592d107ec2c33a",
+ "7e9f145196369839e4d286d23f226ea1c4b7b847",
[
null,
{}
@@ -572783,21 +572984,21 @@
]
],
"2d.drawImage.clip.html": [
- "fac98fe949d85aa870988c968bbc7c7ae4cb8729",
+ "380620faf34c2badfcaacfb4d8e2e1725134c8f6",
[
null,
{}
]
],
"2d.drawImage.composite.html": [
- "60204a5d27b7259b0cb1306183ed175c5e15d4ad",
+ "7b7deb0f91e2ab0f63263ec9e941b9a5b121fe09",
[
null,
{}
]
],
"2d.drawImage.floatsource.html": [
- "4b715f29feaae425e20bf7b93841219b9df2c658",
+ "02e4626133d80d623c91fee7e95474bdf45c1039",
[
null,
{}
@@ -572839,21 +573040,21 @@
]
],
"2d.drawImage.negativedest.html": [
- "8418f635d4865fa89ef65ff1f15b068d5bbd7859",
+ "1020754fa8f871ceaf878c2f2e5794668e31fd6b",
[
null,
{}
]
],
"2d.drawImage.negativedir.html": [
- "9a42e5af85490f2e66dd898b25519634d1a44672",
+ "e02d0ff439d858660b8efa0483b31ba7f5360a8d",
[
null,
{}
]
],
"2d.drawImage.negativesource.html": [
- "07b154b1f02ebc8a3beb5170633c227bb103d3fd",
+ "f15fc3adcb0f045a1bf968e9c29b851ab3ee4223",
[
null,
{}
@@ -572867,14 +573068,14 @@
]
],
"2d.drawImage.nonfinite.html": [
- "673cd3e64aa21aa65ca483808b424f529b96cf5b",
+ "f1ad616355d4630777e2c6a762b30d4e2a45785d",
[
null,
{}
]
],
"2d.drawImage.nowrap.html": [
- "71b45a52d43763c059a8b6864a5af47ebf004f9f",
+ "3fde82454a878d3d365082640e85144f749ce6d1",
[
null,
{}
@@ -572888,7 +573089,7 @@
]
],
"2d.drawImage.path.html": [
- "7cc5afe094274f7885e857468b629a16f6a34f68",
+ "ebc7040fa4bcf415bc0593b0d33b57a8bcad9ff2",
[
null,
{}
@@ -572909,14 +573110,14 @@
]
],
"2d.drawImage.svg.html": [
- "b01232d447d6c7056d4f6449f5f8a4f16f4607d9",
+ "5464e63e2301ced5d2323d996fec05d597cea420",
[
null,
{}
]
],
"2d.drawImage.transform.html": [
- "c49070e69cbe542c6c437307412117201658678d",
+ "2c8f930262bdfba0c37b7113551030c479ff4983",
[
null,
{}
@@ -572944,14 +573145,14 @@
]
],
"2d.drawImage.zerosource.html": [
- "3831f3cc86494d48ff67a76dacadbc6b92bf7697",
+ "c3ce69d9e0b148bc7ebf3222c95335a034ff233d",
[
null,
{}
]
],
"2d.drawImage.zerosource.image.html": [
- "b37cd4d19da45cc07899a7720ee100b13f67f271",
+ "403df3db463c2297be366d9cfd9aec5bce3b0c1c",
[
null,
{}
@@ -579210,28 +579411,28 @@
]
],
"2d.composite.globalAlpha.image.html": [
- "32c690d9784eb3acd9739eb82d237bcf72de02b1",
+ "cd7ee9cf2a5ea7313a84b0842f71ea3f6ddce4a6",
[
null,
{}
]
],
"2d.composite.globalAlpha.image.worker.js": [
- "010fbd8bfa9d8c9a9194e9bfb274dc02bee0f632",
+ "1c804a3961e4560833f427f3b8eb80a1f1e549c5",
[
"html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.html",
{}
]
],
"2d.composite.globalAlpha.imagepattern.html": [
- "f057141895de4b578f926698f352c543743bc448",
+ "af1ca48e9d894bac428139d7a8cba34cfec896dd",
[
null,
{}
]
],
"2d.composite.globalAlpha.imagepattern.worker.js": [
- "5607972635ead409bea5b29a6b0cd969606dfef5",
+ "58ef4f3b9dcc3cfd14f4c902684c369d548e05f2",
[
"html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.html",
{}
@@ -580224,7 +580425,7 @@
]
],
"2d.drawImage.9arg.basic.html": [
- "e7034126cf900c2268e3498bcef475868b13f260",
+ "508376cd60cf205030b56c3c9fe22135890af549",
[
null,
{
@@ -580233,7 +580434,7 @@
]
],
"2d.drawImage.9arg.basic.worker.js": [
- "244bc90fe7fe8445591cdc4f6ae511c2580ddcab",
+ "36770f779bea8bdf9d21189fe8418737ea03d43f",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.html",
{
@@ -580296,7 +580497,7 @@
]
],
"2d.drawImage.9arg.sourcepos.html": [
- "ce6c758b3c801797282da0d09ccc947d643d497e",
+ "4742fa21220a42968dbde728378a485a9072b345",
[
null,
{
@@ -580305,7 +580506,7 @@
]
],
"2d.drawImage.9arg.sourcepos.worker.js": [
- "1522353ad6ee4e781027f94539c589e486a31e38",
+ "2780240bd883d5d7943adf007a4fc7b2ee57a468",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.html",
{
@@ -580320,7 +580521,7 @@
]
],
"2d.drawImage.9arg.sourcesize.html": [
- "89acdb8e3621ed1fecc2e44f1478d3c5a88a1c2a",
+ "fd1c853b88a34b12278cca3e0880861f862d3007",
[
null,
{
@@ -580329,7 +580530,7 @@
]
],
"2d.drawImage.9arg.sourcesize.worker.js": [
- "6658e217505480b0ad21e88e9f1a7e5250965c8e",
+ "2bb379e7ebb965be523b6d6cd88c0f85676a8042",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.html",
{
@@ -580344,7 +580545,7 @@
]
],
"2d.drawImage.alpha.html": [
- "eb8476f7c3a1ddc2bdf25a46840f10ac7e2ba6e3",
+ "77134adfac58ed035c220028bffd3b576125a95c",
[
null,
{
@@ -580353,7 +580554,7 @@
]
],
"2d.drawImage.alpha.worker.js": [
- "92cb23fe14d02fa669285b1665e2ba1d78c4f358",
+ "07d8d9288df7d645a2be580adaf5ada2a5c6a12d",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.html",
{
@@ -580368,7 +580569,7 @@
]
],
"2d.drawImage.animated.poster.html": [
- "ea4205abd448fdb477a82cc5881033dfc710427d",
+ "2b33b7dd2d7cf39a48046e2cd47ee2bb4918948b",
[
null,
{
@@ -580377,7 +580578,7 @@
]
],
"2d.drawImage.animated.poster.worker.js": [
- "94ca08a075b32350ee7af47f393afe8257dc4f39",
+ "5f246feb2601492aed878d13173352c4b2fa8e56",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.html",
{
@@ -580392,7 +580593,7 @@
]
],
"2d.drawImage.broken.html": [
- "37aae52a53985249a8a1d6cc1b93d2c9d58be209",
+ "d9890f3057b76539da6c2824950868806fe8e72f",
[
null,
{
@@ -580401,7 +580602,7 @@
]
],
"2d.drawImage.broken.worker.js": [
- "d3f1b7e4a1165d1cfcff42eca8e29c0b77e301a6",
+ "51560c443dba32d29706eb744637a4d2b5da248d",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.html",
{
@@ -580440,7 +580641,7 @@
]
],
"2d.drawImage.clip.html": [
- "970cb4d5a5a47a0c97fda39011f6d9b50662400e",
+ "994f601651d4de3e289c306b84671d9bb07978dc",
[
null,
{
@@ -580449,7 +580650,7 @@
]
],
"2d.drawImage.clip.worker.js": [
- "d30a05fa9dbc96fc1f38bbb62c18d7ed4c68c481",
+ "1a462aff68131856f58af8675b25ebb6103a7fdf",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.html",
{
@@ -580464,7 +580665,7 @@
]
],
"2d.drawImage.composite.html": [
- "90afbcbda8b59f9ae211062b3f506295cbc73e86",
+ "b4bc6f39ce9564af23e3df1b8ec185079a51df6e",
[
null,
{
@@ -580473,7 +580674,7 @@
]
],
"2d.drawImage.composite.worker.js": [
- "0c4a7fe10a849cd3edf359e5f1f36a3d4e7e160c",
+ "f6d4a5d284ae29391de3033990c1a3e45d8233d4",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.html",
{
@@ -580488,7 +580689,7 @@
]
],
"2d.drawImage.floatsource.html": [
- "c6a3fbcf005df07513cd43a66b638abf55300ef5",
+ "98ca580e591036c7872b335afd35dbbef014bd85",
[
null,
{
@@ -580497,7 +580698,7 @@
]
],
"2d.drawImage.floatsource.worker.js": [
- "7b16cbb4f5f1d2c0c900912e6e7a1fcf4d0c26a3",
+ "7206099837deca57de41cb359fa13bdb68a6aa04",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.html",
{
@@ -580512,7 +580713,7 @@
]
],
"2d.drawImage.negativedest.html": [
- "1c207673963954f381469bfb98f330aeed491ca2",
+ "bfe2a9c96f64593b1976d7652fc73abc9c35c3eb",
[
null,
{
@@ -580521,7 +580722,7 @@
]
],
"2d.drawImage.negativedest.worker.js": [
- "5ca4d14ef635f56e09affb9e976664fbf6c0a846",
+ "aebbb34b3edd9d1efc42b1c5f0c87bbd04a04595",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.html",
{
@@ -580536,7 +580737,7 @@
]
],
"2d.drawImage.negativedir.html": [
- "af274bf9bcd1803711c2de62dcccb05d135e314d",
+ "46c571f15398d83ecaaeb74883397f627c029c21",
[
null,
{
@@ -580545,7 +580746,7 @@
]
],
"2d.drawImage.negativedir.worker.js": [
- "2a6cc81058d3e3e6442c136a638f0678728b0569",
+ "4bfb5433b8615a68109902f57335b352bec2f039",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.html",
{
@@ -580560,7 +580761,7 @@
]
],
"2d.drawImage.negativesource.html": [
- "5a7b2af7f2a98660530944e34f2cac375b359a3c",
+ "4e60d7e5e91dec508528ceef585876706b8f88b9",
[
null,
{
@@ -580569,7 +580770,7 @@
]
],
"2d.drawImage.negativesource.worker.js": [
- "ada79f9137d865b5864d07597990f7c7ec6cf2d8",
+ "6d0bec1a1dbc096f79494d50be7489e826d10af3",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.html",
{
@@ -580584,7 +580785,7 @@
]
],
"2d.drawImage.nonfinite.html": [
- "4a6a23b0fc39d5d1915ebb3345322067403acc75",
+ "dc932df3cd0283df44b3113dba13906dad657621",
[
null,
{
@@ -580593,7 +580794,7 @@
]
],
"2d.drawImage.nonfinite.worker.js": [
- "a2e77832a20d8cde747939d048038be9b0f2c046",
+ "7dee18058062dcf3e05cfc170ebb494ada38fee2",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.html",
{
@@ -580608,7 +580809,7 @@
]
],
"2d.drawImage.nowrap.html": [
- "a45fa15daedbaa7cf2d1a91807087e0a9ab5cdac",
+ "fc16787978663107fb4caf942b3eb1c684949c09",
[
null,
{
@@ -580617,7 +580818,7 @@
]
],
"2d.drawImage.nowrap.worker.js": [
- "ab3a9367dd3168b4ee0ac36f26d40cefd1bfcba0",
+ "539c6bf9772a5e244360276b6cd51cb301878586",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.html",
{
@@ -580646,7 +580847,7 @@
]
],
"2d.drawImage.path.html": [
- "938c014c7ab2751625a59c8829fa23a6376cb488",
+ "3977880de19735d0f574fd2da763d88acad3dbf1",
[
null,
{
@@ -580655,7 +580856,7 @@
]
],
"2d.drawImage.path.worker.js": [
- "5521290977879fc171c8116cd060e650e11f8131",
+ "5132aa994f1f33df1f90acfed45bbb64c65ba05a",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.html",
{
@@ -580698,7 +580899,7 @@
]
],
"2d.drawImage.svg.html": [
- "559eb9420e624d81e9e923e08729b9a8b9bec53c",
+ "d5317dd00638cb46a26e6999ff9a5561a85b1485",
[
null,
{
@@ -580707,7 +580908,7 @@
]
],
"2d.drawImage.svg.worker.js": [
- "2d832be3636f35944b232742ab406f20a70d5fff",
+ "fda62017c269d1fec944523fab69ddc6e8c4b397",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.html",
{
@@ -580722,7 +580923,7 @@
]
],
"2d.drawImage.transform.html": [
- "e4d905474a4a142400d5b17d5a1abc0bbfc23158",
+ "bdbdb393cf8534f26464b45eb3330886c236fc0a",
[
null,
{
@@ -580731,7 +580932,7 @@
]
],
"2d.drawImage.transform.worker.js": [
- "2fc0caf1c3150a3ed8d9df1e4402cb725e8c751a",
+ "a42f2785164b6621466f82ef0ff2d90160d79f28",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.html",
{
@@ -580784,7 +580985,7 @@
]
],
"2d.drawImage.zerosource.html": [
- "d91a196060893d39d57889e3a880e6370deae645",
+ "bdd68d20080e98e95801f07ce616b448afa84121",
[
null,
{
@@ -580793,7 +580994,7 @@
]
],
"2d.drawImage.zerosource.image.html": [
- "25cd54b57a0f25a41fcc9858eb95c6590456beec",
+ "5a0d4fcda29e36825d9e61b54dd39db52b107a52",
[
null,
{
@@ -580802,7 +581003,7 @@
]
],
"2d.drawImage.zerosource.image.worker.js": [
- "1465d6c1bc274fe341cedb04d5385ae56074202c",
+ "729e0e97a4cd1ec22a3e9635fbe731da7640bdd8",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.html",
{
@@ -580817,7 +581018,7 @@
]
],
"2d.drawImage.zerosource.worker.js": [
- "654e9bdd744ec6f404ec590d03e6e335bebf5c2f",
+ "2655e3e91f51b8bcee1d16a5b61ad0510d978bdd",
[
"html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.html",
{
@@ -606926,6 +607127,13 @@
{}
]
],
+ "selectmenu-value-option.tentative.html": [
+ "bf58630816addcb025ad7ac4e59c5ccfe16aa74f",
+ [
+ null,
+ {}
+ ]
+ ],
"selectmenu-value-selectedOption.tentative.html": [
"3ba7da6b5a2f893f0b5ec71ad25b4b8b5479c729",
[
@@ -608071,7 +608279,7 @@
]
],
"popover-target-element-disabled.html": [
- "92c28a4b6c58d6726533e0c59f580e01448fc06c",
+ "59392f428ae3eacaa476dc0376069dce3831c459",
[
null,
{}
@@ -622712,7 +622920,7 @@
]
],
"loaf-event-listener.html": [
- "6349c28b3202262c444aaefc558620c7baa19ff3",
+ "f866a1dfd83b7af311e3ab9c03be6d19074ab901",
[
null,
{
@@ -622721,7 +622929,7 @@
]
],
"loaf-first-ui-event.html": [
- "f2d8dac3f1179f2ba3d56295d6a44652728f55e6",
+ "b30b645d2fab262e77b922c0d0d075b23d1f844d",
[
null,
{
@@ -635140,14 +635348,14 @@
},
"png": {
"cicp-chunk.html": [
- "4afc262dcf5ead61423a5bea21ae6e6f998a401c",
+ "8add5d602ea0c3478b27fd627e9ad5e9eb465083",
[
null,
{}
]
],
"trns-chunk.html": [
- "652cda0e32089b7ade4e41c0f69a9637177bd9dd",
+ "3a24753382b20b4a1d5803ee64c730427dd62c54",
[
null,
{}
@@ -652890,6 +653098,13 @@
{}
]
],
+ "yield-priority-idle-callbacks.html": [
+ "d47e8c5eba2ed6eca2df695e93a4f1bb7a324b0b",
+ [
+ null,
+ {}
+ ]
+ ],
"yield-priority-posttask.any.js": [
"0700094dcf3679d18099204705c885005e070f74",
[
@@ -656898,7 +657113,7 @@
]
],
"cache-storage-buckets.https.any.js": [
- "0b5ef7b298df64d9df1a79fa7e1fe3cd00178333",
+ "fd59ba464db0305de210fc2935d739b2469ec4ae",
[
"service-workers/cache-storage/cache-storage-buckets.https.any.html",
{
@@ -656917,7 +657132,11 @@
],
[
"script",
- "./resources/test-helpers.js"
+ "resources/test-helpers.js"
+ ],
+ [
+ "script",
+ "/storage/buckets/resources/util.js"
],
[
"timeout",
@@ -656945,7 +657164,11 @@
],
[
"script",
- "./resources/test-helpers.js"
+ "resources/test-helpers.js"
+ ],
+ [
+ "script",
+ "/storage/buckets/resources/util.js"
],
[
"timeout",
@@ -656973,7 +657196,11 @@
],
[
"script",
- "./resources/test-helpers.js"
+ "resources/test-helpers.js"
+ ],
+ [
+ "script",
+ "/storage/buckets/resources/util.js"
],
[
"timeout",
@@ -657001,7 +657228,11 @@
],
[
"script",
- "./resources/test-helpers.js"
+ "resources/test-helpers.js"
+ ],
+ [
+ "script",
+ "/storage/buckets/resources/util.js"
],
[
"timeout",
@@ -663098,6 +663329,15 @@
{}
]
],
+ "SpeechSynthesisEvent-properties.html": [
+ "f6c8f5fc321d8dca382205c741de742711225212",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"SpeechSynthesisUtterance-basics.https.html": [
"2fd394150e941ccbeb8d63b99e598cc53e55446d",
[
@@ -663139,7 +663379,7 @@
"storage": {
"buckets": {
"buckets_storage_policy.tentative.https.any.js": [
- "4aaa02e4be464a34ff02294ba2f6d5898b5904e2",
+ "d6dce3675d0bca18a379518c6ecf2c7ec1310930",
[
"storage/buckets/buckets_storage_policy.tentative.https.any.html",
{
@@ -663149,6 +663389,10 @@
"Buckets API: Tests for bucket storage policies."
],
[
+ "script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
"global",
"window,worker"
]
@@ -663164,6 +663408,10 @@
"Buckets API: Tests for bucket storage policies."
],
[
+ "script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
"global",
"window,worker"
]
@@ -663179,6 +663427,10 @@
"Buckets API: Tests for bucket storage policies."
],
[
+ "script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
"global",
"window,worker"
]
@@ -663194,6 +663446,10 @@
"Buckets API: Tests for bucket storage policies."
],
[
+ "script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
"global",
"window,worker"
]
@@ -663902,7 +664158,7 @@
]
],
"storage-access-permission.sub.https.window.js": [
- "82794061bd013ced4d8a42f3337fddd6a53d6d0a",
+ "f0aadf4828dcb549c0d66ef4745b1e190d56f8d6",
[
"storage-access-api/storage-access-permission.sub.https.window.html",
{
@@ -664523,7 +664779,7 @@
]
],
"general.any.js": [
- "bec3480f65394461dea9cbdda84a5fe4c21e8ed5",
+ "faeb8e321af208543472e2d212c0701faeb09eb6",
[
"streams/piping/general.any.html",
{
@@ -682490,7 +682746,7 @@
]
],
"storage-buckets.tentative.https.any.js": [
- "73cc0ac3725c36929357b702360035edb780c064",
+ "a6b4f59a95d715aaff638a3c2b3a6c9ab3532ab8",
[
"web-locks/storage-buckets.tentative.https.any.html",
{
@@ -682504,6 +682760,10 @@
"resources/helpers.js"
],
[
+ "script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
"global",
"window,dedicatedworker,sharedworker,serviceworker"
]
@@ -682523,6 +682783,10 @@
"resources/helpers.js"
],
[
+ "script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
"global",
"window,dedicatedworker,sharedworker,serviceworker"
]
@@ -682542,6 +682806,10 @@
"resources/helpers.js"
],
[
+ "script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
"global",
"window,dedicatedworker,sharedworker,serviceworker"
]
@@ -682561,6 +682829,10 @@
"resources/helpers.js"
],
[
+ "script",
+ "/storage/buckets/resources/util.js"
+ ],
+ [
"global",
"window,dedicatedworker,sharedworker,serviceworker"
]
@@ -737312,6 +737584,13 @@
]
},
"response_started": {
+ "response_started_cached_tentative.py": [
+ "5022511f792894c6d1be2b72460836747c7181d5",
+ [
+ null,
+ {}
+ ]
+ ],
"response_started_tentative.py": [
"b1a0741f202a95eb3544a22e4e08548fdaef2e7d",
[
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
new file mode 100644
index 00000000000..13bd6abf376
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
@@ -0,0 +1,3 @@
+[hit-test-floats-004.html]
+ [Miss float below something else]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
index 51432362d66..ee34bc91078 100644
--- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
+++ b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
@@ -1,3 +1,6 @@
[block-in-inline-hittest-002.html]
[elementsFromPoint]
expected: FAIL
+
+ [elementFromPoint]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini
deleted file mode 100644
index 3e5096beef3..00000000000
--- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[block-in-inline-hittest-float-002.html]
- [block-in-inline-hittest-float-002]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini b/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini
new file mode 100644
index 00000000000..b8f8d45a31f
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini
@@ -0,0 +1,3 @@
+[hittest-anonymous-box.html]
+ [Hit-testing within an anonymous flex-item should return the flexbox as the hittest result.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-flexbox/hittest-before-pseudo.html.ini b/tests/wpt/metadata/css/css-flexbox/hittest-before-pseudo.html.ini
deleted file mode 100644
index 5b685485f3c..00000000000
--- a/tests/wpt/metadata/css/css-flexbox/hittest-before-pseudo.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[hittest-before-pseudo.html]
- [Hit-testing text within a pseudo-element flex-item should return the flexbox as the hittest result.]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-ui/appearance-cssom-001.html.ini b/tests/wpt/metadata/css/css-ui/appearance-cssom-001.html.ini
index 5a31ee65da0..51ce991b693 100644
--- a/tests/wpt/metadata/css/css-ui/appearance-cssom-001.html.ini
+++ b/tests/wpt/metadata/css/css-ui/appearance-cssom-001.html.ini
@@ -1084,3 +1084,101 @@
[appearance: square-button (compat)]
expected: FAIL
+
+
+[appearance-cssom-001.html?exclude=Invalid]
+ [-webkit-appearance: none]
+ expected: FAIL
+
+ [-webkit-appearance: auto]
+ expected: FAIL
+
+ [-webkit-appearance: textfield]
+ expected: FAIL
+
+ [-webkit-appearance: menulist-button]
+ expected: FAIL
+
+ [-webkit-appearance: button (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: checkbox (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: listbox (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: menulist (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: meter (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: progress-bar (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: radio (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: searchfield (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: textarea (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: slider-horizontal (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: push-button (compat)]
+ expected: FAIL
+
+ [-webkit-appearance: square-button (compat)]
+ expected: FAIL
+
+ [appearance: none]
+ expected: FAIL
+
+ [appearance: auto]
+ expected: FAIL
+
+ [appearance: textfield]
+ expected: FAIL
+
+ [appearance: menulist-button]
+ expected: FAIL
+
+ [appearance: button (compat)]
+ expected: FAIL
+
+ [appearance: checkbox (compat)]
+ expected: FAIL
+
+ [appearance: listbox (compat)]
+ expected: FAIL
+
+ [appearance: menulist (compat)]
+ expected: FAIL
+
+ [appearance: meter (compat)]
+ expected: FAIL
+
+ [appearance: progress-bar (compat)]
+ expected: FAIL
+
+ [appearance: radio (compat)]
+ expected: FAIL
+
+ [appearance: searchfield (compat)]
+ expected: FAIL
+
+ [appearance: textarea (compat)]
+ expected: FAIL
+
+ [appearance: slider-horizontal (compat)]
+ expected: FAIL
+
+ [appearance: push-button (compat)]
+ expected: FAIL
+
+ [appearance: square-button (compat)]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini
new file mode 100644
index 00000000000..f18b8d2fcf9
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini
@@ -0,0 +1,3 @@
+[CaretPosition-001.html]
+ [Element at (400, 100)]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
new file mode 100644
index 00000000000..72b09371038
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
@@ -0,0 +1,3 @@
+[elementFromPoint-001.html]
+ [CSSOM View - 5 - extensions to the Document interface]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini
index cf67b5d03dd..80ed711305d 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini
@@ -1,3 +1,4 @@
[elementFromPoint-dynamic-anon-box.html]
+ expected: CRASH
[Link should be clickable after hiding a scrollbox with an anonymous table inside]
expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini
deleted file mode 100644
index b905fe70fcb..00000000000
--- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[elementFromPoint-ellipsis-in-inline-box.html]
- [elementFromPoint-ellipsis-in-inline-box]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini
deleted file mode 100644
index 7e9331b6bc2..00000000000
--- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[elementFromPoint-float-in-relative.html]
- [elementFromPoint-float-in-relative]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini
index 8ae9bae3500..df64baf81ee 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini
@@ -13,3 +13,6 @@
[<li>Outside 3</li>]
expected: FAIL
+
+ [<li>Image Inside 2</li>]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
index 898f39c4330..9f2a3229231 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
@@ -20,3 +20,6 @@
[test the top of layer]
expected: FAIL
+
+ [test some point of the element: top left corner]
+ expected: FAIL
diff --git a/tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini b/tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini
index e9ab91fc80e..4c1c78640bb 100644
--- a/tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini
@@ -1,3 +1,4 @@
[keepalive.any.html]
+ expected: TIMEOUT
[keepalive in onunload in nested frame in another window]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/api/redirect/redirect-keepalive.any.js.ini b/tests/wpt/metadata/fetch/api/redirect/redirect-keepalive.any.js.ini
new file mode 100644
index 00000000000..c57e48f2078
--- /dev/null
+++ b/tests/wpt/metadata/fetch/api/redirect/redirect-keepalive.any.js.ini
@@ -0,0 +1,2 @@
+[redirect-keepalive.any.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
index ed2ce3392d0..0d48169e3cc 100644
--- a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
@@ -147,8 +147,5 @@
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
expected: FAIL
- [border-image sec-fetch-mode - Not sent to non-trustworthy cross-site destination]
- expected: FAIL
-
- [border-image sec-fetch-site - HTTPS downgrade (header not sent)]
- expected: FAIL
+ [background-image sec-fetch-site - HTTPS downgrade (header not sent)]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini
index 6e9f7acf151..c8a3c8f9e68 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini
@@ -1,6 +1,6 @@
[scroll-restoration-fragment-scrolling-cross-origin.html]
type: testharness
- expected: TIMEOUT
+ expected: ERROR
[Manual scroll restoration should take precedent over scrolling to fragment in cross origin navigation]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini
index 149bcb4ff8c..b8fd22e2b81 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini
@@ -10,3 +10,6 @@
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank']
expected: FAIL
+
+ [load & pageshow events do not fire on contentWindow of <iframe> element created with src='']
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini
index 5aef7ce66ce..324db3d9b35 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini
@@ -10,6 +10,3 @@
[load event does not fire on window.open('about:blank?foo')]
expected: FAIL
-
- [load event does not fire on window.open('about:blank')]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini
index 8ae58f9f1e2..b169452e04a 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini
@@ -10,12 +10,3 @@
[0080 00FF set in href="" targeting a frame and clicked]
expected: FAIL
-
- [0080 00FF 0100 set in href="" targeting a frame and clicked]
- expected: FAIL
-
- [D83D DE0D set in href="" targeting a frame and clicked]
- expected: FAIL
-
- [DE0D 0041 set in href="" targeting a frame and clicked]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
new file mode 100644
index 00000000000..7dc346632a4
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
@@ -0,0 +1,3 @@
+[navigation-unload-same-origin.window.html]
+ [Same-origin navigation started from unload handler must be ignored]
+ 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
deleted file mode 100644
index 60a4fa51f8a..00000000000
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[a-click.html]
- [aElement.click() before the load event must NOT replace]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini
new file mode 100644
index 00000000000..ca84728f1e9
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini
@@ -0,0 +1,4 @@
+[creating_browsing_context_test_01.html]
+ expected: TIMEOUT
+ [first argument: absolute url]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini b/tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini
deleted file mode 100644
index adaff1bb3fe..00000000000
--- a/tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.svg.html]
- [drawImage() of an SVG image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini b/tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
index 76d431df3a0..bea609ed103 100644
--- a/tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.image.html]
[drawImage with zero-sized source rectangle from image throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle from image draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html.ini b/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html.ini
deleted file mode 100644
index 844abdcced8..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.composite.globalAlpha.image.html]
- [OffscreenCanvas test: 2d.composite.globalAlpha.image]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js.ini
deleted file mode 100644
index a66bd4c9607..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.composite.globalAlpha.image.worker.html]
- [2d]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html.ini b/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html.ini
deleted file mode 100644
index 5dd24f42848..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.composite.globalAlpha.imagepattern.html]
- [OffscreenCanvas test: 2d.composite.globalAlpha.imagepattern]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js.ini
deleted file mode 100644
index 1718e787f1c..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.composite.globalAlpha.imagepattern.worker.html]
- [2d]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html.ini
deleted file mode 100644
index f312f1589b8..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.basic.html]
- [OffscreenCanvas test: 2d.drawImage.9arg.basic]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js.ini
deleted file mode 100644
index 2ff0b98dcb5..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.basic.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html.ini
deleted file mode 100644
index 3e8e707a8be..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.sourcepos.html]
- [OffscreenCanvas test: 2d.drawImage.9arg.sourcepos]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js.ini
deleted file mode 100644
index 3ec5cbbadc9..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.sourcepos.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html.ini
deleted file mode 100644
index 44ad1e2efb0..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.sourcesize.html]
- [OffscreenCanvas test: 2d.drawImage.9arg.sourcesize]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js.ini
deleted file mode 100644
index 150dc88d58e..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.9arg.sourcesize.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html.ini
deleted file mode 100644
index 0b04a0d852d..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.alpha.html]
- [OffscreenCanvas test: 2d.drawImage.alpha]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js.ini
deleted file mode 100644
index 93ca873d5aa..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.alpha.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini
deleted file mode 100644
index dba65871688..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.animated.poster.html]
- [drawImage() of an APNG draws the poster frame]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js.ini
deleted file mode 100644
index 19ec8e5782b..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.animated.poster.worker.html]
- [drawImage() of an APNG draws the poster frame]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html.ini
deleted file mode 100644
index 38c46fe7e71..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.broken.html]
- [OffscreenCanvas test: 2d.drawImage.broken]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js.ini
deleted file mode 100644
index b85d2727a7a..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.broken.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html.ini
deleted file mode 100644
index ddc364f4b22..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.clip.html]
- [OffscreenCanvas test: 2d.drawImage.clip]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js.ini
deleted file mode 100644
index f387c1acd65..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.clip.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini
deleted file mode 100644
index 0d1eb846146..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.composite.html]
- [OffscreenCanvas test: 2d.drawImage.composite]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js.ini
deleted file mode 100644
index 14975992b26..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.composite.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html.ini
deleted file mode 100644
index e3c09955f13..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.floatsource.html]
- [OffscreenCanvas test: 2d.drawImage.floatsource]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js.ini
deleted file mode 100644
index 5186c30c1a7..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.floatsource.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html.ini
deleted file mode 100644
index d9c00e020cb..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativedest.html]
- [Negative destination width/height represents the correct rectangle]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js.ini
deleted file mode 100644
index 31b9ec54018..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativedest.worker.html]
- [Negative destination width/height represents the correct rectangle]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html.ini
deleted file mode 100644
index cf30b485857..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativedir.html]
- [Negative dimensions do not affect the direction of the image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js.ini
deleted file mode 100644
index b789fbb639b..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativedir.worker.html]
- [Negative dimensions do not affect the direction of the image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html.ini
deleted file mode 100644
index fe6fe1317b3..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativesource.html]
- [Negative source width/height represents the correct rectangle]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js.ini
deleted file mode 100644
index d20b4175b81..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.negativesource.worker.html]
- [Negative source width/height represents the correct rectangle]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html.ini
deleted file mode 100644
index 968631ac458..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.nonfinite.html]
- [drawImage() with Infinity/NaN is ignored]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js.ini
deleted file mode 100644
index d88e35b08a4..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.nonfinite.worker.html]
- [drawImage() with Infinity/NaN is ignored]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html.ini
deleted file mode 100644
index aac6b35b06d..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.nowrap.html]
- [Stretched images do not get pixels wrapping around the edges]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js.ini
deleted file mode 100644
index 61d2ac9b727..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.nowrap.worker.html]
- [Stretched images do not get pixels wrapping around the edges]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html.ini
deleted file mode 100644
index 0a613ba46a2..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.path.html]
- [OffscreenCanvas test: 2d.drawImage.path]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js.ini
deleted file mode 100644
index e3dc6d5ad67..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.path.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini
deleted file mode 100644
index adaff1bb3fe..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.svg.html]
- [drawImage() of an SVG image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js.ini
deleted file mode 100644
index a97b8b37d07..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.svg.worker.html]
- [drawImage() of an SVG image]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html.ini
deleted file mode 100644
index 43c1fd403c1..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.transform.html]
- [OffscreenCanvas test: 2d.drawImage.transform]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js.ini
deleted file mode 100644
index 864d3b3ba40..00000000000
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[2d.drawImage.transform.worker.html]
- [2d]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini
index efa68741600..d6114b0db21 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.html]
[drawImage with zero-sized source rectangle throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
index 76d431df3a0..bea609ed103 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.image.html]
[drawImage with zero-sized source rectangle from image throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle from image draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini
index 6f5d45f8dd9..2e4d62fc879 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.image.worker.html]
[drawImage with zero-sized source rectangle from image throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle from image draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini
index a9d64261e96..a7f8c7ee0ce 100644
--- a/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini
+++ b/tests/wpt/metadata/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js.ini
@@ -1,7 +1,3 @@
[2d.drawImage.zerosource.worker.html]
[drawImage with zero-sized source rectangle throws INDEX_SIZE_ERR]
expected: FAIL
-
- [drawImage with zero-sized source rectangle draws nothing without exception]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini
new file mode 100644
index 00000000000..09c049e4b58
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini
@@ -0,0 +1,3 @@
+[media_fragment_seek.html]
+ [Video should seek to time specified in media fragment syntax]
+ expected: FAIL
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 f9138fb999a..6f7461b9472 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,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
index 31928ad3947..31745fdcdcf 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
@@ -1,5 +1,4 @@
[sandbox-top-navigation-child-special-cases.tentative.sub.window.html]
- expected: TIMEOUT
[Allow top with user activation + user activation]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
index 3cdeb8ebcbc..47b45e65a1c 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
@@ -1,3 +1,9 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
+
+ [createHTMLDocument]
+ expected: FAIL
+
+ [<template>]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html.ini b/tests/wpt/metadata/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html.ini
new file mode 100644
index 00000000000..693bd4e2994
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html.ini
@@ -0,0 +1,3 @@
+[selectmenu-value-option.tentative.html]
+ [selectmenu.value should reflect option.value]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.html.ini b/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.html.ini
index a6015cfed6b..0273c7dae9a 100644
--- a/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.html.ini
+++ b/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.html.ini
@@ -16,3 +16,9 @@
[Disconnecting popover*target buttons when popovers are open should close all popovers.]
expected: FAIL
+
+ [Changing the popovertarget attribute to break the chain should close all popovers.]
+ expected: FAIL
+
+ [Modifying popovertarget on a button which doesn't break the chain shouldn't close any popovers.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini
deleted file mode 100644
index 1181798bd79..00000000000
--- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[async-script.html]
-
-[async-script.html?reload]
- expected: ERROR
diff --git a/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini
new file mode 100644
index 00000000000..b8bdf33cb65
--- /dev/null
+++ b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini
@@ -0,0 +1,3 @@
+[DOMContentLoaded-defer.html]
+ [The end: DOMContentLoaded and defer scripts]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini
deleted file mode 100644
index fc0233f5241..00000000000
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[module-delayed.html]
- [async document.write in a module]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini
new file mode 100644
index 00000000000..f9a4f08cd70
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini
@@ -0,0 +1,3 @@
+[module-tla-delayed.html]
+ [document.write in an imported module]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
index 7237f5792de..dbe1def99e3 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
@@ -1,10 +1,9 @@
[promise-job-entry-different-function-realm.html]
- expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
- expected: TIMEOUT
+ expected: FAIL
[Thenable resolution]
expected: FAIL
@@ -13,4 +12,4 @@
expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
index 1d71471b73c..4a48dd15a9d 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini
@@ -1,7 +1,6 @@
[promise-rejection-events.html]
- expected: TIMEOUT
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
- expected: TIMEOUT
+ expected: FAIL
[unhandledrejection: from createImageBitmap which is UA triggered]
expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/response-status-code.html.ini b/tests/wpt/metadata/resource-timing/response-status-code.html.ini
index b84e3cf7b11..38df5f01300 100644
--- a/tests/wpt/metadata/resource-timing/response-status-code.html.ini
+++ b/tests/wpt/metadata/resource-timing/response-status-code.html.ini
@@ -265,10 +265,10 @@
expected: FAIL
[This test validates the response status of resources. 88]
- expected: TIMEOUT
+ expected: FAIL
[This test validates the response status of resources. 89]
- expected: NOTRUN
+ expected: TIMEOUT
[This test validates the response status of resources. 90]
expected: NOTRUN
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index 20a8f9a4320..1f70062991c 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
- expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
new file mode 100644
index 00000000000..b7b36c1d3a4
--- /dev/null
+++ b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini
@@ -0,0 +1,4 @@
+[018.html]
+ expected: TIMEOUT
+ [origin of the script that invoked the method, javascript:]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata/webmessaging/without-ports/017.html.ini
deleted file mode 100644
index c7946fc91b4..00000000000
--- a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[017.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, about:blank]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
new file mode 100644
index 00000000000..80f9a4f15b8
--- /dev/null
+++ b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
@@ -0,0 +1,2 @@
+[Worker-constructor.html]
+ expected: ERROR
diff --git a/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini b/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini
deleted file mode 100644
index 77ca6b0688d..00000000000
--- a/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[stylesheet_media_queries.html]
- [Media queries within stylesheets]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini b/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini
new file mode 100644
index 00000000000..6ef3d276974
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini
@@ -0,0 +1,6 @@
+[task_queue_throttling.any.html]
+ [Throttling the performance timeline task queue.]
+ expected: FAIL
+
+
+[task_queue_throttling.any.worker.html]
diff --git a/tests/wpt/web-platform-tests/IndexedDB/storage-buckets.https.any.js b/tests/wpt/web-platform-tests/IndexedDB/storage-buckets.https.any.js
index 24923ffcf8d..4271722a425 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/storage-buckets.https.any.js
+++ b/tests/wpt/web-platform-tests/IndexedDB/storage-buckets.https.any.js
@@ -1,14 +1,12 @@
// META: title=Buckets API: Tests for indexedDB API.
// META: global=window,worker
// META: script=resources/support-promises.js
+// META: script=/storage/buckets/resources/util.js
promise_test(async testCase => {
+ await prepareForBucketTest(testCase);
const inboxBucket = await navigator.storageBuckets.open('inbox_bucket');
const outboxBucket = await navigator.storageBuckets.open('outbox_bucket');
- testCase.add_cleanup(async () => {
- await navigator.storageBuckets.delete('inbox_bucket');
- await navigator.storageBuckets.delete('outbox_bucket');
- });
// Set up similar databases in two buckets.
const inboxDb = await new Promise((resolve, reject) => {
@@ -77,6 +75,7 @@ promise_test(async testCase => {
}, 'Basic test that buckets create independent databases.');
promise_test(async testCase => {
+ await prepareForBucketTest(testCase);
const inboxBucket = await navigator.storageBuckets.open('inbox');
await navigator.storageBuckets.delete('inbox');
diff --git a/tests/wpt/web-platform-tests/annotation-model/tools/make_tests.py b/tests/wpt/web-platform-tests/annotation-model/tools/make_tests.py
index e8bb1aec5a7..6890baa2961 100644
--- a/tests/wpt/web-platform-tests/annotation-model/tools/make_tests.py
+++ b/tests/wpt/web-platform-tests/annotation-model/tools/make_tests.py
@@ -1,8 +1,6 @@
# This tool creates .html test files for the WPT harness from corresponding .test
# files that it finds in the tree for this test collection.
-from __future__ import print_function
-
import re
import time
import json
diff --git a/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py b/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py
index e5d12100017..fc8fa749977 100644
--- a/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py
+++ b/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py
@@ -5,8 +5,6 @@
# Developed by Benjamin Young (@bigbulehat) and Shane McCarron (@halindrome).
# Sponsored by Spec-Ops (https://spec-ops.io)
-from __future__ import print_function
-
import os
import sys
diff --git a/tests/wpt/web-platform-tests/annotation-vocab/tools/vocab_tester.py b/tests/wpt/web-platform-tests/annotation-vocab/tools/vocab_tester.py
index 7d9cc5b8a2e..86453a7a299 100644
--- a/tests/wpt/web-platform-tests/annotation-vocab/tools/vocab_tester.py
+++ b/tests/wpt/web-platform-tests/annotation-vocab/tools/vocab_tester.py
@@ -3,8 +3,6 @@
# License: Apache2
# Last Modified: 2016-09-02
-from __future__ import print_function
-
import json
from rdflib import ConjunctiveGraph, URIRef
from pyld import jsonld
diff --git a/tests/wpt/web-platform-tests/common/security-features/tools/generate.py b/tests/wpt/web-platform-tests/common/security-features/tools/generate.py
index 176e0ebbebc..409b4f195ff 100755
--- a/tests/wpt/web-platform-tests/common/security-features/tools/generate.py
+++ b/tests/wpt/web-platform-tests/common/security-features/tools/generate.py
@@ -1,7 +1,5 @@
#!/usr/bin/env python3
-from __future__ import print_function
-
import argparse
import collections
import copy
diff --git a/tests/wpt/web-platform-tests/common/security-features/tools/spec_validator.py b/tests/wpt/web-platform-tests/common/security-features/tools/spec_validator.py
index 3ac3f530169..f8a1390ef0d 100755
--- a/tests/wpt/web-platform-tests/common/security-features/tools/spec_validator.py
+++ b/tests/wpt/web-platform-tests/common/security-features/tools/spec_validator.py
@@ -1,7 +1,5 @@
#!/usr/bin/env python3
-from __future__ import print_function
-
import json, sys
diff --git a/tests/wpt/web-platform-tests/common/security-features/tools/util.py b/tests/wpt/web-platform-tests/common/security-features/tools/util.py
index 72541c78142..5da06f9d51e 100644
--- a/tests/wpt/web-platform-tests/common/security-features/tools/util.py
+++ b/tests/wpt/web-platform-tests/common/security-features/tools/util.py
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
import os, sys, json, json5, re
import collections
diff --git a/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets-vertical-lr.tentative.html b/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets-vertical-lr.tentative.html
new file mode 100644
index 00000000000..bdac1f40607
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets-vertical-lr.tentative.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/css-break-3/#box-splitting">
+<link rel="help" href="https://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface">
+<div
+ style="column-width:200px; column-gap: 0; column-fill:auto; width:70px; height:600px; background:yellow; writing-mode: vertical-lr;">
+ <div id="table" style="display:table; border-spacing:7px; border:2px solid; padding:1px;">
+ <div id="colgroup" style="display:table-column-group;">
+ <div id="col" style="display:table-column;"></div>
+ <div id="col2" style="display:table-column;"></div>
+ </div>
+ <div id="colgroup2" style="display:table-column-group;">
+ <div id="col3" style="display:table-column;"></div>
+ </div>
+ <div id="rowgroup" style="display:table-row-group;">
+ <div id="row" style="display:table-row;">
+ <div id="cell" style="display:table-cell;">
+ <div id="content" style="width:100px; height:50px; background:blue;"></div>
+ </div>
+ <div id="cell2" style="display:table-cell;">
+ <div id="content2" style="width:100px; height:50px; background:blue;"></div>
+ </div>
+ <div id="cell3" style="display:table-cell;">
+ <div id="content3" style="width:100px; height:50px; background:blue;"></div>
+ </div>
+ </div>
+ <div id="row2" style="display:table-row;">
+ <div id="cell4" style="display:table-cell;">
+ <div id="content4" style="width:50px; height: 50px; background: blue;"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ test(() => {
+ assert_equals(table.offsetTop, 8, "offsetTop");
+ assert_equals(table.offsetLeft, 8, "offsetLeft");
+ assert_equals(table.offsetWidth, 177, "offsetWidth");
+ assert_equals(table.offsetHeight, 184, "offsetHeight");
+ }, "table");
+ test(() => {
+ assert_equals(colgroup.offsetTop, 18, "offsetTop");
+ assert_equals(colgroup.offsetLeft, 18, "offsetLeft");
+ assert_equals(colgroup.offsetWidth, 157, "offsetWidth");
+ assert_equals(colgroup.offsetHeight, 107, "offsetHeight");
+ }, "colgroup");
+ test(() => {
+ assert_equals(col.offsetTop, 18, "offsetTop");
+ assert_equals(col.offsetLeft, 18, "offsetLeft");
+ assert_equals(col.offsetWidth, 157, "offsetWidth");
+ assert_equals(col.offsetHeight, 50, "offsetHeight");
+ }, "col");
+ test(() => {
+ assert_equals(col2.offsetTop, 75, "offsetTop");
+ assert_equals(col2.offsetLeft, 18, "offsetLeft");
+ assert_equals(col2.offsetWidth, 157, "offsetWidth");
+ assert_equals(col2.offsetHeight, 50, "offsetHeight");
+ }, "col2");
+ test(() => {
+ assert_equals(colgroup2.offsetTop, 132, "offsetTop");
+ assert_equals(colgroup2.offsetLeft, 18, "offsetLeft");
+ assert_equals(colgroup2.offsetWidth, 157, "offsetWidth");
+ assert_equals(colgroup2.offsetHeight, 50, "offsetHeight");
+ }, "colgroup2");
+ test(() => {
+ assert_equals(col3.offsetTop, 132, "offsetTop");
+ assert_equals(col3.offsetLeft, 18, "offsetLeft");
+ assert_equals(col3.offsetWidth, 157, "offsetWidth");
+ assert_equals(col3.offsetHeight, 50, "offsetHeight");
+ }, "col3");
+ test(() => {
+ assert_equals(rowgroup.offsetTop, 18, "offsetTop");
+ assert_equals(rowgroup.offsetLeft, 18, "offsetLeft");
+ assert_equals(rowgroup.offsetWidth, 157, "offsetWidth");
+ assert_equals(rowgroup.offsetHeight, 164, "offsetHeight");
+ }, "rowgroup");
+ test(() => {
+ assert_equals(row.offsetTop, 18, "offsetTop");
+ assert_equals(row.offsetLeft, 18, "offsetLeft");
+ assert_equals(row.offsetWidth, 100, "offsetWidth");
+ assert_equals(row.offsetHeight, 164, "offsetHeight");
+ }, "row");
+ test(() => {
+ assert_equals(cell.offsetTop, 18, "offsetTop");
+ assert_equals(cell.offsetLeft, 18, "offsetLeft");
+ assert_equals(cell.offsetWidth, 100, "offsetWidth");
+ assert_equals(cell.offsetHeight, 50, "offsetHeight");
+ }, "cell");
+ test(() => {
+ assert_equals(content.offsetTop, 18, "offsetTop");
+ assert_equals(content.offsetLeft, 18, "offsetLeft");
+ assert_equals(content.offsetWidth, 100, "offsetWidth");
+ assert_equals(content.offsetHeight, 50, "offsetHeight");
+ }, "content");
+ test(() => {
+ assert_equals(cell2.offsetTop, 75, "offsetTop");
+ assert_equals(cell2.offsetLeft, 18, "offsetLeft");
+ assert_equals(cell2.offsetWidth, 100, "offsetWidth");
+ assert_equals(cell2.offsetHeight, 50, "offsetHeight");
+ }, "cell2");
+ test(() => {
+ assert_equals(content2.offsetTop, 75, "offsetTop");
+ assert_equals(content2.offsetLeft, 18, "offsetLeft");
+ assert_equals(content2.offsetWidth, 100, "offsetWidth");
+ assert_equals(content2.offsetHeight, 50, "offsetHeight");
+ }, "content2");
+ test(() => {
+ assert_equals(cell3.offsetTop, 132, "offsetTop");
+ assert_equals(cell3.offsetLeft, 18, "offsetLeft");
+ assert_equals(cell3.offsetWidth, 100, "offsetWidth");
+ assert_equals(cell3.offsetHeight, 50, "offsetHeight");
+ }, "cell3");
+ test(() => {
+ assert_equals(content3.offsetTop, 132, "offsetTop");
+ assert_equals(content3.offsetLeft, 18, "offsetLeft");
+ assert_equals(content3.offsetWidth, 100, "offsetWidth");
+ assert_equals(content3.offsetHeight, 50, "offsetHeight");
+ }, "content3");
+ test(() => {
+ assert_equals(row2.offsetTop, 218, "offsetTop");
+ assert_equals(row2.offsetLeft, 55, "offsetLeft");
+ assert_equals(row2.offsetWidth, 50, "offsetWidth");
+ assert_equals(row2.offsetHeight, 164, "offsetHeight");
+ }, "row2");
+ test(() => {
+ assert_equals(cell4.offsetTop, 218, "offsetTop");
+ assert_equals(cell4.offsetLeft, 55, "offsetLeft");
+ assert_equals(cell4.offsetWidth, 50, "offsetWidth");
+ assert_equals(cell4.offsetHeight, 50, "offsetHeight");
+ }, "cell4");
+ test(() => {
+ assert_equals(content4.offsetTop, 218, "offsetTop");
+ assert_equals(content4.offsetLeft, 55, "offsetLeft");
+ assert_equals(content4.offsetWidth, 50, "offsetWidth");
+ assert_equals(content4.offsetHeight, 50, "offsetHeight");
+ }, "content4");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets-vertical-rl.tentative.html b/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets-vertical-rl.tentative.html
new file mode 100644
index 00000000000..9d4a472d438
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets-vertical-rl.tentative.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/css-break-3/#box-splitting">
+<link rel="help" href="https://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface">
+<div
+ style="column-width:200px; column-gap: 0; column-fill:auto; width:70px; height:600px; background:yellow; writing-mode: vertical-rl;">
+ <div id="table" style="display:table; border-spacing:7px; border:2px solid; padding:1px;">
+ <div id="colgroup" style="display:table-column-group;">
+ <div id="col" style="display:table-column;"></div>
+ <div id="col2" style="display:table-column;"></div>
+ </div>
+ <div id="colgroup2" style="display:table-column-group;">
+ <div id="col3" style="display:table-column;"></div>
+ </div>
+ <div id="rowgroup" style="display:table-row-group;">
+ <div id="row" style="display:table-row;">
+ <div id="cell" style="display:table-cell;">
+ <div id="content" style="width:100px; height:50px; background:blue;"></div>
+ </div>
+ <div id="cell2" style="display:table-cell;">
+ <div id="content2" style="width:100px; height:50px; background:blue;"></div>
+ </div>
+ <div id="cell3" style="display:table-cell;">
+ <div id="content3" style="width:100px; height:50px; background:blue;"></div>
+ </div>
+ </div>
+ <div id="row2" style="display:table-row;">
+ <div id="cell4" style="display:table-cell;">
+ <div id="content4" style="width:50px; height: 50px; background: blue;"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ test(() => {
+ assert_equals(table.offsetTop, 408, "offsetTop");
+ assert_equals(table.offsetLeft, 41, "offsetLeft");
+ assert_equals(table.offsetWidth, 177, "offsetWidth");
+ assert_equals(table.offsetHeight, 184, "offsetHeight");
+ }, "table");
+ test(() => {
+ assert_equals(colgroup.offsetTop, 418, "offsetTop");
+ assert_equals(colgroup.offsetLeft, 51, "offsetLeft");
+ assert_equals(colgroup.offsetWidth, 157, "offsetWidth");
+ assert_equals(colgroup.offsetHeight, 107, "offsetHeight");
+ }, "colgroup");
+ test(() => {
+ assert_equals(col.offsetTop, 418, "offsetTop");
+ assert_equals(col.offsetLeft, 51, "offsetLeft");
+ assert_equals(col.offsetWidth, 157, "offsetWidth");
+ assert_equals(col.offsetHeight, 50, "offsetHeight");
+ }, "col");
+ test(() => {
+ assert_equals(col2.offsetTop, 475, "offsetTop");
+ assert_equals(col2.offsetLeft, 51, "offsetLeft");
+ assert_equals(col2.offsetWidth, 157, "offsetWidth");
+ assert_equals(col2.offsetHeight, 50, "offsetHeight");
+ }, "col2");
+ test(() => {
+ assert_equals(colgroup2.offsetTop, 532, "offsetTop");
+ assert_equals(colgroup2.offsetLeft, 51, "offsetLeft");
+ assert_equals(colgroup2.offsetWidth, 157, "offsetWidth");
+ assert_equals(colgroup2.offsetHeight, 50, "offsetHeight");
+ }, "colgroup2");
+ test(() => {
+ assert_equals(col3.offsetTop, 532, "offsetTop");
+ assert_equals(col3.offsetLeft, 51, "offsetLeft");
+ assert_equals(col3.offsetWidth, 157, "offsetWidth");
+ assert_equals(col3.offsetHeight, 50, "offsetHeight");
+ }, "col3");
+ test(() => {
+ assert_equals(rowgroup.offsetTop, 418, "offsetTop");
+ assert_equals(rowgroup.offsetLeft, 51, "offsetLeft");
+ assert_equals(rowgroup.offsetWidth, 157, "offsetWidth");
+ assert_equals(rowgroup.offsetHeight, 164, "offsetHeight");
+ }, "rowgroup");
+ test(() => {
+ assert_equals(row.offsetTop, 218, "offsetTop");
+ assert_equals(row.offsetLeft, 38, "offsetLeft");
+ assert_equals(row.offsetWidth, 100, "offsetWidth");
+ assert_equals(row.offsetHeight, 164, "offsetHeight");
+ }, "row");
+ test(() => {
+ assert_equals(cell.offsetTop, 218, "offsetTop");
+ assert_equals(cell.offsetLeft, 38, "offsetLeft");
+ assert_equals(cell.offsetWidth, 100, "offsetWidth");
+ assert_equals(cell.offsetHeight, 50, "offsetHeight");
+ }, "cell");
+ test(() => {
+ assert_equals(content.offsetTop, 218, "offsetTop");
+ assert_equals(content.offsetLeft, 38, "offsetLeft");
+ assert_equals(content.offsetWidth, 100, "offsetWidth");
+ assert_equals(content.offsetHeight, 50, "offsetHeight");
+ }, "content");
+ test(() => {
+ assert_equals(cell2.offsetTop, 275, "offsetTop");
+ assert_equals(cell2.offsetLeft, 38, "offsetLeft");
+ assert_equals(cell2.offsetWidth, 100, "offsetWidth");
+ assert_equals(cell2.offsetHeight, 50, "offsetHeight");
+ }, "cell2");
+ test(() => {
+ assert_equals(content2.offsetTop, 275, "offsetTop");
+ assert_equals(content2.offsetLeft, 38, "offsetLeft");
+ assert_equals(content2.offsetWidth, 100, "offsetWidth");
+ assert_equals(content2.offsetHeight, 50, "offsetHeight");
+ }, "content2");
+ test(() => {
+ assert_equals(cell3.offsetTop, 332, "offsetTop");
+ assert_equals(cell3.offsetLeft, 38, "offsetLeft");
+ assert_equals(cell3.offsetWidth, 100, "offsetWidth");
+ assert_equals(cell3.offsetHeight, 50, "offsetHeight");
+ }, "cell3");
+ test(() => {
+ assert_equals(content3.offsetTop, 332, "offsetTop");
+ assert_equals(content3.offsetLeft, 38, "offsetLeft");
+ assert_equals(content3.offsetWidth, 100, "offsetWidth");
+ assert_equals(content3.offsetHeight, 50, "offsetHeight");
+ }, "content3");
+ test(() => {
+ assert_equals(row2.offsetTop, 418, "offsetTop");
+ assert_equals(row2.offsetLeft, 51, "offsetLeft");
+ assert_equals(row2.offsetWidth, 50, "offsetWidth");
+ assert_equals(row2.offsetHeight, 164, "offsetHeight");
+ }, "row2");
+ test(() => {
+ assert_equals(cell4.offsetTop, 418, "offsetTop");
+ assert_equals(cell4.offsetLeft, 51, "offsetLeft");
+ assert_equals(cell4.offsetWidth, 50, "offsetWidth");
+ assert_equals(cell4.offsetHeight, 50, "offsetHeight");
+ }, "cell4");
+ test(() => {
+ assert_equals(content4.offsetTop, 418, "offsetTop");
+ assert_equals(content4.offsetLeft, 51, "offsetLeft");
+ assert_equals(content4.offsetWidth, 50, "offsetWidth");
+ assert_equals(content4.offsetHeight, 50, "offsetHeight");
+ }, "content4");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets.tentative.html b/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets.tentative.html
new file mode 100644
index 00000000000..265d761ffb3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-break/table/table-parts-offsets.tentative.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/css-break-3/#box-splitting">
+<link rel="help" href="https://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface">
+<div style="column-width:200px; column-gap: 0; column-fill:auto; height:70px; width:600px; background:yellow;">
+ <div id="table" style="display:table; border-spacing:7px; border:2px solid; padding:1px;">
+ <div id="colgroup" style="display:table-column-group;">
+ <div id="col" style="display:table-column;"></div>
+ <div id="col2" style="display:table-column;"></div>
+ </div>
+ <div id="colgroup2" style="display:table-column-group;">
+ <div id="col3" style="display:table-column;"></div>
+ </div>
+ <div id="rowgroup" style="display:table-row-group;">
+ <div id="row" style="display:table-row;">
+ <div id="cell" style="display:table-cell;">
+ <div id="content" style="width:50px; height:100px; background:blue;"></div>
+ </div>
+ <div id="cell2" style="display:table-cell;">
+ <div id="content2" style="width:50px; height:100px; background:blue;"></div>
+ </div>
+ <div id="cell3" style="display:table-cell;">
+ <div id="content3" style="width:50px; height:100px; background:blue;"></div>
+ </div>
+ </div>
+ <div id="row2" style="display:table-row;">
+ <div id="cell4" style="display:table-cell;">
+ <div id="content4" style="width:50px; height: 50px; background: blue;"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ test(() => {
+ assert_equals(table.offsetTop, 8, "offsetTop");
+ assert_equals(table.offsetLeft, 8, "offsetLeft");
+ assert_equals(table.offsetWidth, 184, "offsetWidth");
+ assert_equals(table.offsetHeight, 177, "offsetHeight");
+ }, "table");
+ test(() => {
+ assert_equals(colgroup.offsetTop, 18, "offsetTop");
+ assert_equals(colgroup.offsetLeft, 18, "offsetLeft");
+ assert_equals(colgroup.offsetWidth, 107, "offsetWidth");
+ assert_equals(colgroup.offsetHeight, 157, "offsetHeight");
+ }, "colgroup");
+ test(() => {
+ assert_equals(col.offsetTop, 18, "offsetTop");
+ assert_equals(col.offsetLeft, 18, "offsetLeft");
+ assert_equals(col.offsetWidth, 50, "offsetWidth");
+ assert_equals(col.offsetHeight, 157, "offsetHeight");
+ }, "col");
+ test(() => {
+ assert_equals(col2.offsetTop, 18, "offsetTop");
+ assert_equals(col2.offsetLeft, 75, "offsetLeft");
+ assert_equals(col2.offsetWidth, 50, "offsetWidth");
+ assert_equals(col2.offsetHeight, 157, "offsetHeight");
+ }, "col2");
+ test(() => {
+ assert_equals(colgroup2.offsetTop, 18, "offsetTop");
+ assert_equals(colgroup2.offsetLeft, 132, "offsetLeft");
+ assert_equals(colgroup2.offsetWidth, 50, "offsetWidth");
+ assert_equals(colgroup2.offsetHeight, 157, "offsetHeight");
+ }, "colgroup2");
+ test(() => {
+ assert_equals(col3.offsetTop, 18, "offsetTop");
+ assert_equals(col3.offsetLeft, 132, "offsetLeft");
+ assert_equals(col3.offsetWidth, 50, "offsetWidth");
+ assert_equals(col3.offsetHeight, 157, "offsetHeight");
+ }, "col3");
+ test(() => {
+ assert_equals(rowgroup.offsetTop, 18, "offsetTop");
+ assert_equals(rowgroup.offsetLeft, 18, "offsetLeft");
+ assert_equals(rowgroup.offsetWidth, 164, "offsetWidth");
+ assert_equals(rowgroup.offsetHeight, 157, "offsetHeight");
+ }, "rowgroup");
+ test(() => {
+ assert_equals(row.offsetTop, 18, "offsetTop");
+ assert_equals(row.offsetLeft, 18, "offsetLeft");
+ assert_equals(row.offsetWidth, 164, "offsetWidth");
+ assert_equals(row.offsetHeight, 100, "offsetHeight");
+ }, "row");
+ test(() => {
+ assert_equals(cell.offsetTop, 18, "offsetTop");
+ assert_equals(cell.offsetLeft, 18, "offsetLeft");
+ assert_equals(cell.offsetWidth, 50, "offsetWidth");
+ assert_equals(cell.offsetHeight, 100, "offsetHeight");
+ }, "cell");
+ test(() => {
+ assert_equals(content.offsetTop, 18, "offsetTop");
+ assert_equals(content.offsetLeft, 18, "offsetLeft");
+ assert_equals(content.offsetWidth, 50, "offsetWidth");
+ assert_equals(content.offsetHeight, 100, "offsetHeight");
+ }, "content");
+ test(() => {
+ assert_equals(cell2.offsetTop, 18, "offsetTop");
+ assert_equals(cell2.offsetLeft, 75, "offsetLeft");
+ assert_equals(cell2.offsetWidth, 50, "offsetWidth");
+ assert_equals(cell2.offsetHeight, 100, "offsetHeight");
+ }, "cell2");
+ test(() => {
+ assert_equals(content2.offsetTop, 18, "offsetTop");
+ assert_equals(content2.offsetLeft, 75, "offsetLeft");
+ assert_equals(content2.offsetWidth, 50, "offsetWidth");
+ assert_equals(content2.offsetHeight, 100, "offsetHeight");
+ }, "content2");
+ test(() => {
+ assert_equals(cell3.offsetTop, 18, "offsetTop");
+ assert_equals(cell3.offsetLeft, 132, "offsetLeft");
+ assert_equals(cell3.offsetWidth, 50, "offsetWidth");
+ assert_equals(cell3.offsetHeight, 100, "offsetHeight");
+ }, "cell3");
+ test(() => {
+ assert_equals(content3.offsetTop, 18, "offsetTop");
+ assert_equals(content3.offsetLeft, 132, "offsetLeft");
+ assert_equals(content3.offsetWidth, 50, "offsetWidth");
+ assert_equals(content3.offsetHeight, 100, "offsetHeight");
+ }, "content3");
+ test(() => {
+ assert_equals(row2.offsetTop, 55, "offsetTop");
+ assert_equals(row2.offsetLeft, 218, "offsetLeft");
+ assert_equals(row2.offsetWidth, 164, "offsetWidth");
+ assert_equals(row2.offsetHeight, 50, "offsetHeight");
+ }, "row2");
+ test(() => {
+ assert_equals(cell4.offsetTop, 55, "offsetTop");
+ assert_equals(cell4.offsetLeft, 218, "offsetLeft");
+ assert_equals(cell4.offsetWidth, 50, "offsetWidth");
+ assert_equals(cell4.offsetHeight, 50, "offsetHeight");
+ }, "cell4");
+ test(() => {
+ assert_equals(content4.offsetTop, 55, "offsetTop");
+ assert_equals(content4.offsetLeft, 218, "offsetLeft");
+ assert_equals(content4.offsetWidth, 50, "offsetWidth");
+ assert_equals(content4.offsetHeight, 50, "offsetHeight");
+ }, "content4");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/support/fonts/makegsubfonts.py b/tests/wpt/web-platform-tests/css/css-fonts/support/fonts/makegsubfonts.py
index e519b4936de..b46fa0e632b 100644
--- a/tests/wpt/web-platform-tests/css/css-fonts/support/fonts/makegsubfonts.py
+++ b/tests/wpt/web-platform-tests/css/css-fonts/support/fonts/makegsubfonts.py
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
import os
import textwrap
from xml.etree import ElementTree
diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-line-height-tests.py b/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-line-height-tests.py
index 12fb6a3ad85..e2a4457f38e 100644
--- a/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-line-height-tests.py
+++ b/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-line-height-tests.py
@@ -8,8 +8,6 @@ script outputs a list of all tests it generated in the format of Mozilla
reftest.list to the stdout.
"""
-from __future__ import unicode_literals, print_function, absolute_import
-
TEST_FILE = 'text-emphasis-line-height-{:03}{}.html'
TEST_TEMPLATE = '''<!DOCTYPE html>
<meta charset="utf-8">
diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-position-property-tests.py b/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-position-property-tests.py
index 52795906876..f2baf023325 100644
--- a/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-position-property-tests.py
+++ b/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-position-property-tests.py
@@ -9,8 +9,6 @@ test files are generated by this script. It also outputs a list of all
tests it generated in the format of Mozilla reftest.list to the stdout.
"""
-from __future__ import unicode_literals, print_function, absolute_import
-
import itertools
TEST_FILE = 'text-emphasis-position-property-{:03}{}.html'
diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-ruby-tests.py b/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-ruby-tests.py
index fdbaec052e4..f1158f5f843 100644
--- a/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-ruby-tests.py
+++ b/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-ruby-tests.py
@@ -7,8 +7,6 @@ emphasis marks with ruby in four directions. It outputs a list of all
tests it generated in the format of Mozilla reftest.list to the stdout.
"""
-from __future__ import unicode_literals, print_function, absolute_import
-
TEST_FILE = 'text-emphasis-ruby-{:03}{}.html'
TEST_TEMPLATE = '''<!DOCTYPE html>
<meta charset="utf-8">
diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-style-property-tests.py b/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-style-property-tests.py
index 1b1d6fc16f2..b6ad1f7291b 100644
--- a/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-style-property-tests.py
+++ b/tests/wpt/web-platform-tests/css/css-text-decor/tools/generate-text-emphasis-style-property-tests.py
@@ -8,8 +8,6 @@ and <string>, with horizontal writing mode. It outputs a list of all
tests it generated in the format of Mozilla reftest.list to the stdout.
"""
-from __future__ import unicode_literals, print_function, absolute_import
-
TEST_FILE = 'text-emphasis-style-property-{:03}{}.html'
TEST_TEMPLATE = '''<!DOCTYPE html>
<meta charset="utf-8">
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/tools/generate-segment-break-transformation-rules-tests.py b/tests/wpt/web-platform-tests/css/css-text/line-breaking/tools/generate-segment-break-transformation-rules-tests.py
index fc894161bda..6689ef5f182 100644
--- a/tests/wpt/web-platform-tests/css/css-text/line-breaking/tools/generate-segment-break-transformation-rules-tests.py
+++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/tools/generate-segment-break-transformation-rules-tests.py
@@ -18,8 +18,6 @@ So there are 49 different combinations. It outputs a list of all
tests it generated in the format of Mozilla reftest.list to the stdout.
"""
-from __future__ import unicode_literals, print_function, absolute_import
-
TEST_FILE = 'segment-break-transformation-rules-{:03}.html'
TEST_TEMPLATE = '''<!DOCTYPE html>
<meta charset="utf-8">
diff --git a/tests/wpt/web-platform-tests/css/css-transitions/all-with-discrete.tentative.html b/tests/wpt/web-platform-tests/css/css-transitions/all-with-discrete.tentative.html
index f12c14e4c55..a048bc7a1cc 100644
--- a/tests/wpt/web-platform-tests/css/css-transitions/all-with-discrete.tentative.html
+++ b/tests/wpt/web-platform-tests/css/css-transitions/all-with-discrete.tentative.html
@@ -3,6 +3,7 @@
<link rel=help href="https://github.com/w3c/csswg-drafts/issues/4441">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/css/css-animations/support/testcommon.js"></script>
<div id=target1 class=target>hello</div>
<div id=target2 class=target>hello</div>
@@ -32,9 +33,9 @@ promise_test(async () => {
target1.addEventListener('transitionstart', () => {
transitionstartFired = true;
});
- await new Promise(resolve => requestAnimationFrame(resolve));
+ await waitForAnimationFrames(2);
target1.classList.add('animated');
- await new Promise(resolve => requestAnimationFrame(resolve));
+ await waitForAnimationFrames(1);
assert_true(transitionstartFired);
}, 'all with an explicit discrete property should animate.');
@@ -43,9 +44,9 @@ promise_test(async () => {
target2.addEventListener('transitionstart', () => {
transitionstartFired = true;
});
- await new Promise(resolve => requestAnimationFrame(resolve));
+ await waitForAnimationFrames(2);
target2.classList.add('animated');
- await new Promise(resolve => requestAnimationFrame(resolve));
+ await waitForAnimationFrames(1);
assert_false(transitionstartFired);
}, 'all without an explicit discrete property should not animate.');
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-ui/appearance-cssom-001.html b/tests/wpt/web-platform-tests/css/css-ui/appearance-cssom-001.html
index 1618c2b8a28..2da20a0ac92 100644
--- a/tests/wpt/web-platform-tests/css/css-ui/appearance-cssom-001.html
+++ b/tests/wpt/web-platform-tests/css/css-ui/appearance-cssom-001.html
@@ -2,8 +2,11 @@
<title>CSS Basic User Interface Test: appearance CSSOM</title>
<link rel="help" href="https://drafts.csswg.org/css-ui-4/#appearance-switching">
<meta name="assert" content="CSSOM for the appearance/-webkit-appearance property is correct.">
+<meta name="variant" content="">
+<meta name="variant" content="?exclude=Invalid">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
+<script src="/common/subset-tests-by-key.js"></script>
<button id=button>Test</button>
<script>
const button = document.getElementById('button');
@@ -191,7 +194,7 @@
}
for (const prop of ["-webkit-appearance", "appearance"]) {
for (const value of values) {
- test(() => {
+ subsetTestByKey(`Values`, test, () => {
button.removeAttribute('style');
button.style.setProperty(prop, value);
assert_style_for_prop(button.style, prop, value);
@@ -204,7 +207,7 @@
}
for (const value of compat_values) {
- test(() => {
+ subsetTestByKey(`Compat`, test, () => {
button.removeAttribute('style');
button.style.setProperty(prop, value);
assert_style_for_prop(button.style, prop, [value, ""]);
@@ -217,7 +220,7 @@
}
for (const value of invalid_values) {
- test(() => {
+ subsetTestByKey(`Invalid`, test, () => {
button.removeAttribute('style');
button.style.setProperty(prop, value);
assert_style_for_prop(button.style, prop, "");
@@ -245,7 +248,7 @@
"-tc-",
]) {
const prop = `${prefix}appearance`;
- test(() => {
+ subsetTestByKey(`Prefixes`, test, () => {
button.removeAttribute('style');
button.style.setProperty(prop, 'none');
assert_equals(button.style.getPropertyValue(prop), '');
diff --git a/tests/wpt/web-platform-tests/docs/requirements.txt b/tests/wpt/web-platform-tests/docs/requirements.txt
index 0ad8484f60b..589a98eaa2a 100644
--- a/tests/wpt/web-platform-tests/docs/requirements.txt
+++ b/tests/wpt/web-platform-tests/docs/requirements.txt
@@ -1,5 +1,5 @@
recommonmark==0.7.1
-sphinx-argparse==0.3.1
+sphinx-argparse==0.3.2
sphinx-autobuild==2021.3.14
sphinx-js==3.2.1
sphinx==4.4.0
diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js b/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
index 74b531cd3df..f561b699534 100644
--- a/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
+++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
@@ -42,8 +42,8 @@ async function verifyScrollStopped(test, target_div) {
const y = target_div.scrollTop;
return new Promise(resolve => {
test.step_timeout(() => {
- assert_equals(x, target_div.scrollLeft);
- assert_equals(y, target_div.scrollTop);
+ assert_equals(target_div.scrollLeft, x);
+ assert_equals(target_div.scrollTop, y);
resolve();
}, unscaled_pause_time_in_ms);
});
diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/generate.py b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/generate.py
index a0bca546c75..20c866bee80 100755
--- a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/generate.py
+++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/generate.py
@@ -1,7 +1,5 @@
#!/usr/bin/python
-from __future__ import print_function
-
import os
import sys
diff --git a/tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py b/tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py
index 532037e2a33..97c6fc74e93 100644
--- a/tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py
+++ b/tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py
@@ -1,7 +1,5 @@
#!/usr/bin/python
-from __future__ import print_function
-
import os, re, os.path, glob
head = re.compile( r"^(\s*</head>)", re.MULTILINE )
diff --git a/tests/wpt/web-platform-tests/fetch/local-network-access/redirect.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/redirect.https.window.js
index f8a53ad1889..edbd5a19fbc 100644
--- a/tests/wpt/web-platform-tests/fetch/local-network-access/redirect.https.window.js
+++ b/tests/wpt/web-platform-tests/fetch/local-network-access/redirect.https.window.js
@@ -365,8 +365,8 @@ promise_test(t => fetchTest(t, {
server: Server.HTTPS_LOCAL,
treatAsPublic: true,
},
- server: Server.HTTPS_PRIVATE,
target: {
+ server: Server.HTTPS_PRIVATE,
behavior: {
preflight: PreflightBehavior.noPnaHeader(token()),
response: ResponseBehavior.allowCrossOrigin(),
diff --git a/tests/wpt/web-platform-tests/fetch/local-network-access/resources/support.sub.js b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/support.sub.js
index c07fd2c2ace..0cf3d2532e7 100644
--- a/tests/wpt/web-platform-tests/fetch/local-network-access/resources/support.sub.js
+++ b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/support.sub.js
@@ -205,6 +205,7 @@ function sourceResolveOptions({ server, treatAsPublic }) {
// - `response`: The result of calling one of `ResponseBehavior`'s methods.
// - `redirect`: A URL to which the target should redirect GET requests.
function preflightUrl({ server, behavior }) {
+ assert_not_equals(server, undefined, 'server');
const options = {...server};
if (behavior) {
const { preflight, response, redirect } = behavior;
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/TODO b/tests/wpt/web-platform-tests/fledge/tentative/TODO
new file mode 100644
index 00000000000..839d286b388
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/TODO
@@ -0,0 +1,33 @@
+Need tests for (likely not a complete list):
+
+* directFromSellerSignals.
+* All generateBid() and scoreAd() input parameters.
+* All interest group fields (passed to auction, have effect on auction).
+ Validation when joining/leaving interest group is covered.
+* Updates.
+* All auctionConfig parameters (including invalid auctionConfigs, and ones
+ with no buyers).
+* Interest group expiration.
+* Multiple buyers.
+* Multiple interest group with same owner.
+* Multiple origin auctions (buyer != publisher != seller).
+* Multiple frame tests (including join IG policy, run auction policy,
+ loading URNs in fencedframes in other frames, loading component
+ ad URNs in fenced frames of other frames, etc)
+* adAuctionConfig passed to reportResult().
+* trusted bidding / scoring signals.
+* Component ads.
+* Component auctions.
+* In reporting methods, browserSignals fields: dataVersion, topLevelSeller,
+ componentSeller, modifiedBid, adCost, madeHighestScoringOtherBid
+ (with interest group from another origin).
+* Loading ads in iframes.
+* In fencedframes window.fence.setReportEventDataForAutomaticBeacons()
+* Calling leaveAdInterestGroup() in the frame of a winning ad (and one
+ of its component ads)
+* Network errors / timeouts.
+
+If possible:
+* Aggregate reporting.
+* Join/leave permission delegation via .well-known files.
+* k-anonymity.
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/join-leave-ad-interest-group.https.sub.window.js b/tests/wpt/web-platform-tests/fledge/tentative/join-leave-ad-interest-group.https.sub.window.js
new file mode 100644
index 00000000000..e967d92618c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/join-leave-ad-interest-group.https.sub.window.js
@@ -0,0 +1,542 @@
+// META: script=/resources/testdriver.js
+// META: script=/common/utils.js
+// META: script=resources/fledge-util.js
+
+// These tests are focused on joinAdInterestGroup() and leaveAdInterestGroup().
+// Most join tests do not run auctions, but instead only check the result of
+// the returned promise, since testing that interest groups are actually
+// joined, and that each interestGroup field behaves as intended, are covered
+// by other tests.
+
+// Minimal fields needed for a valid interest group. Used in most test cases.
+const BASE_INTEREST_GROUP = {
+ owner: window.location.origin,
+ name: 'default name',
+}
+
+// Each test case attempts to join and then leave an interest group, checking
+// if any exceptions are thrown from either operation.
+const SIMPLE_JOIN_LEAVE_TEST_CASES = [
+ { expectJoinSucces: false,
+ expectLeaveSucces: false,
+ interestGroup: null
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: false,
+ interestGroup: {}
+ },
+
+ // Basic success test case.
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: BASE_INTEREST_GROUP
+ },
+
+ // "owner" tests
+ { expectJoinSucces: false,
+ expectLeaveSucces: false,
+ interestGroup: { name: 'default name' }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: false,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ owner: null}
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: false,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ owner: window.location.origin.replace('https', 'http')}
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: false,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ owner: window.location.origin.replace('https', 'wss')}
+ },
+ // Cross-origin joins and leaves are not allowed without .well-known
+ // permissions.
+ { expectJoinSucces: false,
+ expectLeaveSucces: false,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ owner: '{{hosts[][www]}}' }
+ },
+
+ // "name" tests
+ { expectJoinSucces: false,
+ expectLeaveSucces: false,
+ interestGroup: { owner: window.location.origin }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ name: ''}
+ },
+
+ // "priority" tests
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priority: 1}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priority: 0}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priority: -1.5}
+ },
+
+ // "priorityVector" tests
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priorityVector: null}
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priorityVector: 1}
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priorityVector: {a: 'apple'}}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priorityVector: {}}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priorityVector: {a: 1}}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ priorityVector: {'a': 1, 'b': -4.5, 'a.b': 0}}
+ },
+
+ // "prioritySignalsOverrides" tests
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ prioritySignalsOverrides: null}
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ prioritySignalsOverrides: 1}
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ prioritySignalsOverrides: {a: 'apple'}}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ prioritySignalsOverrides: {}}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ prioritySignalsOverrides: {a: 1}}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ prioritySignalsOverrides: {'a': 1, 'b': -4.5, 'a.b': 0}}
+ },
+
+ // "enableBiddingSignalsPrioritization" tests
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ enableBiddingSignalsPrioritization: true}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ enableBiddingSignalsPrioritization: false}
+ },
+
+ // "biddingLogicUrl" tests
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingLogicUrl: null }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingLogicUrl: 'https://{{hosts[][www]}}/foo.js' }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingLogicUrl: 'data:text/javascript,Foo' }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingLogicUrl: `${window.location.origin}/foo.js`}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingLogicUrl: 'relative/path' }
+ },
+
+ // "biddingWasmHelperUrl" tests
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingWasmHelperUrl: null }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingWasmHelperUrl: 'https://{{hosts[][www]}}/foo.js' }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingWasmHelperUrl: 'data:application/wasm,Foo' }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingWasmHelperUrl: `${window.location.origin}/foo.js`}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ biddingWasmHelperUrl: 'relative/path' }
+ },
+
+ // "dailyUpdateUrl" tests
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ dailyUpdateUrl: null }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ dailyUpdateUrl: 'https://{{hosts[][www]}}/foo.js' }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ dailyUpdateUrl: 'data:application/wasm,Foo' }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ dailyUpdateUrl: `${window.location.origin}/foo.js`}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ dailyUpdateUrl: 'relative/path' }
+ },
+
+ // "executionMode" tests
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ executionMode: 'compatibility' }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ executionMode: 'groupByOrigin' }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ executionMode: 'unknownValuesAreValid' }
+ },
+
+ // "trustedBiddingSignalsUrl" tests
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsUrl: null }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsUrl: 'https://{{hosts[][www]}}/foo.js' }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsUrl: 'data:application/json,{}' }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsUrl: `${window.location.origin}/foo.js`}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsUrl: 'relative/path' }
+ },
+
+ // "trustedBiddingSignalsKeys" tests
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsKeys: null }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsKeys: {}}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsKeys: []}
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ trustedBiddingSignalsKeys: ['a', 4, 'Foo']}
+ },
+
+ // "userBiddingSignals" tests
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ userBiddingSignals: null }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ userBiddingSignals: 'foo' }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ userBiddingSignals: 15 }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ userBiddingSignals: [5, 'foo', [-6.4, {a: 'b'}]] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ userBiddingSignals: {a: [5, 'foo', {b: -6.4}] }}
+ },
+
+ // "ads" tests
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: null }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: 5 }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: {} }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: [] }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: [{}] }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: [{metadata: [{a:'b'}, 'c'], 1:[2,3]}] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: [{renderUrl: 'https://somewhere.test/'}] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: [{renderUrl: 'https://somewhere.test/'},
+ {renderUrl: 'https://somewhere-else.test/'}] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: [{renderUrl: 'https://somewhere.test/',
+ metadata: null}] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ ads: [{renderUrl: 'https://somewhere.test/',
+ metadata: null,
+ someOtherField: 'foo'}] }
+ },
+
+ // "adComponents" tests
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: null }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: 5 }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: {} }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: [] }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: [{}] }
+ },
+ { expectJoinSucces: false,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: [{metadata: [{a:'b'}, 'c'], 1:[2,3]}] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: [{renderUrl: 'https://somewhere.test/'}] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: [{renderUrl: 'https://somewhere.test/'},
+ {renderUrl: 'https://elsewhere.test/'}] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: [{renderUrl: 'https://somewhere.test/',
+ metadata: null}] }
+ },
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ adComponents: [{renderUrl: 'https://somewhere.test/',
+ metadata: null,
+ someOtherField: 'foo'}] }
+ },
+
+ // Miscellaneous tests.
+ { expectJoinSucces: true,
+ expectLeaveSucces: true,
+ interestGroup: { ...BASE_INTEREST_GROUP,
+ extra: false,
+ fields: {do:'not'},
+ matter: 'at',
+ all: [3,4,5] }
+ },
+];
+
+for (testCase of SIMPLE_JOIN_LEAVE_TEST_CASES) {
+ promise_test((async (testCase) => {
+ const INTEREST_GROUP_LIFETIME_SECS = 1;
+
+ let join_promise = navigator.joinAdInterestGroup(testCase.interestGroup,
+ INTEREST_GROUP_LIFETIME_SECS);
+ assert_true(join_promise instanceof Promise, "join should return a promise");
+ if (testCase.expectJoinSucces) {
+ assert_equals(await join_promise, undefined);
+ } else {
+ let joinExceptionThrown = false;
+ try {
+ await join_promise;
+ } catch (e) {
+ joinExceptionThrown = true;
+ }
+ assert_true(joinExceptionThrown, 'Exception not thrown on join.');
+ }
+
+ let leave_promise = navigator.leaveAdInterestGroup(testCase.interestGroup,
+ INTEREST_GROUP_LIFETIME_SECS);
+ assert_true(leave_promise instanceof Promise, "leave should return a promise");
+ if (testCase.expectLeaveSucces) {
+ assert_equals(await leave_promise, undefined);
+ } else {
+ let leaveExceptionThrown = false;
+ try {
+ await leave_promise;
+ } catch (e) {
+ leaveExceptionThrown = true;
+ }
+ assert_true(leaveExceptionThrown, 'Exception not thrown on leave.');
+ }
+ }).bind(undefined, testCase), 'Join and leave interest group: ' + JSON.stringify(testCase));
+}
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+
+ // Joining an interest group without a bidding script and run an auction.
+ // There should be no winner.
+ await joinInterestGroup(test, uuid, { biddingLogicUrl: null });
+ assert_equals(null, await runBasicFledgeAuction(test, uuid),
+ 'Auction unexpectedly had a winner');
+
+ // Joining an interest group with a bidding script and the same owner/name as
+ // the previously joined interest group, and re-run the auction. There should
+ // be a winner this time.
+ await joinInterestGroup(test, uuid);
+ let url = await runBasicFledgeAuction(test, uuid);
+ assert_true('string' === typeof url,
+ 'Wrong value type returned from auction: ' + typeof url);
+
+ // Re-join the first interest group, and re-run the auction. The interest
+ // group should be overwritten again, and there should be no winner.
+ await joinInterestGroup(test, uuid, { biddingLogicUrl: null });
+ assert_equals(null, await runBasicFledgeAuction(test, uuid),
+ 'Auction unexpectedly had a winner');
+}, 'Join same interest group overwrites old matching group.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+
+ // Join an interest group, run an auction to make sure it was joined.
+ await joinInterestGroup(test, uuid);
+ let url = await runBasicFledgeAuction(test, uuid);
+ assert_true('string' === typeof url,
+ 'Wrong value type returned from auction: ' + typeof url);
+
+ // Leave the interest group, re-run the auction. There should be no winner.
+ await leaveInterestGroup();
+ assert_equals(null, await runBasicFledgeAuction(test, uuid),
+ 'Auction unexpectedly had a winner');
+}, 'Leaving interest group actually leaves interest group.');
+
+promise_test(async test => {
+ // This should not throw.
+ await leaveInterestGroup({ name: 'Never join group' });
+}, 'Leave an interest group that was never joined.');
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/no-winner.https.sub.window.js b/tests/wpt/web-platform-tests/fledge/tentative/no-winner.https.sub.window.js
new file mode 100644
index 00000000000..4d24b5738ea
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/no-winner.https.sub.window.js
@@ -0,0 +1,76 @@
+// META: script=/resources/testdriver.js
+// META: script=/common/utils.js
+// META: script=resources/fledge-util.js
+
+// The tests in this file focus on simple auctions (one bidder, one seller, one
+// origin, one frame) which have no winning bid, either due to errors or due to
+// there being no bids, except where tests fit better with another set of tests.
+
+// Errors common to bidding and decision logic scripts. These atrings will be
+// appended to script URLs to make the python scripts that generate bidding
+// logic and decision logic scripts with errors.
+const COMMON_SCRIPT_ERRORS = [
+ 'error=http-error',
+ 'error=no-content-type',
+ 'error=wrong-content-type',
+ 'error=bad-allow-fledge',
+ 'error=fledge-not-allowed',
+ 'error=no-allow-fledge',
+ 'error=no-body',
+];
+
+const BIDDING_LOGIC_SCRIPT_ERRORS = [
+ ...COMMON_SCRIPT_ERRORS,
+ 'error=no-generateBid',
+ 'generateBid=throw 1;',
+ 'generateBid=This does not compile',
+ // Default timeout test. Doesn't check how long timing out takes.
+ 'generateBid=while(1);',
+ // Bad return values:
+ 'generateBid=return 5;',
+ 'generateBid=return "Foo";',
+ 'generateBid=return interestGroup.ads[0].renderUrl;',
+ 'generateBid=return {bid: 1, render: "https://not-in-ads-array.test/"};',
+ 'generateBid=return {bid: 1};',
+ 'generateBid=return {render: interestGroup.ads[0].renderUrl};',
+ // These are not bidding rather than errors.
+ 'generateBid=return {bid:0, render: interestGroup.ads[0].renderUrl};',
+ 'generateBid=return {bid:-1, render: interestGroup.ads[0].renderUrl};',
+];
+
+const DECISION_LOGIC_SCRIPT_ERRORS = [
+ ...COMMON_SCRIPT_ERRORS,
+ 'error=no-scoreAd',
+ 'scoreAd=throw 1;',
+ 'scoreAd=This does not compile',
+ // Default timeout test. Doesn't check how long timing out takes.
+ 'scoreAd=while(1);',
+ // Bad return values:
+ 'scoreAd=return "Foo";',
+ 'scoreAd=return {desirability: "Foo"};',
+ // These are rejecting the bid rather than errors.
+ 'scoreAd=return 0;',
+ 'scoreAd=return -1;',
+ 'scoreAd=return {desirability: 0};',
+ 'scoreAd=return {desirability: -1};',
+];
+
+for (error of BIDDING_LOGIC_SCRIPT_ERRORS) {
+ promise_test((async (error, test) => {
+ let biddingLogicUrl = `${BASE_URL}resources/bidding-logic.sub.py?${error}`;
+ await runBasicFledgeTestExpectingNoWinner(
+ test,
+ {interestGroupOverrides: {biddingLogicUrl: biddingLogicUrl}}
+ );
+ }).bind(undefined, error), `Bidding logic script: ${error}`);
+}
+
+for (error of DECISION_LOGIC_SCRIPT_ERRORS) {
+ promise_test((async (error, test) => {
+ let decisionLogicUrl =
+ `${BASE_URL}resources/decision-logic.sub.py?${error}`;
+ await runBasicFledgeTestExpectingNoWinner(
+ test, {auctionConfigOverrides: {decisionLogicUrl: decisionLogicUrl}}
+ );
+ }).bind(undefined, error), `Decision logic script: ${error}`);
+}
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/reporting-arguments.https.sub.window.js b/tests/wpt/web-platform-tests/fledge/tentative/reporting-arguments.https.sub.window.js
new file mode 100644
index 00000000000..69b7d2fddda
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/reporting-arguments.https.sub.window.js
@@ -0,0 +1,289 @@
+// META: script=/resources/testdriver.js
+// META: script=/common/utils.js
+// META: script=resources/fledge-util.js
+// META: timeout=long
+
+// Simplified version of reportTest() for validating arguments to reporting
+// methods. Only takes expressions to check in reporting methods. "uuid" is
+// optional, and one is generated if not passed one.
+async function runReportArgumentValidationTest(
+ test, reportResultSuccessCondition, reportWinSuccessCondition, uuid) {
+ if (!uuid)
+ uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ reportResultSuccessCondition,
+ `sendReportTo('${createSellerReportUrl(uuid)}');`,
+ // reportWin:
+ reportWinSuccessCondition,
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ [createSellerReportUrl(uuid), createBidderReportUrl(uuid)]
+ );
+}
+
+/////////////////////////////////////////////////////////////////////
+// reportResult() to reportWin() message passing tests
+/////////////////////////////////////////////////////////////////////
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');
+ return 45;`,
+ // reportWin:
+ 'sellerSignals === 45',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createSellerReportUrl(uuid), createBidderReportUrl(uuid)]
+ );
+}, 'Seller passes number to bidder.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');
+ return 'foo';`,
+ // reportWin:
+ 'sellerSignals === "foo"',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createSellerReportUrl(uuid), createBidderReportUrl(uuid)]
+ );
+}, 'Seller passes string to bidder.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');
+ return [3, 1, 2];`,
+ // reportWin:
+ 'JSON.stringify(sellerSignals) === "[3,1,2]"',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createSellerReportUrl(uuid), createBidderReportUrl(uuid)]
+ );
+}, 'Seller passes array to bidder.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');
+ return {a: 4, b:['c', null, {}]};`,
+ // reportWin:
+ `JSON.stringify(sellerSignals) === '{"a":4,"b":["c",null,{}]}'`,
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createSellerReportUrl(uuid), createBidderReportUrl(uuid)]
+ );
+}, 'Seller passes object to bidder.');
+
+/////////////////////////////////////////////////////////////////////
+// reportResult() / reportWin() browserSignals tests.
+/////////////////////////////////////////////////////////////////////
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.topWindowHostname === "${window.location.hostname}"`,
+ // reportWinSuccessCondition:
+ `browserSignals.topWindowHostname === "${window.location.hostname}"`
+ );
+}, 'browserSignals.topWindowHostname test.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.seller === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.seller === "${window.location.origin}"`
+ );
+}, 'browserSignals.seller test.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.topLevelSeller === undefined &&
+ browserSignals.componentSeller === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.topLevelSeller === undefined &&
+ browserSignals.componentSeller === undefined`
+ );
+}, 'browserSignals.topLevelSeller and browserSignals.componentSeller test.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.renderUrl === "${createRenderUrl(uuid)}"`,
+ // reportWinSuccessCondition:
+ `browserSignals.renderUrl === "${createRenderUrl(uuid)}"`,
+ uuid
+ );
+}, 'browserSignals.renderUrl test.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.bid === 9`,
+ // reportWinSuccessCondition:
+ `browserSignals.bid === 9`
+ );
+}, 'browserSignals.bid test.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.desirability === 18`,
+ // reportWinSuccessCondition:
+ `browserSignals.desirability === undefined`
+ );
+}, 'browserSignals.desirability test.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.topLevelSellerSignals === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.topLevelSellerSignals === undefined`
+ );
+}, 'browserSignals.topLevelSellerSignals test.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.dataVersion === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.dataVersion === undefined`
+ );
+}, 'browserSignals.dataVersion test.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.modifiedBid === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.modifiedBid === undefined`
+ );
+}, 'browserSignals.modifiedBid test.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.highestScoringOtherBid === 0`,
+ // reportWinSuccessCondition:
+ `browserSignals.highestScoringOtherBid === 0`,
+ uuid
+ );
+}, 'browserSignals.highestScoringOtherBid with no other interest groups test.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await joinInterestGroup(test, uuid,
+ { biddingLogicUrl: createBiddingScriptUrl({bid: -2}),
+ name: 'other interest group 1' });
+ await joinInterestGroup(test, uuid,
+ { biddingLogicUrl: createBiddingScriptUrl({bid: -1}),
+ name: 'other interest group 2' });
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.highestScoringOtherBid === 0`,
+ // reportWinSuccessCondition:
+ `browserSignals.highestScoringOtherBid === 0`,
+ uuid
+ );
+}, 'browserSignals.highestScoringOtherBid with other groups that do not bid.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await joinInterestGroup(test, uuid,
+ { biddingLogicUrl: createBiddingScriptUrl({bid: 2}),
+ name: 'other interest group 1' });
+ await joinInterestGroup(test, uuid,
+ { biddingLogicUrl: createBiddingScriptUrl({bid: 5}),
+ name: 'other interest group 2' });
+ await joinInterestGroup(test, uuid,
+ { biddingLogicUrl: createBiddingScriptUrl({bid: 2}),
+ name: 'other interest group 3' });
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.highestScoringOtherBid === 5`,
+ // reportWinSuccessCondition:
+ `browserSignals.highestScoringOtherBid === 5`,
+ uuid
+ );
+}, 'browserSignals.highestScoringOtherBid with other bids.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.interestGroupName === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.interestGroupName === "default name"`
+ );
+}, 'browserSignals.interestGroupName test.');
+
+promise_test(async test => {
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.madeHighestScoringOtherBid === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.madeHighestScoringOtherBid === false`
+ );
+}, 'browserSignals.madeHighestScoringOtherBid with no other bids.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await joinInterestGroup(test, uuid,
+ { biddingLogicUrl: createBiddingScriptUrl({bid: -1}),
+ name: 'other interest group 2' });
+ await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.madeHighestScoringOtherBid === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.madeHighestScoringOtherBid === false`
+ );
+}, 'browserSignals.madeHighestScoringOtherBid with group that did not bid.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await joinInterestGroup(test, uuid,
+ { biddingLogicUrl: createBiddingScriptUrl({bid: 1}),
+ name: 'other interest group 2' });
+await runReportArgumentValidationTest(
+ test,
+ // reportResultSuccessCondition:
+ `browserSignals.madeHighestScoringOtherBid === undefined`,
+ // reportWinSuccessCondition:
+ `browserSignals.madeHighestScoringOtherBid === true`,
+ uuid
+ );
+}, 'browserSignals.madeHighestScoringOtherBid with other bid.');
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/resources/bidding-logic.sub.py b/tests/wpt/web-platform-tests/fledge/tentative/resources/bidding-logic.sub.py
new file mode 100644
index 00000000000..dfc4d86be35
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/resources/bidding-logic.sub.py
@@ -0,0 +1,50 @@
+# General bidding logic script. Depending on query parameters, it can
+# simulate a variety of network errors, and its generateBid() and
+# reportWin() functions can have arbitrary Javascript code injected
+# in them. generateBid() will by default return a bid of 9 for the
+# first ad.
+def main(request, response):
+ error = request.GET.first(b"error", None)
+
+ if error == b"http-error":
+ response.status = (404, b"OK")
+ else:
+ response.status = (200, b"OK")
+
+ if error == b"wrong-content-type":
+ response.headers.set(b"Content-Type", b"application/json")
+ elif error != b"no-content-type":
+ response.headers.set(b"Content-Type", b"application/javascript")
+
+ if error == b"bad-allow-fledge":
+ response.headers.set(b"X-Allow-FLEDGE", b"sometimes")
+ elif error == b"fledge-not-allowed":
+ response.headers.set(b"X-Allow-FLEDGE", b"false")
+ elif error != b"no-allow-fledge":
+ response.headers.set(b"X-Allow-FLEDGE", b"true")
+
+ body = b''
+ if error == b"no-body":
+ return body
+ if error != b"no-generateBid":
+ body += b"""
+ function generateBid(interestGroup, auctionSignals, perBuyerSignals,
+ trustedBiddingSignals, browserSignals,
+ directFromSellerSignals) {
+ {{GET[generateBid]}};
+ return {
+ 'bid': 9,
+ 'render': interestGroup.ads[0].renderUrl
+ };
+ }"""
+ bid = request.GET.first(b"bid", None)
+ if bid != None:
+ body = body.replace(b"9", bid)
+ if error != b"no-reportWin":
+ body += b"""
+ function reportWin(auctionSignals, perBuyerSignals, sellerSignals,
+ browserSignals, directFromSellerSignals) {
+ {{GET[reportWin]}};
+ }"""
+ return body
+
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/resources/decision-logic.sub.py b/tests/wpt/web-platform-tests/fledge/tentative/resources/decision-logic.sub.py
new file mode 100644
index 00000000000..8d5303ac5a4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/resources/decision-logic.sub.py
@@ -0,0 +1,47 @@
+# General decision logic script. Depending on query parameters, it can
+# simulate a variety of network errors, and its scoreAd() and
+# reportResult() functions can have arbitrary Javascript code injected
+# in them. scoreAd() will by default return a desirability score of
+# twice the bid for each ad, as long as the ad URL ends with the uuid.
+def main(request, response):
+ error = request.GET.first(b"error", None)
+
+ if error == b"http-error":
+ response.status = (404, b"OK")
+ else:
+ response.status = (200, b"OK")
+
+ if error == b"wrong-content-type":
+ response.headers.set(b"Content-Type", b"application/json")
+ elif error != b"no-content-type":
+ response.headers.set(b"Content-Type", b"application/javascript")
+
+ if error == b"bad-allow-fledge":
+ response.headers.set(b"X-Allow-FLEDGE", b"sometimes")
+ elif error == b"fledge-not-allowed":
+ response.headers.set(b"X-Allow-FLEDGE", b"false")
+ elif error != b"no-allow-fledge":
+ response.headers.set(b"X-Allow-FLEDGE", b"true")
+
+ body = b''
+ if error == b"no-body":
+ return body
+ if error != b"no-scoreAd":
+ body += b"""
+ function scoreAd(adMetadata, bid, auctionConfig, trustedScoringSignals,
+ browserSignals) {
+ // Don't bid on interest group with the wrong uuid. This is to prevent
+ // left over interest groups from other tests from affecting auction
+ // results.
+ if (!browserSignals.renderUrl.endsWith('{{GET[uuid]}}'))
+ return 0;
+
+ {{GET[scoreAd]}};
+ return {desirability: 2 * bid, allowComponentAuction: true};
+ }"""
+ if error != b"no-reportResult":
+ body += b"""
+ function reportResult(auctionConfig, browserSignals, directFromSellerSignals) {
+ {{GET[reportResult]}};
+ }"""
+ return body
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/resources/fenced_frame.sub.html b/tests/wpt/web-platform-tests/fledge/tentative/resources/fenced_frame.sub.html
new file mode 100644
index 00000000000..eaca3f49fd1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/resources/fenced_frame.sub.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<html>
+<body>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/resources/fenced_frame.sub.html.headers b/tests/wpt/web-platform-tests/fledge/tentative/resources/fenced_frame.sub.html.headers
new file mode 100644
index 00000000000..bc74b5851b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/resources/fenced_frame.sub.html.headers
@@ -0,0 +1,2 @@
+Content-Type: text/html
+Supports-Loading-Mode: fenced-frame
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/resources/fledge-util.js b/tests/wpt/web-platform-tests/fledge/tentative/resources/fledge-util.js
new file mode 100644
index 00000000000..9f95a59e43a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/resources/fledge-util.js
@@ -0,0 +1,275 @@
+const FULL_URL = window.location.href;
+const BASE_URL = FULL_URL.substring(0, FULL_URL.lastIndexOf('/') + 1);
+const BASE_PATH = (new URL(BASE_URL)).pathname;
+
+const DEFAULT_INTEREST_GROUP_NAME = 'default name';
+
+// Creates a URL that will be sent to the URL request tracker script.
+// `uuid` is used to identify the stash shard to use.
+// `dispatch` affects what the tracker script does.
+// `id` can be used to uniquely identify tracked requests. It has no effect
+// on behavior of the script; it only serves to make the URL unique.
+function createTrackerUrl(origin, uuid, dispatch, id = null) {
+ let url = new URL(`${origin}${BASE_PATH}resources/request_tracker.py`);
+ url.searchParams.append('uuid', uuid);
+ url.searchParams.append('dispatch', dispatch);
+ if (id)
+ url.searchParams.append('id', id);
+ return url.toString();
+}
+
+// Create tracked bidder/seller URLs. The only difference is the prefix added
+// to the `id` passed to createTrackerUrl. The optional `id` field allows
+// multiple bidder/seller report URLs to be distinguishable from each other.
+function createBidderReportUrl(uuid, id = '1') {
+ return createTrackerUrl(window.location.origin, uuid, `track_get`,
+ `bidder_report_${id}`);
+}
+function createSellerReportUrl(uuid, id = '1') {
+ return createTrackerUrl(window.location.origin, uuid, `track_get`,
+ `seller_report_${id}`);
+}
+
+// Generates a UUID and registers a cleanup method with the test fixture to
+// request a URL from the request tracking script that clears all data
+// associated with the generated uuid when requested.
+function generateUuid(test) {
+ let uuid = token();
+ test.add_cleanup(async () => {
+ let cleanupUrl = createTrackerUrl(window.location.origin, uuid, 'clean_up');
+ let response = await fetch(cleanupUrl, {credentials: 'omit', mode: 'cors'});
+ assert_equals(await response.text(), 'cleanup complete',
+ `Sever state cleanup failed`);
+ });
+ return uuid;
+}
+
+// Repeatedly requests "request_list" URL until exactly the URLs listed
+// in "expectedRequests" have been observed by the request tracker script (in
+// any order, since report URLs are not guaranteed to be sent in any order).
+//
+// If any other strings are received from the tracking script, or the tracker
+// script reports an error, fails the test.
+async function waitForObservedRequests(uuid, expectedRequests) {
+ let trackedRequestsUrl = createTrackerUrl(window.location.origin, uuid,
+ 'request_list');
+ // Sort array for easier comparison, since order doesn't matter.
+ expectedRequests.sort();
+ while (true) {
+ let response = await fetch(trackedRequestsUrl,
+ {credentials: 'omit', mode: 'cors'});
+ let trackerData = await response.json();
+
+ // Fail on fetch error.
+ if (trackerData.error) {
+ throw trackedRequestsUrl + ' fetch failed:' +
+ JSON.stringify(trackerData);
+ }
+
+ // Fail on errors reported by the tracker script.
+ if (trackerData.errors.length > 0) {
+ throw 'Errors reported by request_tracker.py:' +
+ JSON.stringify(trackerData.errors);
+ }
+
+ // If expected number of requests have been observed, compare with list of
+ // all expected requests and exit.
+ let trackedRequests = trackerData.trackedRequests;
+ if (trackedRequests.length == expectedRequests.length) {
+ assert_array_equals(trackedRequests.sort(), expectedRequests);
+ break;
+ }
+
+ // If fewer than total number of expected requests have been observed,
+ // compare what's been received so far, to have a greater chance to fail
+ // rather than hang on error.
+ for (const trackedRequest of trackedRequests) {
+ assert_in_array(trackedRequest, expectedRequests);
+ }
+ }
+}
+
+// Creates a bidding script with the provided code in the method bodies. The
+// bidding script's generateBid() method will return a bid of 9 for the first
+// ad, after the passed in code in the "generateBid" input argument has been
+// run, unless it returns something or throws.
+//
+// The default reportWin() method is empty.
+function createBiddingScriptUrl(params = {}) {
+ let url = new URL(`${BASE_URL}resources/bidding-logic.sub.py`);
+ if (params.generateBid)
+ url.searchParams.append('generateBid', params.generateBid);
+ if (params.reportWin)
+ url.searchParams.append('reportWin', params.reportWin);
+ if (params.error)
+ url.searchParams.append('error', params.error);
+ if (params.bid)
+ url.searchParams.append('bid', params.bid);
+ return url.toString();
+}
+
+// Creates a decision script with the provided code in the method bodies. The
+// decision script's scoreAd() method will reject ads with renderUrls that
+// don't ends with "uuid", and will return a score equal to the bid, after the
+// passed in code in the "scoreAd" input argument has been run, unless it
+// returns something or throws.
+//
+// The default reportResult() method is empty.
+function createDecisionScriptUrl(uuid, params = {}) {
+ let url = new URL(`${BASE_URL}resources/decision-logic.sub.py`);
+ url.searchParams.append('uuid', uuid);
+ if (params.scoreAd)
+ url.searchParams.append('scoreAd', params.scoreAd);
+ if (params.reportResult)
+ url.searchParams.append('reportResult', params.reportResult);
+ if (params.error)
+ url.searchParams.append('error', params.error);
+ return url.toString();
+}
+
+// Creates a renderUrl for an ad that runs the passed in "script". "uuid" has
+// no effect, beyond making the URL distinct between tests, and being verified
+// by the decision logic script before accepting a bid.
+function createRenderUrl(uuid) {
+ let url = new URL(`${BASE_URL}resources/fenced_frame.sub.html`);
+ url.searchParams.append('uuid', uuid);
+ return url.toString();
+}
+
+// Joins an interest group that, by default, is owned by the current frame's
+// origin, is named DEFAULT_INTEREST_GROUP_NAME, has a bidding script that
+// issues a bid of 9 with a renderUrl of "https://not.checked.test/${uuid}",
+// and sends a report to createBidderReportUrl(uuid) if it wins. Waits for the
+// join command to complete. Adds cleanup command to `test` to leave the
+// interest group when the test completes.
+//
+// `interestGroupOverrides` may be used to override fields in the joined
+// interest group.
+async function joinInterestGroup(test, uuid, interestGroupOverrides = {}) {
+ const INTEREST_GROUP_LIFETIME_SECS = 60;
+
+ let interestGroup = {
+ owner: window.location.origin,
+ name: DEFAULT_INTEREST_GROUP_NAME,
+ biddingLogicUrl: createBiddingScriptUrl(
+ { reportWin: `sendReportTo('${createBidderReportUrl(uuid)}');` }),
+ ads: [{renderUrl: createRenderUrl(uuid)}],
+ ...interestGroupOverrides
+ };
+
+ await navigator.joinAdInterestGroup(interestGroup,
+ INTEREST_GROUP_LIFETIME_SECS);
+ test.add_cleanup(
+ async () => {await navigator.leaveAdInterestGroup(interestGroup)});
+}
+
+// Similar to joinInterestGroup, but leaves the interest group instead.
+// Generally does not need to be called manually when using
+// "joinInterestGroup()".
+async function leaveInterestGroup(interestGroupOverrides = {}) {
+ let interestGroup = {
+ owner: window.location.origin,
+ name: DEFAULT_INTEREST_GROUP_NAME,
+ ...interestGroupOverrides
+ };
+
+ await navigator.leaveAdInterestGroup(interestGroup);
+}
+
+// Runs a FLEDGE auction and returns the result. By default, the seller is the
+// current frame's origin, and the only buyer is as well. The seller script
+// rejects bids for URLs that don't contain "uuid" (to avoid running into issues
+// with any interest groups from other tests), and reportResult() sends a report
+// to createSellerReportUrl(uuid).
+//
+// `auctionConfigOverrides` may be used to override fields in the auction
+// configuration.
+async function runBasicFledgeAuction(test, uuid, auctionConfigOverrides = {}) {
+ let auctionConfig = {
+ seller: window.location.origin,
+ decisionLogicUrl: createDecisionScriptUrl(
+ uuid,
+ { reportResult: `sendReportTo('${createSellerReportUrl(uuid)}');` }),
+ interestGroupBuyers: [window.location.origin],
+ ...auctionConfigOverrides
+ };
+ return await navigator.runAdAuction(auctionConfig);
+}
+
+// Calls runBasicFledgeAuction(), expecting the auction to have a winner.
+// Creates a fenced frame that will be destroyed on completion of "test", and
+// navigates it to the URN URL returned by the auction. Does not wait for the
+// fenced frame to finish loading, since there's no API that can do that.
+async function runBasicFledgeAuctionAndNavigate(test, uuid,
+ auctionConfigOverrides = {}) {
+ let url = await runBasicFledgeAuction(test, uuid, auctionConfigOverrides);
+ assert_equals(typeof url, 'string',
+ `Wrong value type returned from auction: ${typeof url}`);
+
+ let fencedFrame = document.createElement('fencedframe');
+ fencedFrame.mode = 'opaque-ads';
+ fencedFrame.src = url;
+ document.body.appendChild(fencedFrame);
+ test.add_cleanup(() => { document.body.removeChild(fencedFrame); });
+}
+
+// Joins an interest group and runs an auction, expecting no winner to be
+// returned. "testConfig" can optionally modify the interest group or
+// auctionConfig.
+async function runBasicFledgeTestExpectingNoWinner(test, testConfig = {}) {
+ const uuid = generateUuid(test);
+ await joinInterestGroup(test, uuid, testConfig.interestGroupOverrides);
+ let result = await runBasicFledgeAuction(
+ test, uuid, testConfig.auctionConfigOverrides);
+ assert_equals(result, null, 'Auction unexpectedly had a winner');
+}
+
+// Test helper for report phase of auctions that lets the caller specify the
+// body of reportResult() and reportWin(). Passing in null will cause there
+// to be no reportResult() or reportWin() method.
+//
+// If the "SuccessCondition" fields are non-null and evaluate to false in
+// the corresponding reporting method, the report is sent to an error URL.
+// Otherwise, the corresponding 'reportResult' / 'reportWin' values are run.
+//
+// Requesting error report URLs causes waitForObservedRequests() to throw
+// rather than hang.
+async function runReportTest(test, uuid, reportResultSuccessCondition,
+ reportResult, reportWinSuccessCondition, reportWin,
+ expectedReportUrls) {
+ if (reportResultSuccessCondition) {
+ reportResult = `if (!(${reportResultSuccessCondition})) {
+ sendReportTo('${createSellerReportUrl(uuid, 'error')}');
+ return false;
+ }
+ ${reportResult}`;
+ }
+ let decisionScriptUrlParams = {};
+ if (reportResult !== null)
+ decisionScriptUrlParams.reportResult = reportResult;
+ else
+ decisionScriptUrlParams.error = 'no-reportResult';
+
+ if (reportWinSuccessCondition) {
+ reportWin = `if (!(${reportWinSuccessCondition})) {
+ sendReportTo('${createSellerReportUrl(uuid, 'error')}');
+ return false;
+ }
+ ${reportWin}`;
+ }
+ let biddingScriptUrlParams = {};
+ if (reportWin !== null)
+ biddingScriptUrlParams.reportWin = reportWin;
+ else
+ biddingScriptUrlParams.error = 'no-reportWin';
+
+ let interestGroupOverrides =
+ { biddingLogicUrl: createBiddingScriptUrl(biddingScriptUrlParams) };
+
+ await joinInterestGroup(test, uuid, interestGroupOverrides);
+ await runBasicFledgeAuctionAndNavigate(
+ test, uuid,
+ { decisionLogicUrl: createDecisionScriptUrl(
+ uuid, decisionScriptUrlParams) });
+ await waitForObservedRequests(uuid, expectedReportUrls);
+}
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/resources/request_tracker.py b/tests/wpt/web-platform-tests/fledge/tentative/resources/request_tracker.py
new file mode 100644
index 00000000000..5fedd727deb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/resources/request_tracker.py
@@ -0,0 +1,78 @@
+import mimetypes
+import os
+import json
+import wptserve.stash
+
+from wptserve.utils import isomorphic_decode, isomorphic_encode
+
+# Test server that tracks requests it has previously seen, keyed by a token.
+#
+# All requests have a "dispatch" field indicating what to do, and a "uuid"
+# field which should be unique for each test, to avoid tests that fail to
+# clean up after themselves, or that are running concurrently, from interfering
+# with other tests.
+#
+# Each uuid has a stash entry with a dictionary with two entries:
+# "trackedRequests" is a list of all observed requested URLs with a
+# dispatch of "track_get".
+# "errors" is a list of an errors that occurred.
+#
+# A dispatch of "request_list" will return the "trackedRequests" dictionary
+# associated with the in uuid, as a JSON string.
+#
+# A dispatch of "clean_up" will delete all information associated with the uuid.
+def main(request, response):
+ # Don't cache responses, since tests expect duplicate requests to always
+ # reach the server.
+ response.headers.set(b"Cache-Control", b"no-store")
+
+ dispatch = request.GET.first(b"dispatch", None)
+ uuid = request.GET.first(b"uuid", None)
+
+ if not uuid or not dispatch:
+ return simple_response(request, response, 404, b"Not found",
+ b"Invalid query parameters")
+
+ stash = request.server.stash
+ with stash.lock:
+ # Take ownership of stashed entry, if any. This removes the entry of the
+ # stash.
+ server_state = stash.take(uuid) or {"trackedRequests": [], "errors": []}
+
+ # Clear the entire stash. No work to do, since stash entry was already
+ # removed.
+ if dispatch == b"clean_up":
+ return simple_response(request, response, 200, b"OK",
+ b"cleanup complete")
+
+ # Return the list of entries in the stash. Need to add data back to the
+ # stash first.
+ if dispatch == b"request_list":
+ stash.put(uuid, server_state)
+ return simple_response(request, response, 200, b"OK",
+ json.dumps(server_state))
+
+ # Tracks a request that's expected to be a GET.
+ if dispatch == b"track_get":
+ if request.method != "GET":
+ server_state["errors"].append(
+ request.url + " has wrong method: " + request.method)
+ else:
+ server_state["trackedRequests"].append(request.url)
+
+ stash.put(uuid, server_state)
+ return simple_response(request, response, 200, b"OK", b"")
+
+ # Report unrecognized dispatch line.
+ server_state["errors"].append(
+ request.url + " request with unknown dispatch value received: " +
+ dispatch.decode("utf-8"))
+ stash.put(uuid, server_state)
+ return simple_response(request, response, 404, b"Not Found",
+ b"Unrecognized dispatch parameter: " + dispatch)
+
+def simple_response(request, response, status_code, status_message, body,
+ content_type=b"text/plain"):
+ response.status = (status_code, status_message)
+ response.headers.set(b"Content-Type", content_type)
+ return body
diff --git a/tests/wpt/web-platform-tests/fledge/tentative/send-report-to.https.sub.window.js b/tests/wpt/web-platform-tests/fledge/tentative/send-report-to.https.sub.window.js
new file mode 100644
index 00000000000..bb0e7873a70
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fledge/tentative/send-report-to.https.sub.window.js
@@ -0,0 +1,161 @@
+// META: script=/resources/testdriver.js
+// META: script=/common/utils.js
+// META: script=resources/fledge-util.js
+// META: timeout=long
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');`,
+ // reportWin:
+ 'sellerSignals === null',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ [createSellerReportUrl(uuid), createBidderReportUrl(uuid)]
+ );
+}, 'Both send reports, seller passes nothing to bidder.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');`,
+ // reportWin:
+ null,
+ '',
+ // expectedReportUrls:
+ [createSellerReportUrl(uuid)]
+ );
+}, 'Only seller sends a report');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');`,
+ // reportWin:
+ null,
+ 'throw new Error("Very serious exception")',
+ // expectedReportUrls:
+ [createSellerReportUrl(uuid)]
+ );
+}, 'Only seller sends a report, bidder throws an exception');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');`,
+ // reportWin:
+ null,
+ null,
+ // expectedReportUrls:
+ [createSellerReportUrl(uuid)]
+ );
+}, 'Only seller sends a report, bidder has no reportWin() method');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ '',
+ // reportWin:
+ 'sellerSignals === null',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createBidderReportUrl(uuid)]
+ );
+}, 'Only bidder sends a report');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ 'return "foo";',
+ // reportWin:
+ 'sellerSignals === "foo"',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createBidderReportUrl(uuid)]
+ );
+}, 'Only bidder sends a report, seller passes a message to bidder');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ 'throw new Error("Very serious exception")',
+ // reportWin:
+ 'sellerSignals === null',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createBidderReportUrl(uuid)]
+ );
+}, 'Only bidder sends a report, seller throws an exception');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ null,
+ // reportWin:
+ 'sellerSignals === null',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createBidderReportUrl(uuid)]
+ );
+}, 'Only bidder sends a report, seller has no reportResult() method');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');
+ sendReportTo('${createSellerReportUrl(uuid)}');
+ return 5;`,
+ // reportWin:
+ 'sellerSignals === null',
+ `sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createBidderReportUrl(uuid)]
+ );
+}, 'Seller calls sendReportTo() twice, which throws an exception.');
+
+promise_test(async test => {
+ const uuid = generateUuid(test);
+ await runReportTest(
+ test, uuid,
+ // reportResult:
+ null,
+ `sendReportTo('${createSellerReportUrl(uuid)}');`,
+ // reportWin:
+ null,
+ `sendReportTo('${createBidderReportUrl(uuid)}');
+ sendReportTo('${createBidderReportUrl(uuid)}');`,
+ // expectedReportUrls:
+ [createSellerReportUrl(uuid)]
+ );
+ // Seller reports may be sent before bidder reports, since reportWin()
+ // takes output from reportResult() as input. Wait to make sure the
+ // bidder report URL really is not being requested.
+ await new Promise(resolve => test.step_timeout(resolve, 200));
+ await waitForObservedRequests(uuid, [createSellerReportUrl(uuid)]);
+}, 'Bidder calls sendReportTo() twice, which throws an exception.');
diff --git a/tests/wpt/web-platform-tests/fs/FileSystemBaseHandle-buckets.https.any.js b/tests/wpt/web-platform-tests/fs/FileSystemBaseHandle-buckets.https.any.js
index 6bb7d771194..cd78c5a9508 100644
--- a/tests/wpt/web-platform-tests/fs/FileSystemBaseHandle-buckets.https.any.js
+++ b/tests/wpt/web-platform-tests/fs/FileSystemBaseHandle-buckets.https.any.js
@@ -1,3 +1,4 @@
// META: script=resources/test-helpers.js
// META: script=resources/sandboxed-fs-test-helpers.js
+// META: script=/storage/buckets/resources/util.js
// META: script=script-tests/FileSystemBaseHandle-buckets.js
diff --git a/tests/wpt/web-platform-tests/fs/script-tests/FileSystemBaseHandle-buckets.js b/tests/wpt/web-platform-tests/fs/script-tests/FileSystemBaseHandle-buckets.js
index 98261995f96..01c41231808 100644
--- a/tests/wpt/web-platform-tests/fs/script-tests/FileSystemBaseHandle-buckets.js
+++ b/tests/wpt/web-platform-tests/fs/script-tests/FileSystemBaseHandle-buckets.js
@@ -1,6 +1,8 @@
'use strict';
directory_test(async (t, root_dir) => {
+ await prepareForBucketTest(t);
+
const inboxBucket = await navigator.storageBuckets.open('inbox');
const inboxRootDir = await inboxBucket.getDirectory();
@@ -12,6 +14,8 @@ directory_test(async (t, root_dir) => {
}, 'isSameEntry works as expected with buckets');
directory_test(async (t, root_dir) => {
+ await prepareForBucketTest(t);
+
const inboxBucket = await navigator.storageBuckets.open('inbox');
await navigator.storageBuckets.delete('inbox');
const directoryPromise = inboxBucket.getDirectory();
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html
index eddf3c1ea91..80cda234bb8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html
@@ -21,11 +21,18 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('green.png'), 0, 0, 100, 50, 0, 0, 100, 50);
-_assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
+fetch('/images/green.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, 100, 50);
+ _assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html
index 48ab9376ffb..b7487e09991 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html
@@ -21,11 +21,18 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('rgrg-256x256.png'), 140, 20, 100, 50, 0, 0, 100, 50);
-_assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
+fetch('/images/rgrg-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 140, 20, 100, 50, 0, 0, 100, 50);
+ _assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html
index 5946cb30c9a..567b4abfcff 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html
@@ -21,18 +21,25 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('rgrg-256x256.png'), 0, 0, 256, 256, 0, 0, 100, 50);
-ctx.fillStyle = '#0f0';
-ctx.fillRect(0, 0, 51, 26);
-ctx.fillRect(49, 24, 51, 26);
-_assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 20,20, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 80,20, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 20,30, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 80,30, 0,255,0,255, 2);
+fetch('/images/rgrg-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0, 256, 256, 0, 0, 100, 50);
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 51, 26);
+ ctx.fillRect(49, 24, 51, 26);
+ _assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 20,20, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 80,20, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 20,30, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 80,30, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.alpha.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.alpha.html
index 36db82e4edb..8926a72c9da 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.alpha.html
@@ -22,8 +22,15 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalAlpha = 0;
-ctx.drawImage(document.getElementById('red.png'), 0, 0);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html
index 6afc4e713c4..779397f6b9b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html
@@ -19,8 +19,15 @@
var t = async_test("drawImage() of an APNG draws the poster frame");
_addTest(function(canvas, ctx) {
-ctx.drawImage(document.getElementById('anim-poster-gr.png'), 0, 0);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+fetch('anim-poster-gr.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.broken.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.broken.html
index 4b22ffc8ba6..7e9f1451963 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.broken.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.broken.html
@@ -19,13 +19,19 @@
var t = async_test("");
_addTest(function(canvas, ctx) {
-ctx.fillStyle = '#0f0';
-ctx.fillRect(0, 0, 100, 50);
-var img = document.getElementById('broken.png');
-assert_throws_dom("INVALID_STATE_ERR", function() { ctx.drawImage(img, 0, 0); });
+fetch('/images/broken.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
</script>
-<img src="/images/broken.png" id="broken.png" class="resource">
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.clip.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.clip.html
index fac98fe949d..380620faf34 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.clip.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.clip.html
@@ -23,8 +23,19 @@ ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.rect(-10, -10, 1, 1);
ctx.clip();
-ctx.drawImage(document.getElementById('red.png'), 0, 0);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.rect(-10, -10, 1, 1);
+ ctx.clip();
+ ctx.drawImage(document.getElementById('red.png'), 0, 0);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.composite.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.composite.html
index 60204a5d27b..7b7deb0f91e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.composite.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.composite.html
@@ -22,8 +22,15 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalCompositeOperation = 'destination-over';
-ctx.drawImage(document.getElementById('red.png'), 0, 0);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.floatsource.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.floatsource.html
index 4b715f29fea..02e4626133d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.floatsource.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.floatsource.html
@@ -13,17 +13,23 @@
<p class="output">Actual output:</p>
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
-<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("");
_addTest(function(canvas, ctx) {
-ctx.drawImage(document.getElementById('green.png'), 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
</script>
-<img src="/images/green.png" id="green.png" class="resource">
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedest.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedest.html
index 8418f635d48..1020754fa8f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedest.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedest.html
@@ -21,18 +21,25 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('ggrr-256x256.png'), 100, 78, 50, 50, 0, 50, 50, -50);
-ctx.drawImage(document.getElementById('ggrr-256x256.png'), 100, 128, 50, -50, 100, 50, -50, -50);
-_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 1,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 98,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 98,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 48,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 48,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 51,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 100, 78, 50, 50, 0, 50, 50, -50);
+ ctx.drawImage(bitmap, 100, 128, 50, -50, 100, 50, -50, -50);
+ _assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 1,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 98,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 98,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 48,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 48,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 51,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedir.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedir.html
index 9a42e5af854..e02d0ff439d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedir.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativedir.html
@@ -21,18 +21,25 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('ggrr-256x256.png'), 0, 178, 50, -100, 0, 0, 50, 100);
-ctx.drawImage(document.getElementById('ggrr-256x256.png'), 0, 78, 50, 100, 50, 100, 50, -100);
-_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 1,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 98,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 98,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 48,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 48,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 51,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 178, 50, -100, 0, 0, 50, 100);
+ ctx.drawImage(bitmap, 0, 78, 50, 100, 50, 100, 50, -100);
+ _assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 1,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 98,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 98,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 48,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 48,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 51,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativesource.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativesource.html
index 07b154b1f02..f15fc3adcb0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativesource.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.negativesource.html
@@ -21,18 +21,25 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('ggrr-256x256.png'), 100, 78, -100, 50, 0, 0, 50, 50);
-ctx.drawImage(document.getElementById('ggrr-256x256.png'), 100, 128, -100, -50, 50, 0, 50, 50);
-_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 1,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 98,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 98,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 48,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 48,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 51,1, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 100, 78, -100, 50, 0, 0, 50, 50);
+ ctx.drawImage(bitmap, 100, 128, -100, -50, 50, 0, 50, 50);
+ _assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 1,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 98,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 98,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 48,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 48,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 51,1, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html
index 673cd3e64aa..f1ad616355d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html
@@ -21,309 +21,315 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
-var red = document.getElementById('red.png');
-ctx.drawImage(red, Infinity, 0);
-ctx.drawImage(red, -Infinity, 0);
-ctx.drawImage(red, NaN, 0);
-ctx.drawImage(red, 0, Infinity);
-ctx.drawImage(red, 0, -Infinity);
-ctx.drawImage(red, 0, NaN);
-ctx.drawImage(red, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50);
-ctx.drawImage(red, -Infinity, 0, 100, 50);
-ctx.drawImage(red, NaN, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, -Infinity, 100, 50);
-ctx.drawImage(red, 0, NaN, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, -Infinity, 50);
-ctx.drawImage(red, 0, 0, NaN, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, -Infinity);
-ctx.drawImage(red, 0, 0, 100, NaN);
-ctx.drawImage(red, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, 0, 0, 100, 50);
-ctx.drawImage(red, -Infinity, 0, 100, 50, 0, 0, 100, 50);
-ctx.drawImage(red, NaN, 0, 100, 50, 0, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50, 0, 0, 100, 50);
-ctx.drawImage(red, 0, -Infinity, 100, 50, 0, 0, 100, 50);
-ctx.drawImage(red, 0, NaN, 100, 50, 0, 0, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50, 0, 0, 100, 50);
-ctx.drawImage(red, 0, 0, -Infinity, 50, 0, 0, 100, 50);
-ctx.drawImage(red, 0, 0, NaN, 50, 0, 0, 100, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, 0, 0, 100, -Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, 0, 0, 100, NaN, 0, 0, 100, 50);
-ctx.drawImage(red, 0, 0, 100, 50, Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, 0, 100, 50, -Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, 0, 100, 50, NaN, 0, 100, 50);
-ctx.drawImage(red, 0, 0, 100, 50, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, 100, 50, 0, -Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, 100, 50, 0, NaN, 100, 50);
-ctx.drawImage(red, 0, 0, 100, 50, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, 50, 0, 0, -Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, 50, 0, 0, NaN, 50);
-ctx.drawImage(red, 0, 0, 100, 50, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, 0, 0, 100, -Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, 0, 0, 100, NaN);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, 0, 0, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, 0, 0, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, Infinity, 0, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, 0, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, 0, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, Infinity, 0, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, Infinity, 0, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, 0, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, 0, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, Infinity, 50, 0, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, Infinity, 0, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, 0, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, 0, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, Infinity, 0, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, Infinity, 0, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, 0, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, 0, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, Infinity, 100, 50, 0, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, 0, 0, 100, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, Infinity, 0, 100, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, 0, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, 0, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, Infinity, 0, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, Infinity, 0, 100, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, 0, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, 0, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, Infinity, 50, 0, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, Infinity, 0, 100, 50);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, 0, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, 0, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, Infinity, 0, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, Infinity, 0, 100, 50);
-ctx.drawImage(red, Infinity, 0, 100, 50, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, 0, 100, 50, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, 100, 50, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, 100, 50, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, 0, Infinity, 100, 50);
-ctx.drawImage(red, Infinity, 0, 100, 50, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, 100, 50, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, 0, 0, Infinity, 50);
-ctx.drawImage(red, Infinity, 0, 100, 50, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, Infinity, 0, 100, 50, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, 0, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, Infinity, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, Infinity, 50, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, Infinity, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, 50, Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, 50, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, 50, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, 50, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, 50, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, 50, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, 50, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, Infinity, 100, 50, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, Infinity, 100, 50, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, 0, 0, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, Infinity, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, 50, Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, 50, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, 50, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, 50, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, 50, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, 50, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, 50, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, Infinity, 50, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, Infinity, 50, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, Infinity, Infinity, 0, 100, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, 100, Infinity, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, Infinity, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, 100, Infinity, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, Infinity, 0, Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, 100, Infinity, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, Infinity, 0, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, Infinity, 0, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, 100, Infinity, 0, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, Infinity, Infinity, 100, 50);
-ctx.drawImage(red, 0, 0, 100, 50, Infinity, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, 50, Infinity, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, Infinity, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, Infinity, 0, Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, 50, Infinity, 0, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, Infinity, 0, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, 0, Infinity, Infinity, 50);
-ctx.drawImage(red, 0, 0, 100, 50, 0, Infinity, Infinity, Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, 0, Infinity, 100, Infinity);
-ctx.drawImage(red, 0, 0, 100, 50, 0, 0, Infinity, Infinity);
-_assertPixel(canvas, 50,25, 0,255,0,255);
+fetch('/images/redtransparent.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, Infinity, 0);
+ctx.drawImage(bitmap, -Infinity, 0);
+ctx.drawImage(bitmap, NaN, 0);
+ctx.drawImage(bitmap, 0, Infinity);
+ctx.drawImage(bitmap, 0, -Infinity);
+ctx.drawImage(bitmap, 0, NaN);
+ctx.drawImage(bitmap, Infinity, Infinity);
+ ctx.drawImage(bitmap, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, -Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, NaN, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, -Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, NaN, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, -Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, NaN, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, -Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, NaN);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity);
+ ctx.drawImage(bitmap, Infinity, 0, 100, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, -Infinity, 0, 100, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, NaN, 0, 100, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, -Infinity, 100, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, NaN, 100, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, -Infinity, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, NaN, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, -Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, NaN, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, -Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, NaN, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, -Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, NaN, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, -Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, NaN, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, 100, -Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, 100, NaN);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, Infinity, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, Infinity, 50, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, Infinity, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, Infinity, 100, 50, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, Infinity, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, Infinity, 50, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, Infinity, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, Infinity, 0, 100, 50, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, Infinity, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, Infinity, 50, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, Infinity, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, Infinity, 100, 50, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, 0, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, Infinity, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, Infinity, 50, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, Infinity, 0, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, 0, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, 0, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, 0, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, Infinity, 0, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, Infinity, Infinity, 100, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, Infinity, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, Infinity, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, Infinity, 0, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, Infinity, 0, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, Infinity, 0, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, Infinity, Infinity, 50);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, Infinity, Infinity, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, Infinity, 100, Infinity);
+ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, Infinity, Infinity);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nowrap.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nowrap.html
index 71b45a52d43..3fde82454a8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nowrap.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.nowrap.html
@@ -21,10 +21,17 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('redtransparent.png'), -1950, 0, 2000, 50);
-_assertPixelApprox(canvas, 45,25, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
-_assertPixelApprox(canvas, 55,25, 0,255,0,255, 2);
+fetch('/images/redtransparent.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, -1950, 0, 2000, 50);
+ _assertPixelApprox(canvas, 45,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ _assertPixelApprox(canvas, 55,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.path.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.path.html
index 7cc5afe0942..ebc7040fa4b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.path.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.path.html
@@ -21,12 +21,18 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.rect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('red.png'), 0, 0);
-ctx.fill();
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0);
+ ctx.fill();
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
</script>
-<img src="/images/red.png" id="red.png" class="resource">
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html
index b01232d447d..5464e63e230 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.svg.html
@@ -19,11 +19,17 @@
var t = async_test("drawImage() of an SVG image");
_addTest(function(canvas, ctx) {
-ctx.drawImage(document.getElementById('green.svg'), 0, 0);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+fetch('/images/green.svg')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
</script>
-<img src="/images/green.svg" id="green.svg" class="resource">
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.transform.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.transform.html
index c49070e69cb..2c8f930262b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.transform.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.transform.html
@@ -22,8 +22,15 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.translate(100, 0);
-ctx.drawImage(document.getElementById('red.png'), 0, 0);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+fetch('red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.html
index 3831f3cc864..c3ce69d9e0b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.html
@@ -21,10 +21,18 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('red.png'), 10, 10, 0, 1, 0, 0, 100, 50);
-ctx.drawImage(document.getElementById('red.png'), 10, 10, 1, 0, 0, 0, 100, 50);
-ctx.drawImage(document.getElementById('red.png'), 10, 10, 0, 0, 0, 0, 100, 50);
-_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+const red = async () => await createImageBitmap(await (await fetch("/images/red.png")).blob());
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 10, 10, 0, 1, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 10, 10, 1, 0, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 10, 10, 0, 0, 0, 0, 100, 50);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+ });
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html
index b37cd4d19da..403df3db463 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html
@@ -21,10 +21,17 @@ _addTest(function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
-ctx.drawImage(document.getElementById('red-zerowidth.svg'), 0, 0, 100, 50);
-ctx.drawImage(document.getElementById('red-zeroheight.svg'), 0, 0, 100, 50);
-ctx.drawImage(document.getElementById('red-zerosize.svg'), 0, 0, 100, 50);
-_assertPixel(canvas, 50,25, 0,255,0,255);
+fetch('/images/red-zerowidth.svg')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ });
+});
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html
index 32c690d9784..cd7ee9cf2a5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.html
@@ -24,22 +24,18 @@ await (function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 2,253,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js
index 010fbd8bfa9..1c804a3961e 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.image.worker.js
@@ -19,21 +19,17 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 2,253,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html
index f057141895d..af1ca48e9d8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.html
@@ -23,24 +23,20 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.fillStyle = ctx.createPattern(bitmap, 'no-repeat');
ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
ctx.fillRect(0, 0, 100, 50);
_assertPixelApprox(canvas, 50,25, 2,253,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js
index 5607972635e..58ef4f3b9dc 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/compositing/2d.composite.globalAlpha.imagepattern.worker.js
@@ -18,23 +18,19 @@ 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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.fillStyle = ctx.createPattern(bitmap, 'no-repeat');
ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
ctx.fillRect(0, 0, 100, 50);
_assertPixelApprox(canvas, 50,25, 2,253,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html
index e7034126cf9..508376cd60c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html
@@ -24,25 +24,20 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/green.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, 100, 50);
_assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
_assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
_assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
_assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js
index 244bc90fe7f..36770f779be 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.worker.js
@@ -19,24 +19,19 @@ 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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/green.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, 100, 50);
_assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
_assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
_assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
_assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html
index ce6c758b3c8..4742fa21220 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html
@@ -24,25 +24,20 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/rgrg-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 140, 20, 100, 50, 0, 0, 100, 50);
_assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
_assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
_assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
_assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js
index 1522353ad6e..2780240bd88 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.worker.js
@@ -19,24 +19,19 @@ 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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/rgrg-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 140, 20, 100, 50, 0, 0, 100, 50);
_assertPixelApprox(canvas, 0,0, 0,255,0,255, 2);
_assertPixelApprox(canvas, 99,0, 0,255,0,255, 2);
_assertPixelApprox(canvas, 0,49, 0,255,0,255, 2);
_assertPixelApprox(canvas, 99,49, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html
index 89acdb8e362..fd1c853b88a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html
@@ -24,17 +24,11 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/rgrg-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0, 256, 256, 0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 51, 26);
@@ -47,9 +41,10 @@ promise.then(function(response) {
_assertPixelApprox(canvas, 80,20, 0,255,0,255, 2);
_assertPixelApprox(canvas, 20,30, 0,255,0,255, 2);
_assertPixelApprox(canvas, 80,30, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js
index 6658e217505..2bb379e7ebb 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.worker.js
@@ -19,17 +19,11 @@ 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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/rgrg-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0, 256, 256, 0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 51, 26);
@@ -42,8 +36,9 @@ promise.then(function(response) {
_assertPixelApprox(canvas, 80,20, 0,255,0,255, 2);
_assertPixelApprox(canvas, 20,30, 0,255,0,255, 2);
_assertPixelApprox(canvas, 80,30, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html
index eb8476f7c3a..77134adfac5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.html
@@ -25,22 +25,17 @@ await (function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalAlpha = 0;
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js
index 92cb23fe14d..07d8d9288df 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.alpha.worker.js
@@ -20,21 +20,16 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalAlpha = 0;
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html
index ea4205abd44..2b33b7dd2d7 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html
@@ -22,22 +22,17 @@ var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
-var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/anim-poster-gr.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('anim-poster-gr.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js
index 94ca08a075b..5f246feb260 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.worker.js
@@ -17,21 +17,16 @@ t.step(function() {
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/anim-poster-gr.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('anim-poster-gr.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html
index 37aae52a539..d9890f3057b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.html
@@ -22,24 +22,19 @@ var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
-var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/broken.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/broken.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js
index d3f1b7e4a11..51560c443db 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.broken.worker.js
@@ -17,23 +17,18 @@ t.step(function() {
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/broken.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/broken.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html
index 970cb4d5a5a..994f601651d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.html
@@ -26,22 +26,21 @@ ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.rect(-10, -10, 1, 1);
ctx.clip();
-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) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0);
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.rect(-10, -10, 1, 1);
+ ctx.clip();
+ ctx.drawImage(document.getElementById('red.png'), 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js
index d30a05fa9db..1a462aff681 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.clip.worker.js
@@ -21,21 +21,20 @@ ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.rect(-10, -10, 1, 1);
ctx.clip();
-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) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0);
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.rect(-10, -10, 1, 1);
+ ctx.clip();
+ ctx.drawImage(document.getElementById('red.png'), 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html
index 90afbcbda8b..b4bc6f39ce9 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.html
@@ -25,22 +25,17 @@ await (function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalCompositeOperation = 'destination-over';
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js
index 0c4a7fe10a8..f6d4a5d284a 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.composite.worker.js
@@ -20,21 +20,16 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalCompositeOperation = 'destination-over';
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html
index c6a3fbcf005..98ca580e591 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.html
@@ -22,22 +22,17 @@ var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
-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);
- };
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
- _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js
index 7b16cbb4f5f..7206099837d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.floatsource.worker.js
@@ -17,21 +17,16 @@ t.step(function() {
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);
- };
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
- _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html
index 1c207673963..bfe2a9c96f6 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.html
@@ -24,17 +24,11 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 100, 78, 50, 50, 0, 50, 50, -50);
ctx.drawImage(bitmap, 100, 128, 50, -50, 100, 50, -50, -50);
_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
@@ -47,9 +41,10 @@ promise.then(function(response) {
_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js
index 5ca4d14ef63..aebbb34b3ed 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedest.worker.js
@@ -19,17 +19,11 @@ 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/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 100, 78, 50, 50, 0, 50, 50, -50);
ctx.drawImage(bitmap, 100, 128, 50, -50, 100, 50, -50, -50);
_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
@@ -42,8 +36,9 @@ promise.then(function(response) {
_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html
index af274bf9bcd..46c571f1539 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.html
@@ -24,17 +24,11 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 178, 50, -100, 0, 0, 50, 100);
ctx.drawImage(bitmap, 0, 78, 50, 100, 50, 100, 50, -100);
_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
@@ -47,9 +41,10 @@ promise.then(function(response) {
_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js
index 2a6cc81058d..4bfb5433b86 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativedir.worker.js
@@ -19,17 +19,11 @@ 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/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 178, 50, -100, 0, 0, 50, 100);
ctx.drawImage(bitmap, 0, 78, 50, 100, 50, 100, 50, -100);
_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
@@ -42,8 +36,9 @@ promise.then(function(response) {
_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html
index 5a7b2af7f2a..4e60d7e5e91 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.html
@@ -24,17 +24,11 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
-var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 100, 78, -100, 50, 0, 0, 50, 50);
ctx.drawImage(bitmap, 100, 128, -100, -50, 50, 0, 50, 50);
_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
@@ -47,9 +41,10 @@ promise.then(function(response) {
_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js
index ada79f9137d..6d0bec1a1db 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.negativesource.worker.js
@@ -19,17 +19,11 @@ 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/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 100, 78, -100, 50, 0, 0, 50, 50);
ctx.drawImage(bitmap, 100, 128, -100, -50, 50, 0, 50, 50);
_assertPixelApprox(canvas, 1,1, 0,255,0,255, 2);
@@ -42,8 +36,9 @@ promise.then(function(response) {
_assertPixelApprox(canvas, 51,48, 0,255,0,255, 2);
_assertPixelApprox(canvas, 25,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 75,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html
index 4a6a23b0fc3..dc932df3cd0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html
@@ -24,17 +24,11 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/redtransparent.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, Infinity, 0);
ctx.drawImage(bitmap, -Infinity, 0);
ctx.drawImage(bitmap, NaN, 0);
@@ -337,9 +331,10 @@ ctx.drawImage(bitmap, 0, 0, 100, 50, 0, Infinity, Infinity, Infinity);
ctx.drawImage(bitmap, 0, 0, 100, 50, 0, Infinity, 100, Infinity);
ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, Infinity, Infinity);
_assertPixel(canvas, 50,25, 0,255,0,255);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js
index a2e77832a20..7dee1805806 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nonfinite.worker.js
@@ -19,17 +19,11 @@ 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/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/redtransparent.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, Infinity, 0);
ctx.drawImage(bitmap, -Infinity, 0);
ctx.drawImage(bitmap, NaN, 0);
@@ -332,8 +326,9 @@ ctx.drawImage(bitmap, 0, 0, 100, 50, 0, Infinity, Infinity, Infinity);
ctx.drawImage(bitmap, 0, 0, 100, 50, 0, Infinity, 100, Infinity);
ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, Infinity, Infinity);
_assertPixel(canvas, 50,25, 0,255,0,255);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html
index a45fa15daed..fc167879786 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.html
@@ -24,24 +24,19 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/redtransparent.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, -1950, 0, 2000, 50);
_assertPixelApprox(canvas, 45,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 55,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js
index ab3a9367dd3..539c6bf9772 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.nowrap.worker.js
@@ -19,23 +19,18 @@ 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/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/redtransparent.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, -1950, 0, 2000, 50);
_assertPixelApprox(canvas, 45,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
_assertPixelApprox(canvas, 55,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html
index 938c014c7ab..3977880de19 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.html
@@ -24,23 +24,18 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.rect(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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
ctx.fill();
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js
index 55212909778..5132aa994f1 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.path.worker.js
@@ -19,22 +19,17 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.rect(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) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
ctx.fill();
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html
index 559eb9420e6..d5317dd0063 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.html
@@ -22,22 +22,17 @@ var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
-var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.svg');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/green.svg')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js
index 2d832be3636..fda62017c26 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.svg.worker.js
@@ -17,21 +17,16 @@ t.step(function() {
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.svg');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+fetch('/images/green.svg')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html
index e4d905474a4..bdbdb393cf8 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.html
@@ -25,22 +25,17 @@ await (function(canvas, ctx) {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.translate(100, 0);
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js
index 2fc0caf1c31..a42f2785164 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.transform.worker.js
@@ -20,21 +20,16 @@ var ctx = canvas.getContext('2d');
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.translate(100, 0);
-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) {
- createImageBitmap(response).then(bitmap => {
+fetch('red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
_assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+ });
+});
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html
index d91a1960608..bdd68d20080 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html
@@ -24,24 +24,20 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
ctx.fillStyle = '#0f0';
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) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 10, 10, 0, 1, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 10, 10, 1, 0, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 10, 10, 0, 0, 0, 0, 100, 50);
- _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+const red = async () => await createImageBitmap(await (await fetch("/images/red.png")).blob());
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 10, 10, 0, 1, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 10, 10, 1, 0, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 10, 10, 0, 0, 0, 0, 100, 50);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+ });
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html
index 25cd54b57a0..5a0d4fcda29 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html
@@ -24,24 +24,19 @@ var ctx = canvas.getContext('2d');
await (function(canvas, ctx) {
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-zerowidth.svg');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
+fetch('/images/red-zerowidth.svg')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ });
});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- }, t_fail);
-}).then(t_pass, t_fail);
})(canvas, ctx);
+t.done();
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js
index 1465d6c1bc2..729e0e97a4c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.worker.js
@@ -19,23 +19,18 @@ 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-zerowidth.svg');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
+fetch('/images/red-zerowidth.svg')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ _assertPixel(canvas, 50,25, 0,255,0,255);
+ });
});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- _assertPixel(canvas, 50,25, 0,255,0,255);
- }, t_fail);
-}).then(t_pass, t_fail);
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js
index 654e9bdd744..2655e3e91f5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js
+++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.worker.js
@@ -19,23 +19,19 @@ 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/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
-});
-promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 10, 10, 0, 1, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 10, 10, 1, 0, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 10, 10, 0, 0, 0, 0, 100, 50);
- _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
- }, t_fail);
-}).then(t_pass, t_fail);
+const red = async () => await createImageBitmap(await (await fetch("/images/red.png")).blob());
+fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 10, 10, 0, 1, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 10, 10, 1, 0, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 10, 10, 0, 0, 0, 0, 100, 50);
+ _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2);
+ });
+ });
+t.done();
});
done();
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/compositing.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/compositing.yaml
index c0b7b83e001..e808206bdab 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/compositing.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/compositing.yaml
@@ -36,19 +36,6 @@
@assert pixel 50,25 ==~ 2,253,0,255;
expected: green
-- name: 2d.composite.globalAlpha.image
- images:
- - red.png
- canvasType:
- ['HTMLCanvas']
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
- ctx.drawImage(document.getElementById('red.png'), 0, 0);
- @assert pixel 50,25 ==~ 2,253,0,255;
- expected: green
-
- name: 2d.composite.globalAlpha.canvas
canvasType: ['HTMLCanvas']
code: |
@@ -66,19 +53,6 @@
@assert pixel 50,25 ==~ 2,253,0,255;
expected: green
-- name: 2d.composite.globalAlpha.imagepattern
- images:
- - red.png
- canvasType: ['HTMLCanvas']
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.fillStyle = ctx.createPattern(document.getElementById('red.png'), 'no-repeat');
- ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
- ctx.fillRect(0, 0, 100, 50);
- @assert pixel 50,25 ==~ 2,253,0,255;
- expected: green
-
- name: 2d.composite.globalAlpha.canvaspattern
canvasType: ['HTMLCanvas']
code: |
@@ -181,21 +155,17 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
- 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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
@assert pixel 50,25 ==~ 2,253,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.composite.globalAlpha.canvas
canvasType: ['OffscreenCanvas']
@@ -215,23 +185,19 @@
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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.fillStyle = ctx.createPattern(bitmap, 'no-repeat');
ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
ctx.fillRect(0, 0, 100, 50);
@assert pixel 50,25 ==~ 2,253,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.composite.globalAlpha.canvaspattern
canvasType: ['OffscreenCanvas']
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
index e263bf0253d..4442f1ad481 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
@@ -35,55 +35,6 @@
@assert pixel 99,49 ==~ 0,255,0,255;
expected: green
-- name: 2d.drawImage.9arg.basic
- canvasType: ['HTMLCanvas']
- images:
- - green.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('green.png'), 0, 0, 100, 50, 0, 0, 100, 50);
- @assert pixel 0,0 ==~ 0,255,0,255;
- @assert pixel 99,0 ==~ 0,255,0,255;
- @assert pixel 0,49 ==~ 0,255,0,255;
- @assert pixel 99,49 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.9arg.sourcepos
- canvasType: ['HTMLCanvas']
- images:
- - rgrg-256x256.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('rgrg-256x256.png'), 140, 20, 100, 50, 0, 0, 100, 50);
- @assert pixel 0,0 ==~ 0,255,0,255;
- @assert pixel 99,0 ==~ 0,255,0,255;
- @assert pixel 0,49 ==~ 0,255,0,255;
- @assert pixel 99,49 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.9arg.sourcesize
- canvasType: ['HTMLCanvas']
- images:
- - rgrg-256x256.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('rgrg-256x256.png'), 0, 0, 256, 256, 0, 0, 100, 50);
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 51, 26);
- ctx.fillRect(49, 24, 51, 26);
- @assert pixel 0,0 ==~ 0,255,0,255;
- @assert pixel 99,0 ==~ 0,255,0,255;
- @assert pixel 0,49 ==~ 0,255,0,255;
- @assert pixel 99,49 ==~ 0,255,0,255;
- @assert pixel 20,20 ==~ 0,255,0,255;
- @assert pixel 80,20 ==~ 0,255,0,255;
- @assert pixel 20,30 ==~ 0,255,0,255;
- @assert pixel 80,30 ==~ 0,255,0,255;
- expected: green
-
- name: 2d.drawImage.9arg.destpos
canvasType: ['HTMLCanvas']
images:
@@ -198,114 +149,6 @@
code: |
@assert throws TypeError ctx.drawImage(document.createElement('p'), 0, 0);
-- name: 2d.drawImage.floatsource
- canvasType: ['HTMLCanvas']
- images:
- - green.png
- code: |
- ctx.drawImage(document.getElementById('green.png'), 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
- @assert pixel 50,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.zerosource
- desc: drawImage with zero-sized source rectangle draws nothing without exception
- canvasType: ['HTMLCanvas']
- images:
- - red.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('red.png'), 10, 10, 0, 1, 0, 0, 100, 50);
- ctx.drawImage(document.getElementById('red.png'), 10, 10, 1, 0, 0, 0, 100, 50);
- ctx.drawImage(document.getElementById('red.png'), 10, 10, 0, 0, 0, 0, 100, 50);
- @assert pixel 50,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.zerosource.image
- desc: drawImage with zero-sized source rectangle from image draws nothing without exception
- canvasType: ['HTMLCanvas']
- images:
- - red-zerowidth.svg
- - red-zeroheight.svg
- - red-zerosize.svg
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('red-zerowidth.svg'), 0, 0, 100, 50);
- ctx.drawImage(document.getElementById('red-zeroheight.svg'), 0, 0, 100, 50);
- ctx.drawImage(document.getElementById('red-zerosize.svg'), 0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.negativesource
- desc: Negative source width/height represents the correct rectangle
- canvasType: ['HTMLCanvas']
- mozilla: {throws: !!null ''}
- images:
- - ggrr-256x256.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('ggrr-256x256.png'), 100, 78, -100, 50, 0, 0, 50, 50);
- ctx.drawImage(document.getElementById('ggrr-256x256.png'), 100, 128, -100, -50, 50, 0, 50, 50);
- @assert pixel 1,1 ==~ 0,255,0,255;
- @assert pixel 1,48 ==~ 0,255,0,255;
- @assert pixel 98,1 ==~ 0,255,0,255;
- @assert pixel 98,48 ==~ 0,255,0,255;
- @assert pixel 48,1 ==~ 0,255,0,255;
- @assert pixel 48,48 ==~ 0,255,0,255;
- @assert pixel 51,1 ==~ 0,255,0,255;
- @assert pixel 51,48 ==~ 0,255,0,255;
- @assert pixel 25,25 ==~ 0,255,0,255;
- @assert pixel 75,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.negativedest
- desc: Negative destination width/height represents the correct rectangle
- canvasType: ['HTMLCanvas']
- mozilla: {throws: !!null ''}
- images:
- - ggrr-256x256.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('ggrr-256x256.png'), 100, 78, 50, 50, 0, 50, 50, -50);
- ctx.drawImage(document.getElementById('ggrr-256x256.png'), 100, 128, 50, -50, 100, 50, -50, -50);
- @assert pixel 1,1 ==~ 0,255,0,255;
- @assert pixel 1,48 ==~ 0,255,0,255;
- @assert pixel 98,1 ==~ 0,255,0,255;
- @assert pixel 98,48 ==~ 0,255,0,255;
- @assert pixel 48,1 ==~ 0,255,0,255;
- @assert pixel 48,48 ==~ 0,255,0,255;
- @assert pixel 51,1 ==~ 0,255,0,255;
- @assert pixel 51,48 ==~ 0,255,0,255;
- @assert pixel 25,25 ==~ 0,255,0,255;
- @assert pixel 75,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.negativedir
- desc: Negative dimensions do not affect the direction of the image
- canvasType: ['HTMLCanvas']
- mozilla: {throws: !!null ''}
- images:
- - ggrr-256x256.png
- code: |
- ctx.fillStyle = '#f00';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('ggrr-256x256.png'), 0, 178, 50, -100, 0, 0, 50, 100);
- ctx.drawImage(document.getElementById('ggrr-256x256.png'), 0, 78, 50, 100, 50, 100, 50, -100);
- @assert pixel 1,1 ==~ 0,255,0,255;
- @assert pixel 1,48 ==~ 0,255,0,255;
- @assert pixel 98,1 ==~ 0,255,0,255;
- @assert pixel 98,48 ==~ 0,255,0,255;
- @assert pixel 48,1 ==~ 0,255,0,255;
- @assert pixel 48,48 ==~ 0,255,0,255;
- @assert pixel 51,1 ==~ 0,255,0,255;
- @assert pixel 51,48 ==~ 0,255,0,255;
- @assert pixel 25,25 ==~ 0,255,0,255;
- @assert pixel 75,25 ==~ 0,255,0,255;
- expected: green
-
- name: 2d.drawImage.outsidesource
DISABLED: fix this to match the current spec (transparent black outside source)
canvasType: ['HTMLCanvas']
@@ -403,17 +246,6 @@
@assert pixel 50,25 ==~ 0,255,0,255;
expected: green
-- name: 2d.drawImage.broken
- canvasType: ['HTMLCanvas']
- images:
- - broken.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var img = document.getElementById('broken.png');
- @assert throws INVALID_STATE_ERR ctx.drawImage(img, 0, 0);
- expected: green
-
- name: 2d.drawImage.nonexistent
canvasType: ['HTMLCanvas']
images:
@@ -439,16 +271,6 @@
canvas2.height = 0;
@assert throws INVALID_STATE_ERR ctx.drawImage(canvas2, 0, 0);
-- name: 2d.drawImage.svg
- desc: drawImage() of an SVG image
- canvasType: ['HTMLCanvas']
- images:
- - green.svg
- code: |
- ctx.drawImage(document.getElementById('green.svg'), 0, 0);
- @assert pixel 50,25 ==~ 0,255,0,255;
- expected: green
-
- name: 2d.drawImage.animated.gif
desc: drawImage() of an animated GIF draws the first frame
canvasType: ['HTMLCanvas']
@@ -475,108 +297,8 @@
}), 500);
expected: green
-- name: 2d.drawImage.animated.poster
- desc: drawImage() of an APNG draws the poster frame
- canvasType: ['HTMLCanvas']
- images:
- - anim-poster-gr.png
- code: |
- ctx.drawImage(document.getElementById('anim-poster-gr.png'), 0, 0);
- @assert pixel 50,25 ==~ 0,255,0,255; @moz-todo
- expected: green
-
-- name: 2d.drawImage.path
- canvasType: ['HTMLCanvas']
- images:
- - red.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.rect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('red.png'), 0, 0);
- ctx.fill();
- @assert pixel 50,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.transform
- canvasType: ['HTMLCanvas']
- images:
- - red.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.translate(100, 0);
- ctx.drawImage(document.getElementById('red.png'), 0, 0);
- @assert pixel 50,25 ==~ 0,255,0,255;
- expected: green
-
# TODO: drawImage shadows
-- name: 2d.drawImage.alpha
- canvasType: ['HTMLCanvas']
- images:
- - red.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.globalAlpha = 0;
- ctx.drawImage(document.getElementById('red.png'), 0, 0);
- @assert pixel 50,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.clip
- canvasType: ['HTMLCanvas']
- images:
- - red.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.rect(-10, -10, 1, 1);
- ctx.clip();
- ctx.drawImage(document.getElementById('red.png'), 0, 0);
- @assert pixel 50,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.composite
- canvasType: ['HTMLCanvas']
- images:
- - red.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.globalCompositeOperation = 'destination-over';
- ctx.drawImage(document.getElementById('red.png'), 0, 0);
- @assert pixel 50,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.nowrap
- desc: Stretched images do not get pixels wrapping around the edges
- canvasType: ['HTMLCanvas']
- images:
- - redtransparent.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- ctx.drawImage(document.getElementById('redtransparent.png'), -1950, 0, 2000, 50);
- @assert pixel 45,25 ==~ 0,255,0,255;
- @assert pixel 50,25 ==~ 0,255,0,255;
- @assert pixel 55,25 ==~ 0,255,0,255;
- expected: green
-
-- name: 2d.drawImage.nonfinite
- desc: drawImage() with Infinity/NaN is ignored
- canvasType: ['HTMLCanvas']
- images:
- - red.png
- code: |
- ctx.fillStyle = '#0f0';
- ctx.fillRect(0, 0, 100, 50);
- var red = document.getElementById('red.png');
- @nonfinite ctx.drawImage(<red>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>);
- @nonfinite ctx.drawImage(<red>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <100 Infinity -Infinity NaN>, <50 Infinity -Infinity NaN>);
- @nonfinite ctx.drawImage(<red>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <100 Infinity -Infinity NaN>, <50 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <100 Infinity -Infinity NaN>, <50 Infinity -Infinity NaN>);
- @assert pixel 50,25 == 0,255,0,255;
- expected: green
-
- name: 2d.drawImage.3arg
canvasType: ['OffscreenCanvas']
timeout: long
@@ -661,78 +383,59 @@
}).then(t_pass, t_fail);
- name: 2d.drawImage.9arg.basic
- canvasType: ['OffscreenCanvas']
images:
- green.png
timeout: long
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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/green.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0, 100, 50, 0, 0, 100, 50);
@assert pixel 0,0 ==~ 0,255,0,255;
@assert pixel 99,0 ==~ 0,255,0,255;
@assert pixel 0,49 ==~ 0,255,0,255;
@assert pixel 99,49 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.9arg.sourcepos
- canvasType: ['OffscreenCanvas']
images:
- rgrg-256x256.png
timeout: long
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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/rgrg-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 140, 20, 100, 50, 0, 0, 100, 50);
@assert pixel 0,0 ==~ 0,255,0,255;
@assert pixel 99,0 ==~ 0,255,0,255;
@assert pixel 0,49 ==~ 0,255,0,255;
@assert pixel 99,49 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.9arg.sourcesize
- canvasType: ['OffscreenCanvas']
images:
- rgrg-256x256.png
timeout: long
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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/rgrg-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0, 256, 256, 0, 0, 100, 50);
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 51, 26);
@@ -745,8 +448,9 @@
@assert pixel 80,20 ==~ 0,255,0,255;
@assert pixel 20,30 ==~ 0,255,0,255;
@assert pixel 80,30 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.9arg.destpos
canvasType: ['OffscreenCanvas']
@@ -865,55 +569,43 @@
@assert throws INVALID_STATE_ERR ctx.drawImage(offscreenCanvas2, 0, 0);
- name: 2d.drawImage.floatsource
- canvasType: ['OffscreenCanvas']
timeout: long
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);
- };
+ fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
+ @assert pixel 50,25 ==~ 0,255,0,255;
+ });
});
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 10.1, 10.1, 0.1, 0.1, 0, 0, 100, 50);
- @assert pixel 50,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ Expected: green
- name: 2d.drawImage.zerosource
desc: drawImage with zero-sized source rectangle draws nothing without exception
- canvasType: ['OffscreenCanvas']
timeout: long
images:
- red.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/green.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 10, 10, 0, 1, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 10, 10, 1, 0, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 10, 10, 0, 0, 0, 0, 100, 50);
- @assert pixel 50,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ const red = async () => await createImageBitmap(await (await fetch("/images/red.png")).blob());
+ fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 10, 10, 0, 1, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 10, 10, 1, 0, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 10, 10, 0, 0, 0, 0, 100, 50);
+ @assert pixel 50,25 ==~ 0,255,0,255;
+ });
+ });
+ expected: green
- name: 2d.drawImage.zerosource.image
desc: drawImage with zero-sized source rectangle from image draws nothing without exception
- canvasType: ['OffscreenCanvas']
images:
- red-zerowidth.svg
- red-zeroheight.svg
@@ -922,27 +614,21 @@
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-zerowidth.svg');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
+ fetch('/images/red-zerowidth.svg')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ ctx.drawImage(bitmap, 0, 0, 100, 50);
+ @assert pixel 50,25 == 0,255,0,255;
+ });
});
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- ctx.drawImage(bitmap, 0, 0, 100, 50);
- @assert pixel 50,25 == 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ expected: green
- name: 2d.drawImage.negativesource
desc: Negative source width/height represents the correct rectangle
- canvasType: ['OffscreenCanvas']
mozilla: {throws: !!null ''}
images:
- ggrr-256x256.png
@@ -950,17 +636,11 @@
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/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 100, 78, -100, 50, 0, 0, 50, 50);
ctx.drawImage(bitmap, 100, 128, -100, -50, 50, 0, 50, 50);
@assert pixel 1,1 ==~ 0,255,0,255;
@@ -973,12 +653,12 @@
@assert pixel 51,48 ==~ 0,255,0,255;
@assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.negativedest
desc: Negative destination width/height represents the correct rectangle
- canvasType: ['OffscreenCanvas']
mozilla: {throws: !!null ''}
timeout: long
images:
@@ -986,17 +666,11 @@
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/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 100, 78, 50, 50, 0, 50, 50, -50);
ctx.drawImage(bitmap, 100, 128, 50, -50, 100, 50, -50, -50);
@assert pixel 1,1 ==~ 0,255,0,255;
@@ -1009,12 +683,12 @@
@assert pixel 51,48 ==~ 0,255,0,255;
@assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.negativedir
desc: Negative dimensions do not affect the direction of the image
- canvasType: ['OffscreenCanvas']
mozilla: {throws: !!null ''}
timeout: long
images:
@@ -1022,17 +696,11 @@
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/ggrr-256x256.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/ggrr-256x256.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 178, 50, -100, 0, 0, 50, 100);
ctx.drawImage(bitmap, 0, 78, 50, 100, 50, 100, 50, -100);
@assert pixel 1,1 ==~ 0,255,0,255;
@@ -1045,8 +713,9 @@
@assert pixel 51,48 ==~ 0,255,0,255;
@assert pixel 25,25 ==~ 0,255,0,255;
@assert pixel 75,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.outsidesource
DISABLED: fix this to match the current spec (transparent black outside source)
@@ -1086,100 +755,76 @@
@assert throws INDEX_SIZE_ERR ctx.drawImage(bitmap1, 0, 0, 5, -5, 0, 0, 100, 50);
@assert throws INDEX_SIZE_ERR ctx.drawImage(bitmap1, 110, 60, -20, -20, 0, 0, 100, 50);
@assert pixel 50,25 ==~ 0,255,0,255; @moz-todo
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.broken
- canvasType: ['OffscreenCanvas']
timeout: long
code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/broken.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/broken.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.drawImage(bitmap, 0, 0);
@assert pixel 50,25 ==~ 0,255,0,255; @moz-todo
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.svg
desc: drawImage() of an SVG image
- canvasType: ['OffscreenCanvas']
timeout: long
code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/green.svg');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/green.svg')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
@assert pixel 50,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.animated.poster
desc: drawImage() of an APNG draws the poster frame
- canvasType: ['OffscreenCanvas']
images:
- anim-poster-gr.png
timeout: long
code: |
- var promise = new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", '/images/anim-poster-gr.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+ fetch('anim-poster-gr.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
@assert pixel 50,25 ==~ 0,255,0,255; @moz-todo
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.path
- canvasType: ['OffscreenCanvas']
timeout: long
code: |
ctx.fillStyle = '#0f0';
ctx.rect(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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
ctx.fill();
@assert pixel 50,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.transform
- canvasType: ['OffscreenCanvas']
images:
- red.png
timeout: long
@@ -1187,24 +832,18 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.translate(100, 0);
- 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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
@assert pixel 50,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.alpha
- canvasType: ['OffscreenCanvas']
images:
- red.png
timeout: long
@@ -1212,24 +851,18 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalAlpha = 0;
- 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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
@assert pixel 50,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.clip
- canvasType: ['OffscreenCanvas']
images:
- red.png
timeout: long
@@ -1238,24 +871,22 @@
ctx.fillRect(0, 0, 100, 50);
ctx.rect(-10, -10, 1, 1);
ctx.clip();
- 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) {
- createImageBitmap(response).then(bitmap => {
- ctx.drawImage(bitmap, 0, 0);
+ fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
+ ctx.fillStyle = '#0f0';
+ ctx.fillRect(0, 0, 100, 50);
+ ctx.rect(-10, -10, 1, 1);
+ ctx.clip();
+ ctx.drawImage(document.getElementById('red.png'), 0, 0);
@assert pixel 50,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.composite
- canvasType: ['OffscreenCanvas']
images:
- red.png
timeout: long
@@ -1263,72 +894,55 @@
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 50);
ctx.globalCompositeOperation = 'destination-over';
- 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) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/red.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, 0, 0);
@assert pixel 50,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.nowrap
desc: Stretched images do not get pixels wrapping around the edges
- canvasType: ['OffscreenCanvas']
images:
- redtransparent.png
timeout: long
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/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/redtransparent.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
ctx.drawImage(bitmap, -1950, 0, 2000, 50);
@assert pixel 45,25 ==~ 0,255,0,255;
@assert pixel 50,25 ==~ 0,255,0,255;
@assert pixel 55,25 ==~ 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
- name: 2d.drawImage.nonfinite
desc: drawImage() with Infinity/NaN is ignored
- canvasType: ['OffscreenCanvas']
images:
- red.png
timeout: long
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/redtransparent.png');
- xhr.responseType = 'blob';
- xhr.send();
- xhr.onload = function() {
- resolve(xhr.response);
- };
- });
- promise.then(function(response) {
- createImageBitmap(response).then(bitmap => {
+ fetch('/images/redtransparent.png')
+ .then(response => response.blob())
+ .then(blob => {
+ createImageBitmap(blob)
+ .then(bitmap => {
@nonfinite ctx.drawImage(<bitmap>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>);
@nonfinite ctx.drawImage(<bitmap>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <100 Infinity -Infinity NaN>, <50 Infinity -Infinity NaN>);
@nonfinite ctx.drawImage(<bitmap>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <100 Infinity -Infinity NaN>, <50 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <100 Infinity -Infinity NaN>, <50 Infinity -Infinity NaN>);
@assert pixel 50,25 == 0,255,0,255;
- }, t_fail);
- }).then(t_pass, t_fail);
+ });
+ });
+ expected: green
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html
new file mode 100644
index 00000000000..bf58630816a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-selectmenu-element/selectmenu-value-option.tentative.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://github.com/openui/open-ui/issues/664">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<selectmenu id=selectmenu>
+ <option id=optone>innertext one</option>
+ <option id=opttwo value=valueattribute>innertext two</option>
+</selectmenu>
+
+<script>
+test(() => {
+ assert_equals(selectmenu.value, 'innertext one',
+ 'The first option should be selected initially.');
+ selectmenu.value = 'valueattribute';
+ assert_equals(selectmenu.value, 'valueattribute',
+ 'Assigning value should look at the options value, not innertext');
+}, 'selectmenu.value should reflect option.value');
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.html
index 92c28a4b6c5..59392f428ae 100644
--- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.html
+++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.html
@@ -124,3 +124,53 @@ test(() => {
'The outer popover be should be closed when the hierarchy is broken.');
}, 'Disconnecting popover*target buttons when popovers are open should close all popovers.');
</script>
+
+<div id=outerpopover7 popover=auto>
+ <button id=togglebutton7 popovertarget=innerpopover7>toggle popover</button>
+</div>
+<div id=innerpopover7 popover=auto>popover</div>
+<script>
+test(() => {
+ outerpopover7.showPopover();
+ innerpopover7.showPopover();
+ assert_true(innerpopover7.matches(':open'),
+ 'The inner popover should be able to open successfully.');
+ assert_true(outerpopover7.matches(':open'),
+ 'The outer popover should stay open when opening the inner one.');
+
+ togglebutton7.setAttribute('popovertarget', 'otherpopover7');
+ assert_false(innerpopover7.matches(':open'),
+ 'The inner popover be should be closed when the hierarchy is broken.');
+ assert_false(outerpopover7.matches(':open'),
+ 'The outer popover be should be closed when the hierarchy is broken.');
+}, 'Changing the popovertarget attribute to break the chain should close all popovers.');
+</script>
+
+<div id=outerpopover8 popover=auto>
+ <div id=middlepopover8 popover=auto>
+ <div id=innerpopover8 popover=auto>hello</div>
+ </div>
+</div>
+<div id=otherpopover8 popover=auto>other popover</div>
+<button id=togglebutton8 popovertarget=middlepopover8>other button</div>
+<script>
+test(() => {
+ outerpopover8.showPopover();
+ middlepopover8.showPopover();
+ innerpopover8.showPopover();
+ assert_true(innerpopover8.matches(':open'),
+ 'The inner popover should be able to open successfully.');
+ assert_true(middlepopover8.matches(':open'),
+ 'The middle popover should stay open when opening the inner one.');
+ assert_true(outerpopover8.matches(':open'),
+ 'The outer popover should stay open when opening the inner one.');
+
+ togglebutton8.setAttribute('popovertarget', 'otherpopover8');
+ assert_true(innerpopover8.matches(':open'),
+ 'The inner popover should remain open.');
+ assert_true(middlepopover8.matches(':open'),
+ 'The middle popover should remain open.');
+ assert_true(outerpopover8.matches(':open'),
+ 'The outer popover should remain open.');
+}, `Modifying popovertarget on a button which doesn't break the chain shouldn't close any popovers.`);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/tools/update_html5lib_tests.py b/tests/wpt/web-platform-tests/html/tools/update_html5lib_tests.py
index f1a99416fc8..7ad9bc6f862 100644
--- a/tests/wpt/web-platform-tests/html/tools/update_html5lib_tests.py
+++ b/tests/wpt/web-platform-tests/html/tools/update_html5lib_tests.py
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
import glob
import hashlib
import itertools
diff --git a/tests/wpt/web-platform-tests/infrastructure/assumptions/tools/ahem-generate-table.py b/tests/wpt/web-platform-tests/infrastructure/assumptions/tools/ahem-generate-table.py
index 8790da02e27..314279f6710 100644
--- a/tests/wpt/web-platform-tests/infrastructure/assumptions/tools/ahem-generate-table.py
+++ b/tests/wpt/web-platform-tests/infrastructure/assumptions/tools/ahem-generate-table.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, unicode_literals
-
import itertools
import unicodedata
diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-event-listener.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-event-listener.html
index 6349c28b320..f866a1dfd83 100644
--- a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-event-listener.html
+++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-event-listener.html
@@ -17,9 +17,20 @@ test_self_event_listener(t => {
img.addEventListener("load", () => {
busy_wait();
});
+ img.id = "image";
document.body.appendChild(img);
t.add_cleanup(() => img.remove());
-}, "IMG.onload");
+}, "IMG#image.onload");
+
+test_self_event_listener(t => {
+ const img = document.createElement("img");
+ img.src = "/images/green.png";
+ img.addEventListener("load", () => {
+ busy_wait();
+ });
+ document.body.appendChild(img);
+ t.add_cleanup(() => img.remove());
+}, "IMG[src=/images/green.png].onload");
test_self_event_listener(t => {
const xhr = new XMLHttpRequest();
diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-first-ui-event.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-first-ui-event.html
index f2d8dac3f11..b30b645d2fa 100644
--- a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-first-ui-event.html
+++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-first-ui-event.html
@@ -91,7 +91,7 @@ promise_test(async t => {
document.body.appendChild(img);
t.add_cleanup(() => img.remove());
return promise;
- }, s => s.name === "IMG.onload", t);
+ }, s => s.name === "IMG[src=/images/green.png].onload", t);
const [entry] = await entryPromise;
assert_equals(entry.firstUIEventTimestamp, 0);
diff --git a/tests/wpt/web-platform-tests/png/cicp-chunk.html b/tests/wpt/web-platform-tests/png/cicp-chunk.html
index 4afc262dcf5..8add5d602ea 100644
--- a/tests/wpt/web-platform-tests/png/cicp-chunk.html
+++ b/tests/wpt/web-platform-tests/png/cicp-chunk.html
@@ -36,5 +36,5 @@ img.onload = () => {
assert_approx_equals(pixel[3], pixel_expected[3], epsilon);
}, {colorSpace: "display-p3"});
};
-img.src = "./images/cicp.png";
+img.src = "support/cicp-display-p3.png";
</script>
diff --git a/tests/wpt/web-platform-tests/images/cicp.png b/tests/wpt/web-platform-tests/png/support/cicp-display-p3.png
index 8fa0ce2123c..8fa0ce2123c 100644
--- a/tests/wpt/web-platform-tests/images/cicp.png
+++ b/tests/wpt/web-platform-tests/png/support/cicp-display-p3.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/images/trns.png b/tests/wpt/web-platform-tests/png/support/trns-high-bits-set.png
index 4e309a89a8a..4e309a89a8a 100644
--- a/tests/wpt/web-platform-tests/images/trns.png
+++ b/tests/wpt/web-platform-tests/png/support/trns-high-bits-set.png
Binary files differ
diff --git a/tests/wpt/web-platform-tests/png/trns-chunk.html b/tests/wpt/web-platform-tests/png/trns-chunk.html
index 652cda0e320..3a24753382b 100644
--- a/tests/wpt/web-platform-tests/png/trns-chunk.html
+++ b/tests/wpt/web-platform-tests/png/trns-chunk.html
@@ -33,5 +33,5 @@ img.onload = () => {
assert_approx_equals(pixel[3], pixel_expected[3], epsilon);
});
};
-img.src = "../images/trns.png";
+img.src = "support/trns-high-bits-set.png";
</script>
diff --git a/tests/wpt/web-platform-tests/scheduler/tentative/yield/yield-priority-idle-callbacks.html b/tests/wpt/web-platform-tests/scheduler/tentative/yield/yield-priority-idle-callbacks.html
new file mode 100644
index 00000000000..d47e8c5eba2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/scheduler/tentative/yield/yield-priority-idle-callbacks.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<title>Scheduler: yield inheritance in requestIdleCallback</title>
+<link rel="help" href="https://github.com/WICG/scheduling-apis">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+'use strict';
+
+// Queues a requestIdleCallback that schedules 2 user-visible tasks, 2
+// background tasks, another requestIdleCallback, and then yields 3 times using
+// `yieldParams`.
+//
+// Returns {tasks, ids} where `tasks` is an array of promises associated with
+// the tasks and `ids` is an array of task ids appended to by the scheduled
+// tasks.
+function postTestTasks(yieldParams) {
+ const ids = [];
+ const task = new Promise(resolve => {
+ requestIdleCallback(async () => {
+ ids.push('i1');
+
+ const subtasks = [];
+ subtasks.push(scheduler.postTask(() => { ids.push('uv1'); }));
+ subtasks.push(scheduler.postTask(() => { ids.push('uv2'); }));
+ subtasks.push(scheduler.postTask(() => { ids.push('bg1'); }, {priority: 'background'}));
+ subtasks.push(scheduler.postTask(() => { ids.push('bg2'); }, {priority: 'background'}));
+ subtasks.push(new Promise(resolve => {
+ requestIdleCallback(() => {
+ ids.push('i2');
+ resolve();
+ });
+ }));
+
+ for (let i = 1; i <= 3; i++) {
+ await scheduler.yield(yieldParams);
+ ids.push('y' + i);
+ }
+ await Promise.all(subtasks);
+ resolve();
+ });
+ });
+ return {task, ids};
+}
+
+const expected_inherited_task_order = 'i1,uv1,uv2,y1,y2,y3,bg1,bg2,i2';
+
+promise_test(async t => {
+ const {task, ids} = postTestTasks({priority: "inherit"});
+ await task;
+ assert_equals(ids.join(), expected_inherited_task_order);
+}, 'requestIdleCallback() yields at background priority when inheriting priority');
+
+promise_test(async t => {
+ const {task, ids} = postTestTasks({signal: "inherit"});
+ await task;
+ assert_equals(ids.join(), expected_inherited_task_order);
+}, 'requestIdleCallback() yields at background priority when inheriting signal');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/cache-storage-buckets.https.any.js b/tests/wpt/web-platform-tests/service-workers/cache-storage/cache-storage-buckets.https.any.js
index 0b5ef7b298d..fd59ba464db 100644
--- a/tests/wpt/web-platform-tests/service-workers/cache-storage/cache-storage-buckets.https.any.js
+++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/cache-storage-buckets.https.any.js
@@ -1,7 +1,8 @@
// META: title=Cache.put
// META: global=window,worker
// META: script=/common/get-host-info.sub.js
-// META: script=./resources/test-helpers.js
+// META: script=resources/test-helpers.js
+// META: script=/storage/buckets/resources/util.js
// META: timeout=long
var test_url = 'https://example.com/foo';
@@ -9,14 +10,10 @@ var test_body = 'Hello world!';
const { REMOTE_HOST } = get_host_info();
promise_test(async function(test) {
+ await prepareForBucketTest(test);
var inboxBucket = await navigator.storageBuckets.open('inbox');
var draftsBucket = await navigator.storageBuckets.open('drafts');
- test.add_cleanup(async function() {
- await navigator.storageBuckets.delete('inbox');
- await navigator.storageBuckets.delete('drafts');
- });
-
const cacheName = 'attachments';
const cacheKey = 'receipt1.txt';
@@ -43,14 +40,10 @@ promise_test(async function(test) {
}, 'caches from different buckets have different contents');
promise_test(async function(test) {
+ await prepareForBucketTest(test);
var inboxBucket = await navigator.storageBuckets.open('inbox');
var draftBucket = await navigator.storageBuckets.open('drafts');
- test.add_cleanup(async function() {
- await navigator.storageBuckets.delete('inbox');
- await navigator.storageBuckets.delete('drafts');
- });
-
var caches = inboxBucket.caches;
var attachments = await caches.open('attachments');
await attachments.put('receipt1.txt', new Response('bread x 2'));
diff --git a/tests/wpt/web-platform-tests/speculation-rules/prerender/resources/presentation-request.html b/tests/wpt/web-platform-tests/speculation-rules/prerender/resources/presentation-request.html
index 62829556bb4..18475a3d67f 100644
--- a/tests/wpt/web-platform-tests/speculation-rules/prerender/resources/presentation-request.html
+++ b/tests/wpt/web-platform-tests/speculation-rules/prerender/resources/presentation-request.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="utils.js"></script>
<script>
assert_true(document.prerendering);
diff --git a/tests/wpt/web-platform-tests/speech-api/SpeechSynthesisEvent-properties.html b/tests/wpt/web-platform-tests/speech-api/SpeechSynthesisEvent-properties.html
new file mode 100644
index 00000000000..f6c8f5fc321
--- /dev/null
+++ b/tests/wpt/web-platform-tests/speech-api/SpeechSynthesisEvent-properties.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<title>Properties of SpeechSynthesisEvent</title>
+<link rel="help" href="https://wicg.github.io/speech-api/#utterance-events">
+<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>
+// Written for https://github.com/WICG/speech-api/issues/103
+promise_test(async (t) => {
+ const utterance = new SpeechSynthesisUtterance('test');
+ const eventWatcher = new EventWatcher(t, utterance, ['start', 'end', 'error']);
+ await test_driver.bless('speechSynthesis.speak',
+ () => { speechSynthesis.speak(utterance) });
+ const events = await eventWatcher.wait_for(['start', 'end'], { record: 'all' });
+ assert_equals(events.length, 2, 'number of events');
+ for (const event of events) {
+ assert_true(event instanceof SpeechSynthesisEvent, 'is SpeechSynthesisEvent');
+ assert_false(event.bubbles, 'bubbles');
+ assert_false(event.cancelable, 'cancelable');
+ assert_equals(event.utterance, utterance, 'utterance');
+ }
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js b/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js
index 82794061bd0..f0aadf4828d 100644
--- a/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js
+++ b/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js
@@ -4,16 +4,17 @@
'use strict';
(async function() {
- // This is cross-domain from the current document.
+ // These are cross-domain from the current document.
const wwwAlt = "https://{{hosts[alt][www]}}:{{ports[https][0]}}";
+ const www1Alt = "https://{{hosts[alt][www1]}}:{{ports[https][0]}}";
+ const responder_html = "/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js";
if (window === window.top) {
// Test the interaction between two (same-origin) iframes.
promise_test(async (t) => {
- const responder_html = `${wwwAlt}/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js`;
const [frame1, frame2] = await Promise.all([
- CreateFrame(responder_html),
- CreateFrame(responder_html),
+ CreateFrame(wwwAlt + responder_html),
+ CreateFrame(wwwAlt + responder_html),
]);
t.add_cleanup(async () => {
@@ -27,6 +28,24 @@
assert_equals(state, "granted");
}, "Permissions grants are observable across same-origin iframes");
+ // Test the interaction between two cross-origin but same-site iframes.
+ promise_test(async (t) => {
+ const [frame1, frame2] = await Promise.all([
+ CreateFrame(wwwAlt + responder_html),
+ CreateFrame(www1Alt + responder_html),
+ ]);
+
+ t.add_cleanup(async () => {
+ await SetPermissionInFrame(frame1, [{ name: 'storage-access' }, 'prompt']);
+ });
+
+ const observed = ObservePermissionChange(frame2);
+ await SetPermissionInFrame(frame1, [{ name: 'storage-access' }, 'granted']);
+
+ const state = await observed;
+ assert_equals(state, "granted");
+ }, "Permissions grants are observable across same-site iframes");
+
promise_test(async (t) => {
// Finally run the simple tests below in a separate cross-origin iframe.
await RunTestsInIFrame('https://{{domains[www]}}:{{ports[https][0]}}/storage-access-api/resources/permissions-iframe.https.html');
diff --git a/tests/wpt/web-platform-tests/storage/buckets/buckets_storage_policy.tentative.https.any.js b/tests/wpt/web-platform-tests/storage/buckets/buckets_storage_policy.tentative.https.any.js
index 4aaa02e4be4..d6dce3675d0 100644
--- a/tests/wpt/web-platform-tests/storage/buckets/buckets_storage_policy.tentative.https.any.js
+++ b/tests/wpt/web-platform-tests/storage/buckets/buckets_storage_policy.tentative.https.any.js
@@ -1,15 +1,11 @@
// META: title=Buckets API: Tests for bucket storage policies.
+// META: script=/storage/buckets/resources/util.js
// META: global=window,worker
'use strict';
promise_test(async testCase => {
- testCase.add_cleanup(async () => {
- const bucketNames = await navigator.storageBuckets.keys();
- for (const bucketName of bucketNames) {
- await navigator.storageBuckets.delete(bucketName);
- }
- });
+ await prepareForBucketTest(testCase);
await promise_rejects_js(
testCase, TypeError,
diff --git a/tests/wpt/web-platform-tests/storage/buckets/resources/util.js b/tests/wpt/web-platform-tests/storage/buckets/resources/util.js
new file mode 100644
index 00000000000..50abce14cdc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/storage/buckets/resources/util.js
@@ -0,0 +1,15 @@
+'use strict';
+
+// Makes sure initial bucket state is as expected and to clean up after the test
+// is over (whether it passes or fails).
+async function prepareForBucketTest(test) {
+ // Verify initial state.
+ assert_equals('', (await navigator.storageBuckets.keys()).join());
+ // Clean up after test.
+ test.add_cleanup(async function() {
+ const keys = await navigator.storageBuckets.keys();
+ for (const key of keys) {
+ await navigator.storageBuckets.delete(key);
+ }
+ });
+}
diff --git a/tests/wpt/web-platform-tests/streams/piping/general.any.js b/tests/wpt/web-platform-tests/streams/piping/general.any.js
index bec3480f653..faeb8e321af 100644
--- a/tests/wpt/web-platform-tests/streams/piping/general.any.js
+++ b/tests/wpt/web-platform-tests/streams/piping/general.any.js
@@ -209,3 +209,16 @@ promise_test(t => {
return rs.pipeTo(ws, null);
}, 'pipeTo() promise should resolve if null is passed');
+
+promise_test(async t => {
+ /** @type {ReadableStreamDefaultController} */
+ var con;
+ let synchronous = false;
+ new ReadableStream({ start(c) { con = c }}, { highWaterMark: 0 }).pipeTo(
+ new WritableStream({ write() { synchronous = true; } })
+ )
+ // wait until start algorithm finishes
+ await Promise.resolve();
+ con.enqueue();
+ assert_false(synchronous, 'write algorithm must not run synchronously');
+}, "enqueue() must not synchronously call write algorithm");
diff --git a/tests/wpt/web-platform-tests/subresource-integrity/tools/generate_javascript.py b/tests/wpt/web-platform-tests/subresource-integrity/tools/generate_javascript.py
index 300e1703b17..fed3e5445fe 100644
--- a/tests/wpt/web-platform-tests/subresource-integrity/tools/generate_javascript.py
+++ b/tests/wpt/web-platform-tests/subresource-integrity/tools/generate_javascript.py
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
from os import path, listdir
from hashlib import sha512, sha256, md5
from base64 import b64encode
diff --git a/tests/wpt/web-platform-tests/subresource-integrity/tools/list_hashes.py b/tests/wpt/web-platform-tests/subresource-integrity/tools/list_hashes.py
index 5f189ce44b2..52f46ffd747 100644
--- a/tests/wpt/web-platform-tests/subresource-integrity/tools/list_hashes.py
+++ b/tests/wpt/web-platform-tests/subresource-integrity/tools/list_hashes.py
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
from os import path, listdir
from hashlib import sha512, sha384, sha256, md5
from base64 import b64encode
diff --git a/tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt b/tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt
index 7189b7b58f9..95753d91681 100644
--- a/tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt
+++ b/tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt
@@ -1,4 +1,4 @@
-pygithub==1.56
+pygithub==1.58.1
pyyaml==6.0
-requests==2.27.1
+requests==2.28.2
taskcluster==47.0.2
diff --git a/tests/wpt/web-platform-tests/tools/docker/requirements.txt b/tests/wpt/web-platform-tests/tools/docker/requirements.txt
index 06d168a18d2..75dd52bde00 100644
--- a/tests/wpt/web-platform-tests/tools/docker/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/docker/requirements.txt
@@ -1,2 +1,2 @@
pyyaml==6.0
-requests==2.27.1
+requests==2.28.2
diff --git a/tests/wpt/web-platform-tests/tools/manifest/requirements.txt b/tests/wpt/web-platform-tests/tools/manifest/requirements.txt
index 9f5bc8a143b..0236020bc1f 100644
--- a/tests/wpt/web-platform-tests/tools/manifest/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/manifest/requirements.txt
@@ -1 +1 @@
-zstandard==0.17.0
+zstandard==0.20.0
diff --git a/tests/wpt/web-platform-tests/tools/requirements_mypy.txt b/tests/wpt/web-platform-tests/tools/requirements_mypy.txt
index af7bf35b21a..48b6fecce53 100644
--- a/tests/wpt/web-platform-tests/tools/requirements_mypy.txt
+++ b/tests/wpt/web-platform-tests/tools/requirements_mypy.txt
@@ -7,6 +7,6 @@ types-python-dateutil==2.8.19
types-PyYAML==6.0.12.3
types-requests==2.28.11.5
types-setuptools==67.6.0.5
-types-six==1.16.19
+types-six==1.16.21.7
types-ujson==4.2.1
typing-extensions==4.1.1
diff --git a/tests/wpt/web-platform-tests/tools/requirements_pytest.txt b/tests/wpt/web-platform-tests/tools/requirements_pytest.txt
index e7678941a7f..a724ff23e51 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.0.1
-pytest-cov==3.0.0
+pytest-cov==4.0.0
hypothesis==6.70.0
diff --git a/tests/wpt/web-platform-tests/tools/requirements_tests.txt b/tests/wpt/web-platform-tests/tools/requirements_tests.txt
index 4d8f2a5d223..27dea42bf5d 100644
--- a/tests/wpt/web-platform-tests/tools/requirements_tests.txt
+++ b/tests/wpt/web-platform-tests/tools/requirements_tests.txt
@@ -1,5 +1,5 @@
httpx[http2]==0.22.0
-json-e==4.4.3
+json-e==4.5.1
jsonschema==3.2.0
pyyaml==6.0
taskcluster==47.0.2
diff --git a/tests/wpt/web-platform-tests/tools/wave/requirements.txt b/tests/wpt/web-platform-tests/tools/wave/requirements.txt
index 5c0369b9f56..f814994b483 100644
--- a/tests/wpt/web-platform-tests/tools/wave/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/wave/requirements.txt
@@ -1,2 +1,2 @@
-ua-parser==0.10.0
+ua-parser==0.16.1
python-dateutil==2.8.2
diff --git a/tests/wpt/web-platform-tests/tools/webtransport/requirements.txt b/tests/wpt/web-platform-tests/tools/webtransport/requirements.txt
index 8743e0317d3..d3b88d7f046 100644
--- a/tests/wpt/web-platform-tests/tools/webtransport/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/webtransport/requirements.txt
@@ -1 +1 @@
-aioquic==0.9.19
+aioquic==0.9.20
diff --git a/tests/wpt/web-platform-tests/tools/wpt/requirements.txt b/tests/wpt/web-platform-tests/tools/wpt/requirements.txt
index a743bbe341f..ba07d192a2d 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/wpt/requirements.txt
@@ -1 +1 @@
-requests==2.27.1
+requests==2.28.2
diff --git a/tests/wpt/web-platform-tests/tools/wpt/testfiles.py b/tests/wpt/web-platform-tests/tools/wpt/testfiles.py
index 172ad201fc8..74c97ceefe2 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/testfiles.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/testfiles.py
@@ -35,7 +35,7 @@ if MYPY:
from typing import Text
from typing import Tuple
-DEFAULT_IGNORE_RULERS = ("resources/testharness*", "resources/testdriver*")
+DEFAULT_IGNORE_RULES = ("resources/testharness*", "resources/testdriver*")
here = os.path.dirname(__file__)
wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir))
@@ -189,7 +189,7 @@ def repo_files_changed(revish, include_uncommitted=False, include_new=False):
def exclude_ignored(files, ignore_rules):
# type: (Iterable[Text], Optional[Sequence[Text]]) -> Tuple[List[Text], List[Text]]
if ignore_rules is None:
- ignore_rules = DEFAULT_IGNORE_RULERS
+ ignore_rules = DEFAULT_IGNORE_RULES
compiled_ignore_rules = [compile_ignore_rule(item) for item in set(ignore_rules)]
changed = []
@@ -362,7 +362,7 @@ def get_parser():
"or the end matching anything other than a path separator and ** in that "
"position matching anything. This flag can be used multiple times for "
"multiple rules. Specifying this flag overrides the default: " +
- ", ".join(DEFAULT_IGNORE_RULERS))
+ ", ".join(DEFAULT_IGNORE_RULES))
parser.add_argument("--modified", action="store_true",
help="Include files under version control that have been "
"modified or staged")
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
index 202e8074133..ccf09be728d 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt
@@ -4,6 +4,6 @@ mozinfo==1.2.2 # https://bugzilla.mozilla.org/show_bug.cgi?id=1621226
mozlog==7.1.0
mozprocess==1.3.0
pillow==8.4.0
-requests==2.27.1
+requests==2.28.2
six==1.16.0
urllib3[secure]==1.26.15
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chromium.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chromium.txt
index 8743e0317d3..d3b88d7f046 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chromium.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chromium.txt
@@ -1 +1 @@
-aioquic==0.9.19
+aioquic==0.9.20
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
index 12920a9956a..dfbdc6d9e34 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
@@ -1 +1 @@
-selenium==4.3.0
+selenium==4.8.2
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
index 1f9033c09fe..644df3bfd44 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
@@ -6,4 +6,4 @@ mozleak==0.2
mozprofile==2.5.0
mozrunner==8.2.1
mozversion==2.3.0
-psutil==5.9.1
+psutil==5.9.2
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
index 1726afa6079..83948c668e4 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
@@ -1,2 +1,2 @@
mozprocess==1.3.0
-selenium==4.3.0
+selenium==4.8.2
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
index 1726afa6079..83948c668e4 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
@@ -1,2 +1,2 @@
mozprocess==1.3.0
-selenium==4.3.0
+selenium==4.8.2
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
index 8d303aa4528..e2e2f09f708 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
@@ -1 +1 @@
-psutil==5.9.1
+psutil==5.9.2
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
index 5089b0c1838..64fb1390c04 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
@@ -1,2 +1,2 @@
-selenium==4.3.0
-requests==2.27.1
+selenium==4.8.2
+requests==2.28.2
diff --git a/tests/wpt/web-platform-tests/web-locks/storage-buckets.tentative.https.any.js b/tests/wpt/web-platform-tests/web-locks/storage-buckets.tentative.https.any.js
index 73cc0ac3725..a6b4f59a95d 100644
--- a/tests/wpt/web-platform-tests/web-locks/storage-buckets.tentative.https.any.js
+++ b/tests/wpt/web-platform-tests/web-locks/storage-buckets.tentative.https.any.js
@@ -1,5 +1,6 @@
// META: title=Web Locks API: Storage Buckets have independent lock sets
// META: script=resources/helpers.js
+// META: script=/storage/buckets/resources/util.js
// META: global=window,dedicatedworker,sharedworker,serviceworker
'use strict';
@@ -26,6 +27,8 @@ async function locksAreShared(t, bucket1, bucket2) {
}
promise_test(async t => {
+ await prepareForBucketTest(t);
+
const inboxBucket = await navigator.storageBuckets.open('inbox');
const draftsBucket = await navigator.storageBuckets.open('drafts');
@@ -50,4 +53,4 @@ promise_test(async t => {
assert_true(
await self.locksAreShared(t, inboxBucket, inboxBucket2),
'A two instances of the same non default bucket should share locks with theirselves');
-}, 'Storage buckets have independent locks'); \ No newline at end of file
+}, 'Storage buckets have independent locks');
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 6ac8c3394ce..625cd3a6304 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,9 @@ def int_interval(start: int, end: int) -> Callable[[Any], None]:
return _
+def positive_int(actual: Any) -> None:
+ assert isinstance(actual, int) and actual > 0
+
async def create_console_api_message(bidi_session, context, text):
await bidi_session.script.call_function(
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached_tentative.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached_tentative.py
new file mode 100644
index 00000000000..5022511f792
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached_tentative.py
@@ -0,0 +1,207 @@
+import pytest
+import random
+
+from tests.support.sync import AsyncPoll
+
+from .. import assert_response_event
+
+PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
+
+# The following tests are marked as tentative until
+# https://github.com/w3c/webdriver-bidi/pull/204 is merged.
+
+
+@pytest.mark.asyncio
+async def test_cached(
+ bidi_session,
+ top_context,
+ wait_for_event,
+ url,
+ fetch,
+ setup_network_test,
+):
+ network_events = await setup_network_test(
+ events=[
+ "network.responseStarted",
+ ]
+ )
+ events = network_events["network.responseStarted"]
+
+ cached_url = url(
+ f"/webdriver/tests/support/http_handlers/cached.py?status=200&nocache={random.random()}"
+ )
+ on_response_started = wait_for_event("network.responseStarted")
+ await fetch(cached_url)
+ await on_response_started
+
+ assert len(events) == 1
+ expected_request = {"method": "GET", "url": cached_url}
+
+ # The first request/response is used to fill the browser cache, so we expect
+ # fromCache to be False here.
+ expected_response = {
+ "url": cached_url,
+ "fromCache": False,
+ "status": 200,
+ }
+ assert_response_event(
+ events[0],
+ expected_request=expected_request,
+ expected_response=expected_response,
+ )
+
+ on_response_started = wait_for_event("network.responseStarted")
+ await fetch(cached_url)
+ await on_response_started
+
+ assert len(events) == 2
+
+ # The second request for the same URL has to be read from the local cache.
+ expected_response = {
+ "url": cached_url,
+ "fromCache": True,
+ "status": 200,
+ }
+ assert_response_event(
+ events[1],
+ expected_request=expected_request,
+ expected_response=expected_response,
+ )
+
+
+@pytest.mark.asyncio
+async def test_cached_redirect(
+ bidi_session,
+ top_context,
+ wait_for_event,
+ url,
+ fetch,
+ setup_network_test,
+):
+ network_events = await setup_network_test(
+ events=[
+ "network.responseStarted",
+ ]
+ )
+ events = network_events["network.responseStarted"]
+
+ text_url = url(PAGE_EMPTY_TEXT)
+ cached_url = url(
+ f"/webdriver/tests/support/http_handlers/cached.py?status=301&location={text_url}&nocache={random.random()}"
+ )
+
+ await fetch(cached_url)
+
+ # Expect two events, one for the initial request and one for the redirect.
+ wait = AsyncPoll(bidi_session, timeout=2)
+ await wait.until(lambda _: len(events) >= 2)
+ assert len(events) == 2
+
+ # The first request/response is used to fill the cache, so we expect
+ # fromCache to be False here.
+ expected_request = {"method": "GET", "url": cached_url}
+ expected_response = {
+ "url": cached_url,
+ "fromCache": False,
+ "status": 301,
+ }
+ assert_response_event(
+ events[0],
+ expected_request=expected_request,
+ expected_response=expected_response,
+ )
+
+ # The second request is the redirect
+ redirected_request = {"method": "GET", "url": text_url}
+ redirected_response = {"url": text_url, "status": 200}
+ assert_response_event(
+ events[1],
+ expected_request=redirected_request,
+ expected_response=redirected_response,
+ )
+
+ await fetch(cached_url)
+ wait = AsyncPoll(bidi_session, timeout=2)
+ await wait.until(lambda _: len(events) >= 4)
+ assert len(events) == 4
+
+ # The third request hits cached_url again and has to be read from the local cache.
+ expected_response = {
+ "url": cached_url,
+ "fromCache": True,
+ "status": 301,
+ }
+ assert_response_event(
+ events[2],
+ expected_request=expected_request,
+ expected_response=expected_response,
+ )
+
+ # The fourth request is the redirect
+ assert_response_event(
+ events[3],
+ expected_request=redirected_request,
+ expected_response=redirected_response,
+ )
+
+
+@pytest.mark.parametrize(
+ "method",
+ [
+ "GET",
+ "HEAD",
+ "OPTIONS",
+ ],
+)
+@pytest.mark.asyncio
+async def test_cached_revalidate(
+ bidi_session, top_context, wait_for_event, url, fetch, setup_network_test, method
+):
+ network_events = await setup_network_test(
+ events=[
+ "network.responseStarted",
+ ]
+ )
+ events = network_events["network.responseStarted"]
+
+ revalidate_url = url(
+ f"/webdriver/tests/support/http_handlers/must-revalidate.py?nocache={random.random()}"
+ )
+ on_response_started = wait_for_event("network.responseStarted")
+ await fetch(revalidate_url, method=method)
+ await on_response_started
+
+ assert len(events) == 1
+ expected_request = {"method": method, "url": revalidate_url}
+ expected_response = {
+ "url": revalidate_url,
+ "fromCache": False,
+ "status": 200,
+ }
+ assert_response_event(
+ events[0],
+ expected_request=expected_request,
+ expected_response=expected_response,
+ )
+
+ on_response_started = wait_for_event("network.responseStarted")
+
+ # Note that we pass a specific header so that the must-revalidate.py handler
+ # can decide to return a 304 without having to use another URL.
+ await fetch(revalidate_url, method=method, headers={"return-304": "true"})
+ await on_response_started
+
+ assert len(events) == 2
+
+ # Here fromCache should still be false, because for a 304 response the response
+ # cache state is "validated" and fromCache is only true if cache state is "local"
+ expected_response = {
+ "url": revalidate_url,
+ "fromCache": False,
+ "status": 304,
+ }
+ assert_response_event(
+ events[1],
+ expected_request=expected_request,
+ expected_response=expected_response,
+ )
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 e79a31448a3..b0c065dca11 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
import collections
import math
import sys
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/cached.py b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/cached.py
new file mode 100644
index 00000000000..a43410f8856
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/cached.py
@@ -0,0 +1,14 @@
+def main(request, response):
+ """Simple handler that returns a response with Cache-Control max-age=3600.
+ """
+
+ status = int(request.GET.get(b"status", None))
+ # For redirects, a "location" get parameter can indicate the redirected url
+ if status == 301 and b"location" in request.GET:
+ response.headers.set(b"Location", request.GET.first(b"location"))
+
+ response.status = status
+ response.headers.set(b"Content-Type", "text/plain")
+ response.headers.set(b"Expires", "Thu, 01 Dec 2100 20:00:00 GMT")
+ response.headers.set(b"Cache-Control", "max-age=3600")
+ return "Cached HTTP Response"
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/must-revalidate.py b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/must-revalidate.py
new file mode 100644
index 00000000000..94f5a795a29
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/must-revalidate.py
@@ -0,0 +1,17 @@
+def main(request, response):
+ """Simple handler that returns a response with Cache-Control max-age=0 and
+ must-revalidate.
+ The request can include a return-304 header to trigger the handler to return
+ a 304 instead of a 200.
+ """
+ response.headers.set(b"Content-Type", "text/plain")
+
+ if b"true" == request.headers.get(b"return-304", None):
+ # instruct the browser that the response was not modified and the cache
+ # can be used.
+ response.status = 304
+ return ""
+ else:
+ response.headers.set(b"Cache-Control", b"max-age=0, must-revalidate")
+ response.status = 200
+ return "must-revalidate HTTP Response"